Update xf86-video-openchrome to 0.2.905

This commit is contained in:
matthieu 2012-05-15 21:32:57 +00:00
parent 92db90a31d
commit 1b9e90b0ce
47 changed files with 17133 additions and 2247 deletions

View File

@ -14,6 +14,240 @@
(viaRestoreVideo), (viaExitVideo):
* src/via_video.h:
2011-05-10 Bartosz Kosiorek <gang65@poczta.onet.pl>
Workaround EXA crash with new libcairo2 (#298)
* src/via_accel.c: (viaExaPrepareComposite):
2011-05-08 Bartosz Kosiorek <gang65@poczta.onet.pl>
Fix cursor garbage after suspend/resume for Xserver 1.10 (#405)
* src/via_video.c: (viaRestoreVideo):
2011-05-04 Bartosz Kosiorek <gang65@poczta.onet.pl>
Fix XAA displaying issues
* src/via_accel.c: (viaInitXAA):
2011-01-23 Bartosz Kosiorek <gang65@poczta.onet.pl>
Enable hardware cursor for VX900
* src/via_cursor.c: (viaHWCursorInit):
* src/via_mode.c: (ViaModeSet):
2010-12-16 Bartosz Kosiorek <gang65@poczta.onet.pl>
Merge vx900_branch - initial VX900 support
* src/via_accel.c: (viaFlushPCI), (viaDisableVQ),
(viaInitialize2DEngine), (viaAccelSync), (viaPitchHelper),
(viaInitXAA):
* src/via_bandwidth.c: (ViaSetPrimaryFIFO), (ViaSetSecondaryFIFO):
* src/via_bios.h:
* src/via_crtc.c: (ViaFirstCRTCSetMode), (ViaSecondCRTCSetMode):
* src/via_cursor.c: (viaHWCursorInit), (viaCursorStore),
(viaCursorRestore), (viaShowCursor), (viaHideCursor),
(viaSetCursorPosition), (viaLoadCursorImage), (viaSetCursorColors):
* src/via_driver.c: (VIASetupDefaultOptions), (VIAPreInit),
(VIALeaveVT), (VIASave), (VIARestore), (ViaMMIOEnable),
(ViaMMIODisable), (VIAMapFB), (VIAWriteMode), (VIACloseScreen):
* src/via_driver.h:
* src/via_id.c:
* src/via_id.h:
* src/via_mode.c: (ViaDFPDetect), (ViaOutputsDetect),
(ViaOutputsSelect), (ViaGetMemoryBandwidth), (ViaSetDotclock),
(ViaModeSet):
* src/via_mode.h:
* src/via_panel.c: (ViaPanelScaleDisable), (ViaPanelPreInit),
(ViaPanelGetSizeFromDDC):
* src/via_video.c: (DecideOverlaySupport):
* src/via_xvmc.c: (ViaInitXVMC):
2010-12-15 Bartosz Kosiorek <gang65@poczta.onet.pl>
Enable the new mode switch and panel support on K8M800 and VM800 chipsets
* src/via_driver.c: (VIASetupDefaultOptions), (VIAPreInit):
* src/via_mode.c: (ViaModeSet):
2010-11-10 Bartosz Kosiorek <gang65@poczta.onet.pl>
Replace the deprecated functions
xalloc/xrealloc/xfree/xcalloc with
malloc/realloc/free/calloc.
Refer to "/xserver/include/os.h"
* src/via_accel.c: (viaSetupCBuffer), (viaTearDownCBuffer),
(viaInitExa), (viaExitAccel), (viaFinishInitAccel):
* src/via_dga.c: (VIASetupDGAMode):
* src/via_dri.c: (VIAInitVisualConfigs), (VIADRIScreenInit),
(VIADRICloseScreen):
* src/via_driver.c: (VIAFreeRec), (VIAProbe), (VIAPreInit),
(VIACloseScreen):
* src/via_memcpy.c: (viaVidCopyInit):
* src/via_swov.c: (Upd_Video):
* src/via_vbe.c: (ViaVbeSetMode):
* src/via_video.c: (viaExitVideo), (viaStopVideo),
(viaDmaBlitImage):
* src/via_xvmc.c: (cleanupViaXvMC), (ViaCleanupXVMC),
(ViaXvMCCreateContext), (ViaXvMCCreateSurface),
(ViaXvMCCreateSubpicture), (ViaXvMCDestroyContext),
(ViaXvMCDestroySurface), (ViaXvMCDestroySubpicture),
(viaXvMCInitXv):
2010-10-24 Bartosz Kosiorek <gang65@poczta.onet.pl>
Siragon ML-6200 laptop support
* src/via_id.c:
2010-06-24 Jon Nettleton <jon.nettleton@gmail.com>
PM800 also uses the CME Engine. Setup the hqv_cme_regs
for it.
* src/via_swov.c: (VIAVidHWDiffInit):
2010-06-09 Bartosz Kosiorek <gang65@poczta.onet.pl>
Fix freeze on 64bit system for K8M800 chipset
* src/via_dri.c: (VIADRIAgpInit):
2010-05-04 Jon Nettleton <jon.nettleton@gmail.com>
Re-enable the Virtual Queue for the VX800/VX855 chipsets.
* src/via_accel.c: (viaDisableVQ), (viaInitialize2DEngine):
2010-05-04 Jon Nettleton <jon.nettleton@gmail.com>
Disable certain hardware clipping options for the VX855.
These cause the 2d engine to become unstable when in
16-bit mode.
* src/via_accel.c: (viaInitXAA):
2010-05-04 Jon Nettleton <jon.nettleton@gmail.com>
Add an undocumented option which allows certain I2C buses
to be probed at startup. This allows workarounds for custom
chipset makers that have used the VX855 I2C buses for other
purposes.
* src/via_bios.h:
* src/via_driver.c: (VIASetupDefaultOptions), (VIAPreInit):
* src/via_driver.h:
* src/via_i2c.c:
2010-05-04 Jon Nettleton <jon.nettleton@gmail.com>
Improve 2d performance on chipsets that don't have
AGP/PCIe support yet.
* src/via_accel.c: (viaSetupForScreenToScreenCopy),
(viaSetupForSolidFill), (viaSetupForMono8x8PatternFill),
(viaSetupForColor8x8PatternFill),
(viaSetupForCPUToScreenColorExpandFill),
(viaSubsequentScanlineCPUToScreenColorExpandFill),
(viaSetupForImageWrite), (viaSubsequentImageWriteRect),
(viaSetupForSolidLine), (viaSetupForDashedLine), (viaInitXAA):
2010-05-04 Jon Nettleton <jon.nettleton@gmail.com>
Put timeouts on our while statements. These codepaths
should be interrupted by a hardware state change, but
if something goes wrong they loop forevere. Let's try
and behave a little by putting a timeout on these loops.
* src/via_swov.c: (viaWaitHQVFlip), (viaWaitHQVFlipClear),
(viaWaitHQVDone):
* src/via_video.c: (Flip):
2010-05-04 Jon Nettleton <jon.nettleton@gmail.com>
Add XVideo support for the VX855 Chipset.
To support this chipset I have added HWDiff->HQVCmeRegs
that allows handling differing register values, and
HWDiff->dwNewScaleCtl which allows selection of a
new Video scaling engine needed for the VX800/VX855
chipsets.
* src/via.h:
* src/via_bandwidth.c: (ViaSetSecondaryFIFO):
* src/via_driver.h:
* src/via_swov.c: (SaveVideoRegister), (VIAVidHWDiffInit),
(viaOverlayHQVCalcZoomWidth), (viaOverlayHQVCalcZoomHeight),
(ViaSwovSurfaceCreate), (SetHQVFetch), (Upd_Video):
* src/via_swov.h:
2010-04-21 Bartosz Kosiorek <gang65@poczta.onet.pl>
Replace RegionsEqual with REGION_EQUAL and use
the xf86XVFillKeyHelperDrawable instead of xf86XVFillKeyHelper
* src/via_video.c: (viaReputImage), (viaPutImage):
2010-03-07 Bartosz Kosiorek <gang65@poczta.onet.pl>
Fix segfaults with EXA and XV (Ticket #359)
Tested on K8M890 and VN800
* src/via_video.c: (viaReputImage), (viaPutImage):
2010-02-10 Bartosz Kosiorek <gang65@poczta.onet.pl>
Fix bug with suspend and VT switch on VX800 and 64bit systems
* src/via_driver.h:
* src/via_video.c: (viaResetVideo), (viaSaveVideo),
(viaRestoreVideo), (viaExitVideo):
* src/via_video.h:
2010-01-24 Bartosz Kosiorek <gang65@poczta.onet.pl>
Fix starting address restore and save (initial 64-bit support)
* src/via_crtc.c: (ViaFirstCRTCSetMode),
(ViaFirstCRTCSetStartingAddress):
* src/via_dri.c: (VIADRIAgpInit):
* src/via_driver.c: (VIASave), (VIARestore):
* src/via_driver.h:
2009-12-04 Bartosz Kosiorek <gang65@poczta.onet.pl>
Enable new mode switch for VM800 chipsets
* src/via_driver.c: (VIASetupDefaultOptions):
2009-11-21 Bartosz Kosiorek <gang65@poczta.onet.pl>
Add option to enable unaccelerated RandR rotation ("SWRandR").
The accelerated option "HWRandR" is currently not implemented.
* src/openchrome.man:
* src/via_driver.c: (VIAPreInit):
2009-11-20 Bartosz Kosiorek <gang65@poczta.onet.pl>
Enabled new mode switch for PM800 chipset,
to resolve many bugs with resolution detecting and changing
(eg. switching to console)
* src/via_driver.c: (VIASetupDefaultOptions), (VIAPreInit):
2009-11-07 Bartosz Kosiorek <gang65@poczta.onet.pl>
Add more comments to ViaSetSecondaryFIFO, add panel scale support for
CLE266 and KM400, fix bug with malloc.
* src/via_bandwidth.c: (ViaSetSecondaryFIFO):
* src/via_panel.c: (ViaPanelScale), (ViaPanelGetNativeDisplayMode):
2009-09-26 Bartosz Kosiorek <gang65@poczta.onet.pl>
Save/restore ECK Clock Synthesizer

View File

@ -19,6 +19,11 @@
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
AUTOMAKE_OPTIONS = foreign
SUBDIRS = src man libxvmc
SUBDIRS = src man libxvmc tools
EXTRA_DIST = COPYING NEWS README
ChangeLog:
$(CHANGELOG_CMD)
dist-hook: ChangeLog

View File

@ -93,25 +93,34 @@ GZIP_ENV = --best
distuninstallcheck_listfiles = find . -type f -print
distcleancheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@
ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
APP_MAN_DIR = @APP_MAN_DIR@
APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BASE_CFLAGS = @BASE_CFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CHANGELOG_CMD = @CHANGELOG_CMD@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CWARNFLAGS = @CWARNFLAGS@
CYGPATH_W = @CYGPATH_W@
DEBUG_FALSE = @DEBUG_FALSE@
DEBUG_TRUE = @DEBUG_TRUE@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
DRIVER_NAME = @DRIVER_NAME@
DRI_CFLAGS = @DRI_CFLAGS@
@ -126,9 +135,12 @@ ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
FILE_MAN_DIR = @FILE_MAN_DIR@
FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
GREP = @GREP@
HAVE_XEXTPROTO_71_FALSE = @HAVE_XEXTPROTO_71_FALSE@
HAVE_XEXTPROTO_71_TRUE = @HAVE_XEXTPROTO_71_TRUE@
INSTALL_CMD = @INSTALL_CMD@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
@ -138,6 +150,8 @@ LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIB_MAN_DIR = @LIB_MAN_DIR@
LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
@ -146,6 +160,9 @@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MAN_SUBSTS = @MAN_SUBSTS@
MISC_MAN_DIR = @MISC_MAN_DIR@
MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@ -166,12 +183,16 @@ RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRICT_CFLAGS = @STRICT_CFLAGS@
STRIP = @STRIP@
TOOLS_FALSE = @TOOLS_FALSE@
TOOLS_TRUE = @TOOLS_TRUE@
VERSION = @VERSION@
XEXT_CFLAGS = @XEXT_CFLAGS@
XEXT_LIBS = @XEXT_LIBS@
XORG_CFLAGS = @XORG_CFLAGS@
XORG_LIBS = @XORG_LIBS@
XORG_MAN_PAGE = @XORG_MAN_PAGE@
XSERVER_LIBPCIACCESS_FALSE = @XSERVER_LIBPCIACCESS_FALSE@
XSERVER_LIBPCIACCESS_TRUE = @XSERVER_LIBPCIACCESS_TRUE@
XVMC_CFLAGS = @XVMC_CFLAGS@
@ -227,7 +248,7 @@ sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
AUTOMAKE_OPTIONS = foreign
SUBDIRS = src man libxvmc
SUBDIRS = src man libxvmc tools
EXTRA_DIST = COPYING NEWS README
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
@ -470,6 +491,9 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$(top_distdir)" distdir="$(distdir)" \
dist-hook
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
@ -651,7 +675,7 @@ uninstall-info: uninstall-info-recursive
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
check-am clean clean-generic clean-libtool clean-recursive \
ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
dist-shar dist-tarZ dist-zip distcheck distclean \
dist-hook dist-shar dist-tarZ dist-zip distcheck distclean \
distclean-generic distclean-hdr distclean-libtool \
distclean-recursive distclean-tags distcleancheck distdir \
distuninstallcheck dvi dvi-am html html-am info info-am \
@ -663,6 +687,11 @@ uninstall-info: uninstall-info-recursive
mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
tags tags-recursive uninstall uninstall-am uninstall-info-am
ChangeLog:
$(CHANGELOG_CMD)
dist-hook: ChangeLog
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -1,3 +1,76 @@
openchrome 0.2.905 (10/02/2012)
-------------------------------
* New features :
- VX900 support (Xv not supported yet).
- VX855 XVideo support.
* Bugfixes and enhancements :
- More debug information to video decoding.
- Add secondary FIFO support for K8M890 and P4M890.
- Check the primary FIFO for VX855.
- Add panel scale support for CLE266 and KM400.
- Fix bug with malloc.
- Enabled new mode switch for PM800 chipset.
- Add option to enable unaccelerated RandR rotation ("SWRandR").
- Enable new mode switch for VM800 chipsets.
- More debug traces to via_video.c.
- Fix manual and add more comments.
- Fix start address.
- Optimization of the hardware accelerated cursor and XAA (K8M890 chipset).
- Code clean up.
- Fix bug with suspend and VT switch on VX800 chipset and 64bit systems.
- Synchronize via_drm.h with drm-2.4.17.
- Fix segfaults with EXA and XV.
- Fix build on old kernels.
- Replace RegionsEqual with REGION_EQUAL and use
the xf86XVFillKeyHelperDrawable instead of xf86XVFillKeyHelper.
- Fix DFP parameter description for the ActiveDevice option.
- Manpage update and some minor changes.
- Set colorkey for 2nd_monitor.
- Add timeouts to HQV while loops.
- Improve 2d performance on chipsets without AGP/PCIe.
- Add option I2CDevices.
- Disable Hardware Clipping for the VX855.
- Re-Enable the VQ for VX800/VX855.
- Disable AGP and DMA by default for VX800 and VX855.
- Fixed freeze on 64bit system for K8M800 chipset.
- Increase bandwidth to handle 1920x1200 resolution with DDR266.
- Fix XV crash on PM800 post VX855 rework.
- Fix several typo in code comments.
- Update VX855 FIFO.
- Fix bug with TV out flickering.
- Replace the deprecated functions with new ones.
Refer to "/xserver/include/os.h".
- Replace remaining xalloc to malloc.
- Change maximum line pitch and virtual height according to chipset.
- Update 1024x600 modeline.
- Add workaround for memory autodetection.
- Enable new mode switch and panel support on K8M800 and VM800.
- Fix type in VIASave.
- Use DRICreatePCIBusID when available to create Bus ID string.
- Restore video interrupt flag.
- Fix OpenGL application crash on VX900 chipset.
- Fix VIA VB8001 Mini-ITX Board (P4M900) support.
- Add workaround for bad memory detection on some P4M800.
- Fix resolution detection for OLPC 1.5.
- Fix Xvideo crash on X.Org server 1.10.
- Fix XAA displaying issues.
- Fix cursor garbare after suspend/hibernate/resume on VX855/VX900.
- Workaround EXA crash with new libcairo2.
- Handle X server 1.12 (videoabi 12).
- Add support for I420 Xv surface.
- Limit video RAM size to 256 MB, PCI BAR can't handle more.
- Add Harald Welte's registers dump tool.
* New boards :
- ASRock PV530, ECS P4M800PRO-M2 (V2.0) , FIC CE2A1, FIC PTM800Pro LF,
Guillemot-Hercules ECafe EC900B, Hewlett Packard DX2020,
Hewlett Packard t5550 Thin Client, Lenovo ThinkCenter E51 8714,
MSI K8M890M2-V, MSI PM8M-V, MSI PM9M-V, OLPC XO 1.5,
Semp Informática Notebook IS 1462, Sharp Mebius PC-CS30H, Siragon ML-6200,
Twinhead K15V
openchrome 0.2.904 (09/10/2009)
-------------------------------
* New features :

View File

@ -15,6 +15,7 @@ SUPPORTED CHIPSETS :
- P4M900/VN896 (VT3364)
- VX800 (VT3353)
- VX855 (VT3409)
- VX900 (VT3410)
SUPPORTED FEATURES :
@ -26,13 +27,6 @@ SUPPORTED FEATURES :
- Hardware MPEG2 acceleration.
IMPORTANT NOTE :
----------------
- The driver name is now 'openchrome', and this is what you need to use in
your xorg.conf now (instead of 'via'). The XvMC libraries have also been
renamed, to 'libchromeXvMC.so' and 'libchromeXvMCPro.so'.
KNOWN BUGS/LIMITATIONS :
------------------------
* Laptop panel
@ -64,6 +58,9 @@ KNOWN BUGS/LIMITATIONS :
- Chrome9 chipsets' family (P4M900, K8M890, VX800, VX855) currently doesn't
support neither AGP DMA nor 3D acceleration.
* VX900
- Xv is not yet supported.
Please note that 3D acceleration is provided by Mesa (http://mesa3d.org) and is
not directly related to openchrome.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,142 @@
#! /bin/sh
# Wrapper for compilers which do not understand `-c -o'.
scriptversion=2005-05-14.22
# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
# Written by Tom Tromey <tromey@cygnus.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, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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.
# This file is maintained in Automake, please report
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.
case $1 in
'')
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
exit 1;
;;
-h | --h*)
cat <<\EOF
Usage: compile [--help] [--version] PROGRAM [ARGS]
Wrapper for compilers which do not understand `-c -o'.
Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
arguments, and rename the output as expected.
If you are trying to build a whole package this is not the
right script to run: please start by reading the file `INSTALL'.
Report bugs to <bug-automake@gnu.org>.
EOF
exit $?
;;
-v | --v*)
echo "compile $scriptversion"
exit $?
;;
esac
ofile=
cfile=
eat=
for arg
do
if test -n "$eat"; then
eat=
else
case $1 in
-o)
# configure might choose to run compile as `compile cc -o foo foo.c'.
# So we strip `-o arg' only if arg is an object.
eat=1
case $2 in
*.o | *.obj)
ofile=$2
;;
*)
set x "$@" -o "$2"
shift
;;
esac
;;
*.c)
cfile=$1
set x "$@" "$1"
shift
;;
*)
set x "$@" "$1"
shift
;;
esac
fi
shift
done
if test -z "$ofile" || test -z "$cfile"; then
# If no `-o' option was seen then we might have been invoked from a
# pattern rule where we don't need one. That is ok -- this is a
# normal compilation that the losing compiler can handle. If no
# `.c' file was seen then we are probably linking. That is also
# ok.
exec "$@"
fi
# Name of file we expect compiler to create.
cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
# Create the lock directory.
# Note: use `[/.-]' here to ensure that we don't use the same name
# that we are using for the .o file. Also, base the name on the expected
# object file name, since that is what matters with a parallel build.
lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
while true; do
if mkdir "$lockdir" >/dev/null 2>&1; then
break
fi
sleep 1
done
# FIXME: race condition here if user kills between mkdir and trap.
trap "rmdir '$lockdir'; exit 1" 1 2 15
# Run the compile.
"$@"
ret=$?
if test -f "$cofile"; then
mv "$cofile" "$ofile"
elif test -f "${cofile}bj"; then
mv "${cofile}bj" "$ofile"
fi
rmdir "$lockdir"
exit $ret
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:

View File

@ -75,6 +75,9 @@
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Enable build of registers dumper tool */
#undef TOOLS
/* Version number of package */
#undef VERSION

File diff suppressed because it is too large Load Diff

View File

@ -22,7 +22,7 @@
AC_PREREQ(2.57)
AC_INIT([xf86-video-openchrome],
0.2.904,
0.2.905,
[http://www.openchrome.org/trac/report/1],
xf86-video-openchrome)
@ -30,6 +30,12 @@ AC_CONFIG_SRCDIR([Makefile.am])
AM_CONFIG_HEADER([config.h])
AC_CONFIG_AUX_DIR(.)
# Require X.Org macros 1.8 or later for MAN_SUBSTS set by XORG_MANPAGE_SECTIONS
m4_ifndef([XORG_MACROS_VERSION],
[m4_fatal([must install xorg-macros 1.8 or later before running autoconf/autogen])])
XORG_MACROS_VERSION(1.8)
XORG_DEFAULT_OPTIONS
AM_INIT_AUTOMAKE([dist-bzip2])
AM_MAINTAINER_MODE
@ -62,6 +68,11 @@ AC_ARG_ENABLE(xv-debug, AC_HELP_STRING([--enable-xv-debug],
[XV_DEBUG="$enableval"],
[XV_DEBUG=no])
AC_ARG_ENABLE(viaregtool, AC_HELP_STRING([--enable-viaregtool],
[Enable build of registers dumper tool [[default=no]]]),
[TOOLS="$enableval"],
[TOOLS=no])
# Checks for extensions
XORG_DRIVER_CHECK_EXT(RANDR, randrproto)
XORG_DRIVER_CHECK_EXT(RENDER, renderproto)
@ -161,6 +172,11 @@ if test "$XV_DEBUG" = yes; then
AC_DEFINE(XV_DEBUG,1,[Enable XVideo debug support])
fi
AM_CONDITIONAL(TOOLS, test x$TOOLS = xyes)
if test "$TOOLS" = yes; then
AC_DEFINE(TOOLS,1,[Enable build of registers dumper tool])
fi
AC_SUBST([DRI_CFLAGS])
AC_SUBST([XORG_CFLAGS])
AC_SUBST([moduledir])
@ -183,4 +199,5 @@ AC_OUTPUT([
libxvmc/Makefile
man/Makefile
src/Makefile
tools/Makefile
])

View File

@ -95,25 +95,34 @@ ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
APP_MAN_DIR = @APP_MAN_DIR@
APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BASE_CFLAGS = @BASE_CFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CHANGELOG_CMD = @CHANGELOG_CMD@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CWARNFLAGS = @CWARNFLAGS@
CYGPATH_W = @CYGPATH_W@
DEBUG_FALSE = @DEBUG_FALSE@
DEBUG_TRUE = @DEBUG_TRUE@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
DRIVER_NAME = @DRIVER_NAME@
DRI_CFLAGS = @DRI_CFLAGS@
@ -128,9 +137,12 @@ ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
FILE_MAN_DIR = @FILE_MAN_DIR@
FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
GREP = @GREP@
HAVE_XEXTPROTO_71_FALSE = @HAVE_XEXTPROTO_71_FALSE@
HAVE_XEXTPROTO_71_TRUE = @HAVE_XEXTPROTO_71_TRUE@
INSTALL_CMD = @INSTALL_CMD@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
@ -140,6 +152,8 @@ LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIB_MAN_DIR = @LIB_MAN_DIR@
LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
@ -148,6 +162,9 @@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MAN_SUBSTS = @MAN_SUBSTS@
MISC_MAN_DIR = @MISC_MAN_DIR@
MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@ -168,12 +185,16 @@ RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRICT_CFLAGS = @STRICT_CFLAGS@
STRIP = @STRIP@
TOOLS_FALSE = @TOOLS_FALSE@
TOOLS_TRUE = @TOOLS_TRUE@
VERSION = @VERSION@
XEXT_CFLAGS = @XEXT_CFLAGS@
XEXT_LIBS = @XEXT_LIBS@
XORG_CFLAGS = @XORG_CFLAGS@
XORG_LIBS = @XORG_LIBS@
XORG_MAN_PAGE = @XORG_MAN_PAGE@
XSERVER_LIBPCIACCESS_FALSE = @XSERVER_LIBPCIACCESS_FALSE@
XSERVER_LIBPCIACCESS_TRUE = @XSERVER_LIBPCIACCESS_TRUE@
XVMC_CFLAGS = @XVMC_CFLAGS@

View File

@ -14,7 +14,7 @@
@SET_MAKE@
# $Id: Makefile.in,v 1.7 2012/03/13 21:35:51 matthieu Exp $
# $Id: Makefile.in,v 1.8 2012/05/15 21:32:57 matthieu Exp $
#
# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
#
@ -86,25 +86,34 @@ drivermanDATA_INSTALL = $(INSTALL_DATA)
DATA = $(driverman_DATA)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
APP_MAN_DIR = @APP_MAN_DIR@
APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BASE_CFLAGS = @BASE_CFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CHANGELOG_CMD = @CHANGELOG_CMD@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CWARNFLAGS = @CWARNFLAGS@
CYGPATH_W = @CYGPATH_W@
DEBUG_FALSE = @DEBUG_FALSE@
DEBUG_TRUE = @DEBUG_TRUE@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
DRIVER_NAME = @DRIVER_NAME@
DRI_CFLAGS = @DRI_CFLAGS@
@ -119,9 +128,12 @@ ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
FILE_MAN_DIR = @FILE_MAN_DIR@
FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
GREP = @GREP@
HAVE_XEXTPROTO_71_FALSE = @HAVE_XEXTPROTO_71_FALSE@
HAVE_XEXTPROTO_71_TRUE = @HAVE_XEXTPROTO_71_TRUE@
INSTALL_CMD = @INSTALL_CMD@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
@ -131,6 +143,8 @@ LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIB_MAN_DIR = @LIB_MAN_DIR@
LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
@ -139,6 +153,20 @@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MAN_SUBSTS = \
-e 's|__vendorversion__|"$(XORGRELSTRING)" "$(XORGMANNAME)"|' \
-e 's|__xorgversion__|"$(XORGRELSTRING)" "$(XORGMANNAME)"|' \
-e 's|__xservername__|Xorg|g' \
-e 's|__xconfigfile__|xorg.conf|g' \
-e 's|__projectroot__|$(prefix)|g' \
-e 's|__appmansuffix__|$(APP_MAN_SUFFIX)|g' \
-e 's|__drivermansuffix__|$(DRIVER_MAN_SUFFIX)|g' \
-e 's|__adminmansuffix__|$(ADMIN_MAN_SUFFIX)|g' \
-e 's|__miscmansuffix__|$(MISC_MAN_SUFFIX)|g' \
-e 's|__filemansuffix__|$(FILE_MAN_SUFFIX)|g'
MISC_MAN_DIR = @MISC_MAN_DIR@
MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@ -159,12 +187,16 @@ RANLIB = @RANLIB@
SED = sed
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRICT_CFLAGS = @STRICT_CFLAGS@
STRIP = @STRIP@
TOOLS_FALSE = @TOOLS_FALSE@
TOOLS_TRUE = @TOOLS_TRUE@
VERSION = @VERSION@
XEXT_CFLAGS = @XEXT_CFLAGS@
XEXT_LIBS = @XEXT_LIBS@
XORG_CFLAGS = @XORG_CFLAGS@
XORG_LIBS = @XORG_LIBS@
XORG_MAN_PAGE = @XORG_MAN_PAGE@
XSERVER_LIBPCIACCESS_FALSE = @XSERVER_LIBPCIACCESS_FALSE@
XSERVER_LIBPCIACCESS_TRUE = @XSERVER_LIBPCIACCESS_TRUE@
XVMC_CFLAGS = @XVMC_CFLAGS@
@ -228,18 +260,6 @@ CLEANFILES = $(driverman_DATA)
# Strings to replace in man pages
XORGRELSTRING = @PACKAGE_STRING@
XORGMANNAME = X Version 11
MAN_SUBSTS = \
-e 's|__vendorversion__|"$(XORGRELSTRING)" "$(XORGMANNAME)"|' \
-e 's|__xorgversion__|"$(XORGRELSTRING)" "$(XORGMANNAME)"|' \
-e 's|__xservername__|Xorg|g' \
-e 's|__xconfigfile__|xorg.conf|g' \
-e 's|__projectroot__|$(prefix)|g' \
-e 's|__appmansuffix__|$(APP_MAN_SUFFIX)|g' \
-e 's|__drivermansuffix__|$(DRIVER_MAN_SUFFIX)|g' \
-e 's|__adminmansuffix__|$(ADMIN_MAN_SUFFIX)|g' \
-e 's|__miscmansuffix__|$(MISC_MAN_SUFFIX)|g' \
-e 's|__filemansuffix__|$(FILE_MAN_SUFFIX)|g'
SUFFIXES = .$(DRIVER_MAN_SUFFIX) .man
all: all-am

View File

@ -22,7 +22,7 @@ The
.B openchrome
driver supports the following chipsets: CLE266, KM400/KN400/KM400A/P4M800,
CN400/PM800/PN800/PM880, K8M800, CN700/VM800/P4M800Pro, CX700, P4M890, K8M890,
P4M900/VN896/CN896, VX800 and VX855.
P4M900/VN896/CN896, VX800, VX855 and VX900.
The driver includes 2D acceleration and Xv video overlay extensions.
Flat panel, TV, and VGA outputs are supported, depending on the hardware
configuration.
@ -59,16 +59,18 @@ are supported:
.BI "Option \*qAccelMethod\*q \*q" string \*q
The driver supports "XAA" and "EXA" acceleration methods. The default
method is XAA, since EXA is still experimental. Contrary to XAA, EXA
implements acceleration for screen uploads and downlads (if DRI is
implements acceleration for screen uploads and downloads (if DRI is
enabled) and for the Render/Composite extension.
.TP
.BI "Option \*qActiveDevice\*q \*q" string \*q
Specifies the active device combination. Any string containing "CRT",
"LCD", "DFP", "TV" should be possible. "CRT" represents anything that
is connected to the VGA port, "LCD" and "DFP" are for laptop panels
(not TFT screens attached to the VGA port), "TV" is self-explanatory.
is connected to the VGA port, "LCD" is for laptop panels (not TFT screens
attached to the VGA port), "DFP" is for screens connected to the DVI port,
"TV" is self-explanatory.
The default is to use what is detected. The driver is currently unable
to use LCD and TV simultaneously, and will favour the LCD.
to use LCD and TV simultaneously, and will favour the LCD. The DVI port is
not properly probed and needs to be enabled with this option.
.TP
.BI "Option \*qAGPMem\*q \*q" integer \*q
Sets the amount of AGP memory that is allocated at X server startup.
@ -81,7 +83,7 @@ EXA scratch area in AGP space, it will be allocated from VRAM. If there is
no room for DRI textures, they will be allocated from the DRI part of
VRAM (see the option "MaxDRIMem"). The default amount of AGP is
32768 kB. Note that the AGP aperture set in the BIOS must be able
to accomodate the amount of AGP memory specified here. Otherwise no
to accommodate the amount of AGP memory specified here. Otherwise no
AGP memory will be available. It is safe to set a very large AGP
aperture in the BIOS.
.TP
@ -131,10 +133,10 @@ as possible to the EXA pixmap storage area.
.TP
.BI "Option \*qMigrationHeuristic\*q \*q" string \*q
Sets the heuristic for EXA pixmap migration. This is an EXA core
option, and on Xorg server versions after 1.1.0 this defaults to
"smart". The openchrome driver performs best with "greedy", so you
option, and starting from __xservername__ server version 1.3.0 this defaults to
"always". The openchrome driver performs best with "greedy", so you
should really add this option to your configuration file. The third
possibility is "always", which might become more useful in the future.
possibility is "smart".
.TP
.BI "Option \*qNoAccel\*q \*q" boolean \*q
Disables the use of hardware acceleration. Acceleration is enabled
@ -159,9 +161,16 @@ Specifies the size (width x height) of the LCD panel attached to the
system. The sizes 640x480, 800x600, 1024x768, 1280x1024, and 1400x1050
are supported.
.TP
.BI "Option \*qRotationType\*q \*q" string \*q
Enabled rotation by using RandR. The driver only support unaccelerated
RandR rotations "SWRandR". Hardware rotations "HWRandR" is currently
unimplemented.
.TP
.BI "Option \*qRotate\*q \*q" string \*q
Rotates the display either clockwise ("CW"), counterclockwise ("CCW") and
upside-down ("UD"). Rotation is only supported unaccelerated.
upside-down ("UD"). Rotation is only supported unaccelerated. Adding
option "Rotate", enables RandR rotation feature. The RandR allows
clients to dynamically change X screens.
.TP
.BI "Option \*qShadowFB\*q \*q" boolean \*q
Enables the use of a shadow frame buffer. This is required when
@ -234,6 +243,6 @@ overscan). These modes are made available by the driver; modelines
provided in __xconfigfile__ will be ignored.
.SH "SEE ALSO"
__xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__), Xserver(__appmansuffix__), X(__miscmansuffix__)
__xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__), Xserver(__appmansuffix__), X(__miscmansuffix__), EXA(__filemansuffix__), Xv(__filemansuffix__)
.SH AUTHORS
Authors include: ...

View File

@ -24,9 +24,9 @@
# _ladir passes a dummy rpath to libtool so the thing will actually link
# TODO: -nostdlib/-Bstatic/-lgcc platform magic, not installing the .a, etc.
BUILT_SOURCES = svnversion.h
EXTRA_DIST = svnversion.h
CONFIG_CLEAN_FILES= svnversion.h
BUILT_SOURCES = version.h
EXTRA_DIST = version.h
CONFIG_CLEAN_FILES= version.h
AM_CFLAGS = @XORG_CFLAGS@ @DRI_CFLAGS@
openchrome_drv_la_LTLIBRARIES = openchrome_drv.la
openchrome_drv_la_LDFLAGS = -module -avoid-version
@ -92,21 +92,26 @@ EXTRA_DIST += \
endif
via_driver.lo: svnversion.h
svnversion.h: $(openchrome_drv_la_SOURCES)
@if [ -d .svn ]; then \
echo '#define BUILDCOMMENT "(development build, at svn revision '\
"`svnversion -nc .. | sed -e s/^[^:]*://`"')"' > $@.tmp; \
else \
date +'#define BUILDCOMMENT "(development build, compiled on %c)"' \
> $@.tmp; \
fi
via_driver.lo: version.h
version.h: $(openchrome_drv_la_SOURCES)
@if [ -d ../.git ]; then \
echo '#define BUILDCOMMENT "(developement build, at revision '\
"`git log -1 --pretty=format:%h | head -1`"')"' > $@.tmp; \
else \
if [ -d .svn ]; then \
echo '#define BUILDCOMMENT "(development build, at revision '\
"`svnversion -nc .. | sed -e s/^[^:]*://`"')"' > $@.tmp; \
else \
date +'#define BUILDCOMMENT "(development build, compiled on %c)"' \
> $@.tmp; \
fi; \
fi
@chmod 666 $@.tmp
@mv $@.tmp $@
@echo "created $@"
dist-hook:
rm svnversion.h;
rm version.h;
echo '#define BUILDCOMMENT "(openchrome '$(VERSION)' release)"' \
> svnversion.h
> version.h

View File

@ -130,25 +130,34 @@ ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
APP_MAN_DIR = @APP_MAN_DIR@
APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BASE_CFLAGS = @BASE_CFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CHANGELOG_CMD = @CHANGELOG_CMD@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CWARNFLAGS = @CWARNFLAGS@
CYGPATH_W = @CYGPATH_W@
DEBUG_FALSE = @DEBUG_FALSE@
DEBUG_TRUE = @DEBUG_TRUE@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
DRIVER_NAME = @DRIVER_NAME@
DRI_CFLAGS = @DRI_CFLAGS@
@ -163,9 +172,12 @@ ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
FILE_MAN_DIR = @FILE_MAN_DIR@
FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
GREP = @GREP@
HAVE_XEXTPROTO_71_FALSE = @HAVE_XEXTPROTO_71_FALSE@
HAVE_XEXTPROTO_71_TRUE = @HAVE_XEXTPROTO_71_TRUE@
INSTALL_CMD = @INSTALL_CMD@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
@ -175,6 +187,8 @@ LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIB_MAN_DIR = @LIB_MAN_DIR@
LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
@ -183,6 +197,9 @@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MAN_SUBSTS = @MAN_SUBSTS@
MISC_MAN_DIR = @MISC_MAN_DIR@
MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@ -203,12 +220,16 @@ RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRICT_CFLAGS = @STRICT_CFLAGS@
STRIP = @STRIP@
TOOLS_FALSE = @TOOLS_FALSE@
TOOLS_TRUE = @TOOLS_TRUE@
VERSION = @VERSION@
XEXT_CFLAGS = @XEXT_CFLAGS@
XEXT_LIBS = @XEXT_LIBS@
XORG_CFLAGS = @XORG_CFLAGS@
XORG_LIBS = @XORG_LIBS@
XORG_MAN_PAGE = @XORG_MAN_PAGE@
XSERVER_LIBPCIACCESS_FALSE = @XSERVER_LIBPCIACCESS_FALSE@
XSERVER_LIBPCIACCESS_TRUE = @XSERVER_LIBPCIACCESS_TRUE@
XVMC_CFLAGS = @XVMC_CFLAGS@
@ -263,9 +284,9 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
BUILT_SOURCES = svnversion.h
EXTRA_DIST = svnversion.h $(am__append_2)
CONFIG_CLEAN_FILES = svnversion.h
BUILT_SOURCES = version.h
EXTRA_DIST = version.h $(am__append_2)
CONFIG_CLEAN_FILES = version.h
AM_CFLAGS = @XORG_CFLAGS@ @DRI_CFLAGS@
openchrome_drv_la_LTLIBRARIES = openchrome_drv.la
openchrome_drv_la_LDFLAGS = -module -avoid-version
@ -584,24 +605,29 @@ uninstall-am: uninstall-info-am uninstall-openchrome_drv_laLTLIBRARIES
uninstall-openchrome_drv_laLTLIBRARIES
via_driver.lo: svnversion.h
svnversion.h: $(openchrome_drv_la_SOURCES)
@if [ -d .svn ]; then \
echo '#define BUILDCOMMENT "(development build, at svn revision '\
"`svnversion -nc .. | sed -e s/^[^:]*://`"')"' > $@.tmp; \
else \
date +'#define BUILDCOMMENT "(development build, compiled on %c)"' \
> $@.tmp; \
fi
via_driver.lo: version.h
version.h: $(openchrome_drv_la_SOURCES)
@if [ -d ../.git ]; then \
echo '#define BUILDCOMMENT "(developement build, at revision '\
"`git log -1 --pretty=format:%h | head -1`"')"' > $@.tmp; \
else \
if [ -d .svn ]; then \
echo '#define BUILDCOMMENT "(development build, at revision '\
"`svnversion -nc .. | sed -e s/^[^:]*://`"')"' > $@.tmp; \
else \
date +'#define BUILDCOMMENT "(development build, compiled on %c)"' \
> $@.tmp; \
fi; \
fi
@chmod 666 $@.tmp
@mv $@.tmp $@
@echo "created $@"
dist-hook:
rm svnversion.h;
rm version.h;
echo '#define BUILDCOMMENT "(openchrome '$(VERSION)' release)"' \
> svnversion.h
> version.h
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -1 +0,0 @@
#define BUILDCOMMENT "(openchrome 0.2.904 release)"

View File

@ -0,0 +1 @@
#define BUILDCOMMENT "(openchrome 0.2.905 release)"

View File

@ -34,7 +34,7 @@
/* Video Engines */
#define VIDEO_ENGINE_UNK 0 /* Unknown video engine */
#define VIDEO_ENGINE_CLE 1 /* CLE First generaion video engine */
#define VIDEO_ENGINE_CLE 1 /* CLE First generation video engine */
#define VIDEO_ENGINE_CME 2 /* CME Second generation video engine */
/* Video status flag */
@ -215,6 +215,9 @@
#define HQV_DST_STRIDE 0x1F4
#define HQV_SRC_STRIDE 0x1F8
#define HQV_H_SCALE_CONTROL 0x1B0
#define HQV_V_SCALE_CONTROL 0x1B4
#define PRO_HQV1_OFFSET 0x1000
/*
* Video command definition
@ -515,6 +518,22 @@
#define HQV_FIFO_STATUS 0x00001000
#define HQV_GEN_IRQ 0x00000080
#define HQV_FIFO_DEPTH_1 0x00010000
/* for CME engine */
#define HQV_SW_FLIP_QUEUE_ENABLE 0x00100000
/* for hwDiff->dwNewScaleCtl */
#define HQV_H_SCALE_ENABLE 0x80000000
#define HQV_H_SCALE_UP 0x00000000
#define HQV_H_SCALE_DOWN_FOURTH_TO_1 0x10000000
#define HQV_H_SCALE_DOWN_FOURTH_TO_EIGHTH 0x20000000
#define HQV_H_SCALE_DOWN_UNDER_EIGHTH 0x30000000
#define HQV_V_SCALE_ENABLE 0x80000000
#define HQV_V_SCALE_UP 0x00000000
#define HQV_V_SCALE_DOWN 0x10000000
/* HQV Default Vodeo Color 0x3B8 */
#define HQV_FIX_COLOR 0x0643212c
/* HQV_FILTER_CONTROL 0x3E4 */
#define HQV_H_LOWPASS_2TAP 0x00000001
@ -575,6 +594,25 @@
#define HQV_VDEBLOCK_FILTER 0x80000000
#define HQV_HDEBLOCK_FILTER 0x00008000
/* new added registers for VT3409.For some registers have different meanings
* but the same address,we add postfix _409 to distinguish */
#define HQV_COLOR_ADJUSTMENT_PRE_CTRL1 0x160
#define HQV_COLOR_ADJUSTMENT_PRE_CTRL2 0x164
#define HQV_COLOR_ADJUSTMENT_PRE_CTRL3 0x168
#define HQV_COLOR_ADJUSTMENT_PRE_CTRL4 0x16C
#define HQV_SRC_DATA_OFFSET_CTRL1_409 0x170
#define HQV_SRC_DATA_OFFSET_CTRL2_409 0x174
#define HQV_SRC_DATA_OFFSET_CTRL3_409 0x178
#define HQV_SRC_DATA_OFFSET_CTRL4_409 0x17C
#define HQV_DST_DATA_OFFSET_CTRL1 0x180
#define HQV_DST_DATA_OFFSET_CTRL2 0x184
#define HQV_DST_DATA_OFFSET_CTRL3 0x188
#define HQV_DST_DATA_OFFSET_CTRL4 0x18C
#define HQV_RESIDUE_PIXEL_FRAME_STARTADDR 0x1BC
#define HQV_BACKGROUND_DATA_OFFSET 0x1CC
#define HQV_SUBP_HSCALE_CTRL 0x1E0
#define HQV_SUBP_VSCALE_CTRL 0x1E8
/* Add new HQV Registers for VT3353: */
#define HQV_SRC_DATA_OFFSET_CONTROL1 0x180
#define HQV_SRC_DATA_OFFSET_CONTROL2 0x184
@ -588,6 +626,7 @@
#define HQV_COLOR_ADJUSTMENT_CONTROL2 0x1A4
#define HQV_COLOR_ADJUSTMENT_CONTROL3 0x1A8
#define HQV_COLOR_ADJUSTMENT_CONTROL5 0x1AC
#define HQV_DEFAULT_VIDEO_COLOR 0x1B8
#define CHROMA_KEY_LOW 0x00FFFFFF
#define CHROMA_KEY_HIGH 0x00FFFFFF

View File

@ -196,6 +196,7 @@ viaFlushPCI(ViaCommandBuffer * buf)
switch (pVia->Chipset) {
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
while ((VIAGETREG(VIA_REG_STATUS) &
(VIA_CMD_RGTR_BUSY_H5 | VIA_2D_ENG_BUSY_H5))
&& (loop++ < MAXLOOP)) ;
@ -287,7 +288,7 @@ viaSetupCBuffer(ScrnInfoPtr pScrn, ViaCommandBuffer * buf, unsigned size)
buf->pScrn = pScrn;
buf->bufSize = ((size == 0) ? VIA_DMASIZE : size) >> 2;
buf->buf = (CARD32 *) xcalloc(buf->bufSize, sizeof(CARD32));
buf->buf = (CARD32 *) calloc(buf->bufSize, sizeof(CARD32));
if (!buf->buf)
return BadAlloc;
buf->waitFlags = 0;
@ -312,7 +313,7 @@ void
viaTearDownCBuffer(ViaCommandBuffer * buf)
{
if (buf && buf->buf)
xfree(buf->buf);
free(buf->buf);
buf->buf = NULL;
}
@ -417,6 +418,9 @@ viaDisableVQ(ScrnInfoPtr pScrn)
switch (pVia->Chipset) {
case VIA_K8M890:
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
VIASETREG(0x41c, 0x00100000);
VIASETREG(0x420, 0x74301000);
break;
@ -472,16 +476,25 @@ viaInitialize2DEngine(ScrnInfoPtr pScrn)
VIASETREG(i, 0x0);
}
if (pVia->Chipset == VIA_VX800 || pVia->Chipset == VIA_VX855) {
for (i = 0x44; i < 0x5c; i += 4) {
if (pVia->Chipset == VIA_VX800 ||
pVia->Chipset == VIA_VX855 ||
pVia->Chipset == VIA_VX900) {
for (i = 0x44; i <= 0x5c; i += 4) {
VIASETREG(i, 0x0);
}
}
if (pVia->Chipset == VIA_VX900)
{
/*410 redefine 0x30 34 38*/
VIASETREG(0x60, 0x0); /*already useable here*/
}
/* Make the VIA_REG() macro magic work */
switch (pVia->Chipset) {
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
pVia->TwodRegs = via_2d_regs_m1;
break;
default:
@ -492,6 +505,9 @@ viaInitialize2DEngine(ScrnInfoPtr pScrn)
switch (pVia->Chipset) {
case VIA_K8M890:
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
viaInitPCIe(pVia);
break;
default:
@ -503,6 +519,9 @@ viaInitialize2DEngine(ScrnInfoPtr pScrn)
switch (pVia->Chipset) {
case VIA_K8M890:
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
viaEnablePCIeVQ(pVia);
break;
default:
@ -530,6 +549,7 @@ viaAccelSync(ScrnInfoPtr pScrn)
switch (pVia->Chipset) {
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
while ((VIAGETREG(VIA_REG_STATUS) &
(VIA_CMD_RGTR_BUSY_H5 | VIA_2D_ENG_BUSY_H5 | VIA_3D_ENG_BUSY_H5))
&& (loop++ < MAXLOOP)) ;
@ -582,7 +602,7 @@ viaDisableClipping(ScrnInfoPtr pScrn)
/*
* This is a small helper to wrap around a PITCH register write
* to deal with the sublte differences of M1 and old 2D engine
* to deal with the subtle differences of M1 and old 2D engine
*/
static void
viaPitchHelper(VIAPtr pVia, unsigned dstPitch, unsigned srcPitch)
@ -590,7 +610,9 @@ viaPitchHelper(VIAPtr pVia, unsigned dstPitch, unsigned srcPitch)
unsigned val = (dstPitch >> 3) << 16 | (srcPitch >> 3);
RING_VARS;
if (pVia->Chipset != VIA_VX800 && pVia->Chipset != VIA_VX855) {
if (pVia->Chipset != VIA_VX800 &&
pVia->Chipset != VIA_VX855 &&
pVia->Chipset != VIA_VX900) {
val |= VIA_PITCH_ENABLE;
}
OUT_RING_H1(VIA_REG(pVia, PITCH), val);
@ -759,6 +781,7 @@ viaSetupForScreenToScreenCopy(ScrnInfoPtr pScrn, int xdir, int ydir, int rop,
tdc->cmd = cmd;
viaAccelTransparentHelper(pVia, (trans_color != -1) ? 0x4000 : 0x0000,
trans_color, FALSE);
ADVANCE_RING;
}
static void
@ -796,6 +819,7 @@ viaSetupForSolidFill(ScrnInfoPtr pScrn, int color, int rop, unsigned planemask)
tdc->cmd = VIA_GEC_BLT | VIA_GEC_FIXCOLOR_PAT | VIAACCELPATTERNROP(rop);
tdc->fgColor = color;
viaAccelTransparentHelper(pVia, 0x00, 0x00, FALSE);
ADVANCE_RING;
}
static void
@ -852,6 +876,7 @@ viaSetupForMono8x8PatternFill(ScrnInfoPtr pScrn, int pattern0, int pattern1,
tdc->pattern0 = pattern0;
tdc->pattern1 = pattern1;
viaAccelTransparentHelper(pVia, 0x00, 0x00, FALSE);
ADVANCE_RING;
}
static void
@ -901,6 +926,7 @@ viaSetupForColor8x8PatternFill(ScrnInfoPtr pScrn, int patternx, int patterny,
tdc->patternAddr = (patternx * pVia->Bpp + patterny * pVia->Bpl);
viaAccelTransparentHelper(pVia, (trans_color != -1) ? 0x4000 : 0x0000,
trans_color, FALSE);
ADVANCE_RING;
}
static void
@ -962,9 +988,9 @@ viaSetupForCPUToScreenColorExpandFill(ScrnInfoPtr pScrn, int fg, int bg,
tdc->fgColor = fg;
tdc->bgColor = bg;
ADVANCE_RING;
viaAccelTransparentHelper(pVia, 0x0, 0x0, FALSE);
ADVANCE_RING;
}
static void
@ -991,7 +1017,7 @@ viaSubsequentScanlineCPUToScreenColorExpandFill(ScrnInfoPtr pScrn, int x,
pScrn->fbOffset + sub * pVia->Bpl, tdc->mode,
pVia->Bpl, pVia->Bpl, tdc->cmd);
viaFlushPCI(cb);
ADVANCE_RING;
viaDisableClipping(pScrn);
}
@ -1005,9 +1031,9 @@ viaSetupForImageWrite(ScrnInfoPtr pScrn, int rop, unsigned planemask,
RING_VARS;
tdc->cmd = VIA_GEC_BLT | VIA_GEC_SRC_SYS | VIAACCELCOPYROP(rop);
ADVANCE_RING;
viaAccelTransparentHelper(pVia, (trans_color != -1) ? 0x4000 : 0x0000,
trans_color, FALSE);
ADVANCE_RING;
}
static void
@ -1030,7 +1056,7 @@ viaSubsequentImageWriteRect(ScrnInfoPtr pScrn, int x, int y, int w, int h,
pScrn->fbOffset + pVia->Bpl * sub, tdc->mode,
pVia->Bpl, pVia->Bpl, tdc->cmd);
viaFlushPCI(cb);
ADVANCE_RING;
viaDisableClipping(pScrn);
}
@ -1052,6 +1078,7 @@ viaSetupForSolidLine(ScrnInfoPtr pScrn, int color, int rop,
OUT_RING_H1(VIA_REG(pVia, GEMODE), tdc->mode);
OUT_RING_H1(VIA_REG(pVia, MONOPAT0), 0xFF);
OUT_RING_H1(VIA_REG(pVia, MONOPATFGC), tdc->fgColor);
ADVANCE_RING;
}
static void
@ -1189,6 +1216,7 @@ viaSetupForDashedLine(ScrnInfoPtr pScrn, int fg, int bg, int rop,
OUT_RING_H1(VIA_REG(pVia, MONOPATFGC), tdc->fgColor);
OUT_RING_H1(VIA_REG(pVia, MONOPATBGC), tdc->bgColor);
OUT_RING_H1(VIA_REG(pVia, MONOPAT0), tdc->pattern0);
ADVANCE_RING;
}
static void
@ -1210,7 +1238,8 @@ viaInitXAA(ScreenPtr pScreen)
/* General acceleration flags. */
xaaptr->Flags = (PIXMAP_CACHE |
OFFSCREEN_PIXMAPS | LINEAR_FRAMEBUFFER |
OFFSCREEN_PIXMAPS |
LINEAR_FRAMEBUFFER |
MICROSOFT_ZERO_LINE_BIAS | 0);
if (pScrn->bitsPerPixel == 8)
@ -1218,24 +1247,31 @@ viaInitXAA(ScreenPtr pScreen)
xaaptr->SetClippingRectangle = viaSetClippingRectangle;
xaaptr->DisableClipping = viaDisableClipping;
xaaptr->ClippingFlags = (HARDWARE_CLIP_SOLID_FILL |
HARDWARE_CLIP_SOLID_LINE |
HARDWARE_CLIP_DASHED_LINE |
HARDWARE_CLIP_SCREEN_TO_SCREEN_COPY |
xaaptr->ClippingFlags = (HARDWARE_CLIP_SCREEN_TO_SCREEN_COPY |
HARDWARE_CLIP_MONO_8x8_FILL |
HARDWARE_CLIP_COLOR_8x8_FILL |
HARDWARE_CLIP_SCREEN_TO_SCREEN_COLOR_EXPAND | 0);
if (pVia->Chipset != VIA_VX800 &&
pVia->Chipset != VIA_VX855 &&
pVia->Chipset != VIA_VX900)
xaaptr->ClippingFlags |= (HARDWARE_CLIP_SOLID_FILL |
HARDWARE_CLIP_SOLID_LINE |
HARDWARE_CLIP_DASHED_LINE);
xaaptr->Sync = viaAccelSync;
/* ScreenToScreen copies */
xaaptr->SetupForScreenToScreenCopy = viaSetupForScreenToScreenCopy;
xaaptr->SubsequentScreenToScreenCopy = viaSubsequentScreenToScreenCopy;
xaaptr->ScreenToScreenCopyFlags = NO_PLANEMASK | ROP_NEEDS_SOURCE;
/* Solid filled rectangles */
xaaptr->SetupForSolidFill = viaSetupForSolidFill;
xaaptr->SubsequentSolidFillRect = viaSubsequentSolidFillRect;
xaaptr->SolidFillFlags = NO_PLANEMASK | ROP_NEEDS_SOURCE;
/* Mono 8x8 pattern fills */
xaaptr->SetupForMono8x8PatternFill = viaSetupForMono8x8PatternFill;
xaaptr->SubsequentMono8x8PatternFillRect =
viaSubsequentMono8x8PatternFillRect;
@ -1244,6 +1280,7 @@ viaInitXAA(ScreenPtr pScreen)
HARDWARE_PATTERN_PROGRAMMED_ORIGIN |
BIT_ORDER_IN_BYTE_MSBFIRST | 0);
/* Color 8x8 pattern fills */
xaaptr->SetupForColor8x8PatternFill = viaSetupForColor8x8PatternFill;
xaaptr->SubsequentColor8x8PatternFillRect =
viaSubsequentColor8x8PatternFillRect;
@ -1252,12 +1289,14 @@ viaInitXAA(ScreenPtr pScreen)
HARDWARE_PATTERN_PROGRAMMED_BITS |
HARDWARE_PATTERN_PROGRAMMED_ORIGIN | 0);
/* Solid lines */
xaaptr->SetupForSolidLine = viaSetupForSolidLine;
xaaptr->SubsequentSolidTwoPointLine = viaSubsequentSolidTwoPointLine;
xaaptr->SubsequentSolidHorVertLine = viaSubsequentSolidHorVertLine;
xaaptr->SolidBresenhamLineErrorTermBits = 14;
xaaptr->SolidLineFlags = NO_PLANEMASK | ROP_NEEDS_SOURCE;
/* Dashed line */
xaaptr->SetupForDashedLine = viaSetupForDashedLine;
xaaptr->SubsequentDashedTwoPointLine = viaSubsequentDashedTwoPointLine;
xaaptr->DashPatternMaxLength = 8;
@ -1266,49 +1305,50 @@ viaInitXAA(ScreenPtr pScreen)
LINE_PATTERN_POWER_OF_2_ONLY |
LINE_PATTERN_MSBFIRST_LSBJUSTIFIED | 0);
/* CPU to Screen color expansion */
xaaptr->ScanlineCPUToScreenColorExpandFillFlags = NO_PLANEMASK |
CPU_TRANSFER_PAD_DWORD |
SCANLINE_PAD_DWORD |
BIT_ORDER_IN_BYTE_MSBFIRST |
LEFT_EDGE_CLIPPING | ROP_NEEDS_SOURCE | 0;
CPU_TRANSFER_PAD_DWORD |
SCANLINE_PAD_DWORD |
BIT_ORDER_IN_BYTE_MSBFIRST |
LEFT_EDGE_CLIPPING |
ROP_NEEDS_SOURCE | 0;
xaaptr->SetupForScanlineCPUToScreenColorExpandFill =
viaSetupForCPUToScreenColorExpandFill;
xaaptr->SubsequentScanlineCPUToScreenColorExpandFill =
viaSubsequentScanlineCPUToScreenColorExpandFill;
xaaptr->ColorExpandBase = pVia->BltBase;
xaaptr->ColorExpandRange = VIA_MMIO_BLTSIZE;
if (pVia->Chipset == VIA_VX800 ||
pVia->Chipset == VIA_VX855 ||
pVia->Chipset == VIA_VX900)
xaaptr->ColorExpandRange = VIA_MMIO_BLTSIZE;
else
xaaptr->ColorExpandRange = (64 * 1024);
/* ImageWrite */
xaaptr->ImageWriteFlags = (NO_PLANEMASK |
CPU_TRANSFER_PAD_DWORD |
SCANLINE_PAD_DWORD |
BIT_ORDER_IN_BYTE_MSBFIRST |
LEFT_EDGE_CLIPPING | ROP_NEEDS_SOURCE | 0);
// SYNC_AFTER_IMAGE_WRITE | 0);
LEFT_EDGE_CLIPPING |
ROP_NEEDS_SOURCE |
NO_GXCOPY | 0);
/*
* Most Unichromes are much faster using processor-to-framebuffer writes
* than when using the 2D engine for this.
* test with x11perf -shmput500!
* test with "x11perf -shmput500"
* Example: K8M890 chipset; with GPU=86.3/sec; without GPU=132.0/sec
* TODO Check speed for other chipsets
*/
switch (pVia->Chipset) {
case VIA_K8M800:
case VIA_K8M890:
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
break;
default:
xaaptr->ImageWriteFlags |= NO_GXCOPY;
break;
}
xaaptr->SetupForImageWrite = viaSetupForImageWrite;
xaaptr->SubsequentImageWriteRect = viaSubsequentImageWriteRect;
xaaptr->ImageWriteBase = pVia->BltBase;
if (pVia->Chipset == VIA_VX800 || pVia->Chipset == VIA_VX855)
if (pVia->Chipset == VIA_VX800 ||
pVia->Chipset == VIA_VX855 ||
pVia->Chipset == VIA_VX900)
xaaptr->ImageWriteRange = VIA_MMIO_BLTSIZE;
else
xaaptr->ImageWriteRange = (64 * 1024);
@ -2162,6 +2202,13 @@ viaExaPrepareComposite(int op, PicturePtr pSrcPicture,
Bool isAGP;
unsigned long offset;
/* Workaround: EXA crash with new libcairo2 on a VIA VX800 (#298) */
/* TODO Add real source only pictures */
if (!pSrc) {
ErrorF("pSrc is NULL\n");
return FALSE;
}
v3d->setDestination(v3d, exaGetPixmapOffset(pDst),
exaGetPixmapPitch(pDst), pDstPicture->format);
v3d->setCompositeOperator(v3d, op);
@ -2344,7 +2391,7 @@ viaInitExa(ScreenPtr pScreen)
}
if (!exaDriverInit(pScreen, pExa)) {
xfree(pExa);
free(pExa);
return NULL;
}
@ -2354,7 +2401,7 @@ viaInitExa(ScreenPtr pScreen)
/*
* Acceleration initializatuon function. Sets up offscreen memory disposition,
* Acceleration initialization function. Sets up offscreen memory disposition,
* and initializes engines and acceleration method.
*/
Bool
@ -2542,7 +2589,7 @@ viaExitAccel(ScreenPtr pScreen)
}
}
if (pVia->dBounce)
xfree(pVia->dBounce);
free(pVia->dBounce);
#endif /* OPENCHROMEDRI */
if (pVia->scratchAddr) {
exaOffscreenFree(pScreen, pVia->scratchFBBuffer);
@ -2551,7 +2598,7 @@ viaExitAccel(ScreenPtr pScreen)
if (pVia->exaDriverPtr) {
exaDriverFini(pScreen);
}
xfree(pVia->exaDriverPtr);
free(pVia->exaDriverPtr);
pVia->exaDriverPtr = NULL;
return;
}
@ -2577,7 +2624,7 @@ viaFinishInitAccel(ScreenPtr pScreen)
if (pVia->directRenderingEnabled && pVia->useEXA) {
pVia->dBounce = xcalloc(VIA_DMA_DL_SIZE * 2, 1);
pVia->dBounce = calloc(VIA_DMA_DL_SIZE * 2, 1);
if (!pVia->IsPCI) {

View File

@ -194,6 +194,7 @@ ViaSetPrimaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode)
else
ViaSeqMask(hwp, 0x22, 0x00, 0x1F); /* 128/4 = overflow = 0 */
break;
/* PM800/PM880/CN400 */
case VIA_PM800:
hwp->writeSeq(hwp, 0x17, 0x5F); /* 95 */
ViaSeqMask(hwp, 0x16, 0x20, 0xBF); /* 32 */
@ -204,9 +205,10 @@ ViaSetPrimaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode)
else
ViaSeqMask(hwp, 0x22, 0x1F, 0x1F); /* 31 */
break;
/* P4M800Pro/VN800/CN700 */
case VIA_VM800:
hwp->writeSeq(hwp, 0x17, 0x2F);
ViaSeqMask(hwp, 0x16, 0x14, 0xBF);
ViaSeqMask(hwp, 0x16, 0x14, 0xBF); /* 80/4 = 20 = 0x14 */
ViaSeqMask(hwp, 0x18, 0x08, 0xBF);
if ((mode->HDisplay >= 1400) && (pScrn->bitsPerPixel == 32))
@ -215,40 +217,60 @@ ViaSetPrimaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode)
ViaSeqMask(hwp, 0x22, 0x00, 0x1F);
break;
case VIA_K8M890:
hwp->writeSeq(hwp, 0x16, 0x92);
hwp->writeSeq(hwp, 0x17, 0xB3);
hwp->writeSeq(hwp, 0x18, 0x8A);
/* depth location: {SR17,0,7} */
hwp->writeSeq(hwp, 0x17, 0xB3); /* 360/2-1 = 179 = 0xB3 */
/* Formula (x & 0x3F) | ((x & 0x40) << 1) */
/* threshold location: {SR16,0,5},{SR16,7,7} */
ViaSeqMask(hwp, 0x16, 0x92, 0xBF); /* 328/4 = 82 = 0x52 */
/* high threshold location: {SR18,0,5},{SR18,7,7} */
ViaSeqMask(hwp, 0x18, 0x8A, 0xBF); /* 296/4 = 74 = 0x4A */
/* display queue expire num location: {SR22,0,4}. */
ViaSeqMask(hwp, 0x22, 0x1F, 0x1F); /* 124/4 = 31 = 0x1F */
break;
case VIA_P4M900:
ViaSeqMask(hwp, 0x17, 0x2F, 0xFF);
ViaSeqMask(hwp, 0x16, 0x13, 0x3F);
ViaSeqMask(hwp, 0x16, 0x00, 0x80);
ViaSeqMask(hwp, 0x18, 0x13, 0x3F);
ViaSeqMask(hwp, 0x18, 0x00, 0x80);
/* location: {SR17,0,7} */
hwp->writeSeq(hwp, 0x17, 0x2F); /* 96/2-1 = 47 = 0x2F */
/* location: {SR16,0,5},{SR16,7,7} */
ViaSeqMask(hwp, 0x16, 0x13, 0xBF); /* 76/4 = 19 = 0x13 */
/* location: {SR18,0,5},{SR18,7,7} */
ViaSeqMask(hwp, 0x18, 0x13, 0xBF); /* 76/4 = 19 = 0x13 */
/* location: {SR22,0,4}. */
ViaSeqMask(hwp, 0x22, 0x08, 0x1F); /* 32/4 = 8 = 0x08 */
break;
case VIA_P4M890:
hwp->writeSeq(hwp, 0x16, 0x13);
hwp->writeSeq(hwp, 0x17, 0x2F);
hwp->writeSeq(hwp, 0x18, 0x53);
hwp->writeSeq(hwp, 0x22, 0x10);
hwp->writeSeq(hwp, 0x17, 0x2F); /* 96/2-1 = 47 = 0x2F */
ViaSeqMask(hwp, 0x16, 0x13, 0xBF); /* 76/4 = 19 = 0x13 */
ViaSeqMask(hwp, 0x18, 0x10, 0xBF); /* 64/4 = 16 = 0x10 */
ViaSeqMask(hwp, 0x22, 0x08, 0x1F); /* 32/4 = 8 = 0x08 */
break;
case VIA_CX700:
hwp->writeSeq(hwp, 0x16, 0x26);
hwp->writeSeq(hwp, 0x17, 0x5F);
hwp->writeSeq(hwp, 0x18, 0x66);
hwp->writeSeq(hwp, 0x22, 0x1F);
ViaSeqMask(hwp, 0x16, 0x20, 0xBF); /* 128/4 = 32 = 0x20 */
ViaSeqMask(hwp, 0x18, 0x20, 0xBF); /* 128/4 = 32 = 0x20 */
ViaSeqMask(hwp, 0x22, 0x1F, 0x1F); /* 124/4 = 31 = 0x1F */
break;
case VIA_VX800:
hwp->writeSeq(hwp, 0x16, 0x26); /* 152/4 = 38 */
hwp->writeSeq(hwp, 0x17, 0x5F); /* 192/2-1 = 95 */
hwp->writeSeq(hwp, 0x17, 0x5F); /* 192/2-1 = 95 = 0x5F */
hwp->writeSeq(hwp, 0x16, 0x26); /* 152/4 = 38 = 0x26 */
hwp->writeSeq(hwp, 0x18, 0x26); /* 152/4 = 38 */
hwp->writeSeq(hwp, 0x22, 0x10); /* 64/4 = 16 */
break;
case VIA_VX855:
hwp->writeSeq(hwp, 0x16, 0x50); /* 320/4 = 80 */
hwp->writeSeq(hwp, 0x17, 0xC7); /* 400/2-1 = 199 */
hwp->writeSeq(hwp, 0x18, 0x50); /* 320/4 = 80 */
hwp->writeSeq(hwp, 0x22, 0x28); /* 160/4 = 40 */
hwp->writeSeq(hwp, 0x17, 0xC7); /* 400/2-1 = 199 = 0xC7 */
/* Formula for {SR16,0,5},{SR16,7,7} is: (0x50 & 0x3F) | ((0x50 & 0x40) << 1) = 0x90 */
hwp->writeSeq(hwp, 0x16, 0x90); /* 320/4 = 80 = 0x50 */
/* Formula for {SR18,0,5},{SR18,7,7} is: (0x50 & 0x3F) | ((0x50 & 0x40) << 1) = 0x90 */
hwp->writeSeq(hwp, 0x18, 0x90); /* 320/4 = 80 = 0x50 */
hwp->writeSeq(hwp, 0x22, 0x28); /* 160/4 = 40 = 0x28 */
break;
case VIA_VX900:
hwp->writeSeq(hwp, 0x17, 0xC7); /* 400/2-1 = 199 = 0xC7 */
/* Formula for {SR16,0,5},{SR16,7,7} is: (0x50 & 0x3F) | ((0x50 & 0x40) << 1) = 0x90 */
hwp->writeSeq(hwp, 0x16, 0x90); /* 320/4 = 80 = 0x50 */
/* Formula for {SR18,0,5},{SR18,7,7} is: (0x50 & 0x3F) | ((0x50 & 0x40) << 1) = 0x90 */
hwp->writeSeq(hwp, 0x18, 0x90); /* 320/4 = 80 = 0x50 */
hwp->writeSeq(hwp, 0x22, 0x28); /* 160/4 = 40 = 0x28 */
break;
default:
xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "ViaSetPrimaryFIFO: "
"Chipset %d not implemented\n", pVia->Chipset);
@ -371,7 +393,38 @@ ViaSetSecondaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode)
ViaCrtcMask(hwp, 0x94, 0x20, 0x7F);
break;
case VIA_P4M890:
/* depth location: {CR68,4,7},{CR94,7,7},{CR95,7,7} */
ViaCrtcMask(hwp, 0x68, 0xB0, 0xF0); /* 96/8-1 = 11 = 0x0B */
ViaCrtcMask(hwp, 0x94, 0x00, 0x80);
ViaCrtcMask(hwp, 0x95, 0x00, 0x80);
/* location: {CR68,0,3},{CR95,4,6} */
ViaCrtcMask(hwp, 0x68, 0x03, 0x0F); /* 76/4 = 19 = 0x13 */
ViaCrtcMask(hwp, 0x95, 0x10, 0x70);
/* location: {CR92,0,3},{CR95,0,2} */
ViaCrtcMask(hwp, 0x92, 0x00, 0x0F); /* 64/4 = 16 = 0x10 */
ViaCrtcMask(hwp, 0x95, 0x01, 0x07);
/* location: {CR94,0,6} */
ViaCrtcMask(hwp, 0x94, 0x08, 0x7F); /* 32/4 = 8 = 0x08 */
break;
case VIA_K8M890:
/* Display Queue Depth, location: {CR68,4,7},{CR94,7,7},{CR95,7,7} */
ViaCrtcMask(hwp, 0x68, 0xC0, 0xF0); /* 360/8-1 = 44 = 0x2C; 0x2C << 4 = 0xC0 */
ViaCrtcMask(hwp, 0x94, 0x00, 0x80); /* 0x2C << 3 = 0x00 */
ViaCrtcMask(hwp, 0x95, 0x80, 0x80); /* 0x2C << 2 = 0x80 */
/* Display Queue Read Threshold 1, location: {CR68,0,3},{CR95,4,6} */
ViaCrtcMask(hwp, 0x68, 0x02, 0x0F); /* 328/4 = 82 = 0x52 */
ViaCrtcMask(hwp, 0x95, 0x50, 0x70);
/* location: {CR92,0,3},{CR95,0,2} */
ViaCrtcMask(hwp, 0x92, 0x0A, 0x0F); /* 296/4 = 74 = 0x4A */
ViaCrtcMask(hwp, 0x95, 0x04, 0x07); /* 0x4A >> 4 = 0x04 */
/* Display Expire Number Bits, location: {CR94,0,6} */
ViaCrtcMask(hwp, 0x94, 0x1F, 0x7F); /* 124/4 = 31 = 0x1F */
break;
case VIA_P4M900:
ViaCrtcMask(hwp, 0x68, 0xB0, 0xF0);
@ -402,8 +455,8 @@ ViaSetSecondaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode)
break;
case VIA_VX800:
/* {CR68,4,7},{CR94,7,7},{CR95,7,7} : 96/8-1 = 0x0B */
ViaCrtcMask(hwp, 0x68, 0xA0, 0xF0);
ViaCrtcMask(hwp, 0x94, 0x00, 0x80);
ViaCrtcMask(hwp, 0x68, 0xB0, 0xF0); /* ((0x0B & 0x0F) << 4)) = 0xB0 */
ViaCrtcMask(hwp, 0x94, 0x00, 0x80); /* ((0x0B & 0x10) << 3)) = 0x00 */
ViaCrtcMask(hwp, 0x95, 0x00, 0x80);
/* {CR68,0,3},{CR95,4,6} : 64/4 = 0x10 */
ViaCrtcMask(hwp, 0x68, 0x04, 0x0F);
@ -418,6 +471,38 @@ ViaSetSecondaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode)
ViaCrtcMask(hwp, 0x94, 0x20, 0x7F);
break;
case VIA_VX855:
/* {CR68,4,7},{CR94,7,7},{CR95,7,7} : 200/8-1 = 24 = 0x18 */
ViaCrtcMask(hwp, 0x68, 0x80, 0xF0); /* ((0x18 & 0x0F) << 4)) = 0x80 */
ViaCrtcMask(hwp, 0x94, 0x80, 0x80); /* ((0x18 & 0x10) << 3)) = 0x80 */
ViaCrtcMask(hwp, 0x95, 0x00, 0x80); /* ((0x18 & 0x20) << 2)) = 0x00 */
/* {CR68,0,3},{CR95,4,6} : 160/4 = 0x28 */
ViaCrtcMask(hwp, 0x68, 0x08, 0x0F); /* (0x28 & 0x0F) = 0x08 */
ViaCrtcMask(hwp, 0x95, 0x20, 0x70); /* (0x28 & 0x70) = 0x20 */
/* {CR92,0,3},{CR95,0,2} : 160/4 = 0x28 */
ViaCrtcMask(hwp, 0x92, 0x08, 0x08); /* (0x28 & 0x0F) = 0x08 */
ViaCrtcMask(hwp, 0x95, 0x02, 0x07); /* ((0x28 & 0x70) >> 4)) = 0x02 */
/* {CR94,0,6} : 320/4 = 0x50 */
if ((mode->HDisplay >= 1400) && (pScrn->bitsPerPixel == 32))
ViaCrtcMask(hwp, 0x94, 0x08, 0x7F);
else
ViaCrtcMask(hwp, 0x94, 0x08, 0x7F);
break;
case VIA_VX900:
/* {CR68,4,7},{CR94,7,7},{CR95,7,7} : 192/8-1 = 23 = 0x17 */
ViaCrtcMask(hwp, 0x68, 0x70, 0xF0); /* ((0x17 & 0x0F) << 4)) = 0x70 */
ViaCrtcMask(hwp, 0x94, 0x80, 0x80); /* ((0x17 & 0x10) << 3)) = 0x80 */
ViaCrtcMask(hwp, 0x95, 0x00, 0x80); /* ((0x17 & 0x20) << 2)) = 0x00 */
/* {CR68,0,3},{CR95,4,6} : 160/4 = 0x28 */
ViaCrtcMask(hwp, 0x68, 0x08, 0x0F); /* (0x28 & 0x0F) = 0x08 */
ViaCrtcMask(hwp, 0x95, 0x20, 0x70); /* (0x28 & 0x70) = 0x20 */
/* {CR92,0,3},{CR95,0,2} : 160/4 = 0x28 */
ViaCrtcMask(hwp, 0x92, 0x08, 0x08); /* (0x28 & 0x0F) = 0x08 */
ViaCrtcMask(hwp, 0x95, 0x02, 0x07); /* ((0x28 & 0x70) >> 4)) = 0x2 */
/* {CR94,0,6} : 320/4 = 0x50 */
if ((mode->HDisplay >= 1400) && (pScrn->bitsPerPixel == 32))
ViaCrtcMask(hwp, 0x94, 0x08, 0x7F);
else
ViaCrtcMask(hwp, 0x94, 0x08, 0x7F);
break;
default:
xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "ViaSetSecondaryFIFO: "

View File

@ -82,6 +82,11 @@
#define VIA_DEVICE_TV 0x04
#define VIA_DEVICE_DFP 0x08
#define VIA_I2C_NONE 0x00
#define VIA_I2C_BUS1 0x01
#define VIA_I2C_BUS2 0x02
#define VIA_I2C_BUS3 0x04
/* System Memory CLK */
#define VIA_MEM_SDR66 0x00
#define VIA_MEM_SDR100 0x01
@ -92,7 +97,9 @@
#define VIA_MEM_DDR400 0x06
#define VIA_MEM_DDR533 0x07
#define VIA_MEM_DDR667 0x08
#define VIA_MEM_END 0x09
#define VIA_MEM_DDR800 0x09
#define VIA_MEM_DDR1066 0x0A
#define VIA_MEM_END 0x0B
#define VIA_MEM_NONE 0xFF
/* Digital Output Bus Width */

View File

@ -174,6 +174,7 @@ ViaFirstCRTCSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
break;
default:
ViaSeqMask(hwp, 0x16, 0x08, 0xBF);
@ -234,8 +235,8 @@ ViaFirstCRTCSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
/* Primary starting address -> 0x00, adjustframe does the rest */
hwp->writeCrtc(hwp, 0x0C, 0x00);
hwp->writeCrtc(hwp, 0x0D, 0x00);
hwp->writeCrtc(hwp, 0x34, 0x00);
ViaCrtcMask(hwp, 0x48, 0x00, 0x03); /* is this even possible on CLE266A ? */
hwp->writeCrtc(hwp, 0x34, 0x00);
/* vertical sync start : 2047 */
temp = mode->CrtcVSyncStart;
@ -278,6 +279,7 @@ ViaFirstCRTCSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
break;
default:
/* some leftovers */
@ -314,6 +316,7 @@ ViaFirstCRTCSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
break;
default:
/* some leftovers */
@ -331,15 +334,20 @@ ViaFirstCRTCSetStartingAddress(ScrnInfoPtr pScrn, int x, int y)
CARD32 Base;
CARD32 tmp;
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaFirstCRTCSetStartingAddress\n"));
Base = (y * pScrn->displayWidth + x) * (pScrn->bitsPerPixel / 8);
Base = Base >> 1;
hwp->writeCrtc(hwp, 0x0C, (Base & 0xFF00) >> 8);
hwp->writeCrtc(hwp, 0x0D, Base & 0xFF);
hwp->writeCrtc(hwp, 0x34, (Base & 0xFF0000) >> 16);
/* FIXME The proper starting address for CR48 is 0x1F - Bits[28:24] */
if (!(pVia->Chipset == VIA_CLE266 && CLE266_REV_IS_AX(pVia->ChipRev)))
ViaCrtcMask(hwp, 0x48, Base >> 24, 0x0F);
/* CR34 are fire bits. Must be written after CR0C CR0D CR48. */
hwp->writeCrtc(hwp, 0x34, (Base & 0xFF0000) >> 16);
}
void
@ -434,6 +442,7 @@ ViaSecondCRTCSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
break;
default:
ViaSeqMask(hwp, 0x16, 0x08, 0xBF);
@ -518,6 +527,7 @@ ViaSecondCRTCSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
break;
default:
/* some leftovers */

View File

@ -98,6 +98,7 @@ viaHWCursorInit(ScreenPtr pScreen)
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
if (pVia->pBIOSInfo->FirstCRTC->IsActive) {
pVia->CursorRegControl = VIA_REG_HI_CONTROL0;
pVia->CursorRegBase = VIA_REG_HI_BASE0;
@ -145,9 +146,12 @@ viaHWCursorInit(ScreenPtr pScreen)
infoPtr->ShowCursor = viaShowCursor;
infoPtr->UseHWCursor = viaUseHWCursor;
/* ARGB Cursor init */
infoPtr->UseHWCursorARGB = viaUseHWCursorARGB;
if (pVia->CursorARGBSupported)
if (pVia->CursorARGBSupported) {
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "HWCursor ARGB enabled\n"));
infoPtr->LoadCursorARGB = viaLoadCursorARGB;
}
/* Set cursor location in frame buffer. */
VIASETREG(VIA_REG_CURSOR_MODE, pVia->cursorOffset);
@ -166,6 +170,7 @@ viaHWCursorInit(ScreenPtr pScreen)
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
if (pVia->pBIOSInfo->FirstCRTC->IsActive) {
VIASETREG(VIA_REG_PRIM_HI_INVTCOLOR, 0x00FFFFFF);
VIASETREG(VIA_REG_V327_HI_INVTCOLOR, 0x00FFFFFF);
@ -225,6 +230,7 @@ viaCursorStore(ScrnInfoPtr pScrn)
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
if (pVia->pBIOSInfo->FirstCRTC->IsActive) {
pVia->CursorPrimHiInvtColor = VIAGETREG(VIA_REG_PRIM_HI_INVTCOLOR);
pVia->CursorV327HiInvtColor = VIAGETREG(VIA_REG_V327_HI_INVTCOLOR);
@ -265,6 +271,7 @@ viaCursorRestore(ScrnInfoPtr pScrn)
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
if (pVia->pBIOSInfo->FirstCRTC->IsActive) {
VIASETREG(VIA_REG_PRIM_HI_INVTCOLOR, pVia->CursorPrimHiInvtColor);
VIASETREG(VIA_REG_V327_HI_INVTCOLOR, pVia->CursorV327HiInvtColor);
@ -284,7 +291,7 @@ viaCursorRestore(ScrnInfoPtr pScrn)
}
/*
* ARGB Cursor
* display the current cursor
*/
void
@ -298,6 +305,7 @@ viaShowCursor(ScrnInfoPtr pScrn)
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
if (pVia->pBIOSInfo->FirstCRTC->IsActive) {
VIASETREG(VIA_REG_HI_CONTROL0, 0x36000005);
}
@ -319,13 +327,19 @@ viaShowCursor(ScrnInfoPtr pScrn)
*/
/* Duoview */
if (pVia->CursorPipe)
if (pVia->CursorPipe) {
/* Mono Cursor Display Path [bit31]: Secondary */
/* FIXME For CLE266 and KM400 try to enable 32x32 cursor size [bit1] */
VIASETREG(VIA_REG_ALPHA_CONTROL, 0xF6000005);
else
} else {
/* Mono Cursor Display Path [bit31]: Primary */
VIASETREG(VIA_REG_ALPHA_CONTROL, 0x76000005);
}
}
}
/* hide the current cursor */
void
viaHideCursor(ScrnInfoPtr pScrn)
{
@ -338,6 +352,7 @@ viaHideCursor(ScrnInfoPtr pScrn)
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
if (pVia->pBIOSInfo->FirstCRTC->IsActive) {
temp = VIAGETREG(VIA_REG_HI_CONTROL0);
VIASETREG(VIA_REG_HI_CONTROL0, temp & 0xFFFFFFFA);
@ -350,10 +365,16 @@ viaHideCursor(ScrnInfoPtr pScrn)
default:
temp = VIAGETREG(VIA_REG_ALPHA_CONTROL);
/* Hardware cursor disable [bit0] */
VIASETREG(VIA_REG_ALPHA_CONTROL, temp & 0xFFFFFFFA);
}
}
/*
Set the cursor position to (x,y). X and/or y may be negative
indicating that the cursor image is partially offscreen on
the left and/or top edges of the screen.
*/
static void
viaSetCursorPosition(ScrnInfoPtr pScrn, int x, int y)
{
@ -380,6 +401,7 @@ viaSetCursorPosition(ScrnInfoPtr pScrn, int x, int y)
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
if (pVia->pBIOSInfo->FirstCRTC->IsActive) {
VIASETREG(VIA_REG_HI_POS0, ((x << 16) | (y & 0x07ff)));
VIASETREG(VIA_REG_HI_OFFSET0, ((xoff << 16) | (yoff & 0x07ff)));
@ -409,6 +431,15 @@ viaUseHWCursorARGB(ScreenPtr pScreen, CursorPtr pCurs)
&& pCurs->bits->height <= pVia->CursorMaxHeight);
}
/*
If the driver is unable to use a hardware cursor for reasons
other than the cursor being larger than the maximum specified
in the MaxWidth or MaxHeight field below, it can supply the
UseHWCursor function. If UseHWCursor is provided by the driver,
it will be called whenever the cursor shape changes or the video
mode changes. This is useful for when the hardware cursor cannot
be used in interlaced or doublescan modes.
*/
static Bool
viaUseHWCursor(ScreenPtr pScreen, CursorPtr pCurs)
{
@ -423,8 +454,11 @@ viaUseHWCursor(ScreenPtr pScreen, CursorPtr pCurs)
&& pCurs->bits->height <= pVia->CursorMaxHeight);
}
/*
Load Mono Cursor Image
*/
static void
viaLoadCursorImage(ScrnInfoPtr pScrn, unsigned char *s)
viaLoadCursorImage(ScrnInfoPtr pScrn, unsigned char *src)
{
VIAPtr pVia = VIAPTR(pScrn);
CARD32 temp;
@ -439,7 +473,7 @@ viaLoadCursorImage(ScrnInfoPtr pScrn, unsigned char *s)
if (pVia->CursorARGBSupported) {
#define ARGB_PER_CHUNK (8 * sizeof (chunk) / 2)
for (i = 0; i < (pVia->CursorMaxWidth * pVia->CursorMaxHeight / ARGB_PER_CHUNK); i++) {
chunk = *s++;
chunk = *src++;
for (j = 0; j < ARGB_PER_CHUNK; j++, chunk >>= 2)
*dst++ = mono_cursor_color[chunk & 3];
}
@ -447,7 +481,7 @@ viaLoadCursorImage(ScrnInfoPtr pScrn, unsigned char *s)
pVia->CursorFG = mono_cursor_color[3];
pVia->CursorBG = mono_cursor_color[2];
} else {
memcpy(dst, (CARD8*)s, pVia->CursorSize);
memcpy(dst, (CARD8*)src, pVia->CursorSize);
}
switch(pVia->Chipset) {
case VIA_CX700:
@ -455,6 +489,7 @@ viaLoadCursorImage(ScrnInfoPtr pScrn, unsigned char *s)
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
if (pVia->pBIOSInfo->FirstCRTC->IsActive) {
temp = VIAGETREG(VIA_REG_HI_CONTROL0);
VIASETREG(VIA_REG_HI_CONTROL0, temp & 0xFFFFFFFE);
@ -471,11 +506,17 @@ viaLoadCursorImage(ScrnInfoPtr pScrn, unsigned char *s)
}
}
/*
Set the cursor foreground and background colors. In 8bpp, fg and
bg are indices into the current colormap unless the
HARDWARE_CURSOR_TRUECOLOR_AT_8BPP flag is set. In that case
and in all other bpps the fg and bg are in 8-8-8 RGB format.
*/
static void
viaSetCursorColors(ScrnInfoPtr pScrn, int bg, int fg)
{
VIAPtr pVia = VIAPTR(pScrn);
CARD32 control = pVia->CursorRegControl;
CARD32 pixel;
CARD32 temp;
CARD32 *dst;
@ -487,12 +528,10 @@ viaSetCursorColors(ScrnInfoPtr pScrn, int bg, int fg)
fg |= 0xff000000;
bg |= 0xff000000;
/* Don't recolour the image if we don't have to. */
if (fg == pVia->CursorFG && bg == pVia->CursorBG)
return;
temp = VIAGETREG(control);
VIASETREG(control, temp & 0xFFFFFFFE);
dst = (CARD32*)pVia->cursorMap;
for (i = 0; i < pVia->CursorMaxWidth * pVia->CursorMaxHeight; i++, dst++)
if ((pixel = *dst))
@ -507,6 +546,7 @@ viaSetCursorColors(ScrnInfoPtr pScrn, int bg, int fg)
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
if (pVia->pBIOSInfo->FirstCRTC->IsActive) {
temp = VIAGETREG(VIA_REG_HI_CONTROL0);
VIASETREG(VIA_REG_HI_CONTROL0, temp & 0xFFFFFFFE);
@ -517,7 +557,8 @@ viaSetCursorColors(ScrnInfoPtr pScrn, int bg, int fg)
}
break;
default:
VIASETREG(control, temp);
temp = VIAGETREG(VIA_REG_ALPHA_CONTROL);
VIASETREG(VIA_REG_ALPHA_CONTROL, temp & 0xFFFFFFFE);
}
}

View File

@ -89,16 +89,16 @@ VIASetupDGAMode(
otherPitch = secondPitch ? secondPitch : pMode->HDisplay;
if (pMode->HDisplay != otherPitch) {
newmodes = xrealloc(modes, (*num + 2) * sizeof(DGAModeRec));
newmodes = realloc(modes, (*num + 2) * sizeof(DGAModeRec));
oneMore = TRUE;
}
else {
newmodes = xrealloc(modes, (*num + 1) * sizeof(DGAModeRec));
newmodes = realloc(modes, (*num + 1) * sizeof(DGAModeRec));
oneMore = FALSE;
}
if (!newmodes) {
xfree(modes);
free(modes);
return NULL;
}

View File

@ -187,7 +187,7 @@ VIADRIRingBufferInit(ScrnInfoPtr pScrn)
return FALSE;
/*
* Info frome code-snippet on DRI-DEVEL list; Erdi Chen.
* Info from code-snippet on DRI-DEVEL list; Erdi Chen.
*/
switch (pVia->ChipId) {
@ -267,6 +267,7 @@ VIADRIAgpInit(ScreenPtr pScreen, VIAPtr pVia)
pVIADRI = pDRIInfo->devPrivate;
pVia->agpSize = 0;
if (drmAgpAcquire(pVia->drmFD) < 0) {
xf86DrvMsg(pScreen->myNum, X_ERROR, "[drm] drmAgpAcquire failed %d\n",
errno);
@ -431,17 +432,17 @@ VIAInitVisualConfigs(ScreenPtr pScreen)
if (pScrn->bitsPerPixel == 16 || pScrn->bitsPerPixel == 32) {
numConfigs = 12;
if (!(pConfigs = (__GLXvisualConfig *)
xcalloc(sizeof(__GLXvisualConfig), numConfigs)))
calloc(sizeof(__GLXvisualConfig), numConfigs)))
return FALSE;
if (!(pVIAConfigs = (VIAConfigPrivPtr)
xcalloc(sizeof(VIAConfigPrivRec), numConfigs))) {
xfree(pConfigs);
calloc(sizeof(VIAConfigPrivRec), numConfigs))) {
free(pConfigs);
return FALSE;
}
if (!(pVIAConfigPtrs = (VIAConfigPrivPtr *)
xcalloc(sizeof(VIAConfigPrivPtr), numConfigs))) {
xfree(pConfigs);
xfree(pVIAConfigs);
calloc(sizeof(VIAConfigPrivPtr), numConfigs))) {
free(pConfigs);
free(pVIAConfigs);
return FALSE;
}
for (i = 0; i < numConfigs; i++)
@ -593,23 +594,28 @@ VIADRIScreenInit(ScreenPtr pScreen)
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
pDRIInfo->clientDriverName = "swrast";
break;
default:
pDRIInfo->clientDriverName = VIAClientDriverName;
break;
}
pDRIInfo->busIdString = xalloc(64);
sprintf(pDRIInfo->busIdString, "PCI:%d:%d:%d",
if (xf86LoaderCheckSymbol("DRICreatePCIBusID")) {
pDRIInfo->busIdString = DRICreatePCIBusID(pVia->PciInfo);
} else {
pDRIInfo->busIdString = malloc(64);
sprintf(pDRIInfo->busIdString, "PCI:%d:%d:%d",
#ifdef XSERVER_LIBPCIACCESS
((pVia->PciInfo->domain << 8) | pVia->PciInfo->bus),
pVia->PciInfo->dev, pVia->PciInfo->func
((pVia->PciInfo->domain << 8) | pVia->PciInfo->bus),
pVia->PciInfo->dev, pVia->PciInfo->func
#else
((pciConfigPtr)pVia->PciInfo->thisCard)->busnum,
((pciConfigPtr)pVia->PciInfo->thisCard)->devnum,
((pciConfigPtr)pVia->PciInfo->thisCard)->funcnum
((pciConfigPtr)pVia->PciInfo->thisCard)->busnum,
((pciConfigPtr)pVia->PciInfo->thisCard)->devnum,
((pciConfigPtr)pVia->PciInfo->thisCard)->funcnum
#endif
);
);
}
pDRIInfo->ddxDriverMajorVersion = VIA_DRIDDX_VERSION_MAJOR;
pDRIInfo->ddxDriverMinorVersion = VIA_DRIDDX_VERSION_MINOR;
pDRIInfo->ddxDriverPatchVersion = VIA_DRIDDX_VERSION_PATCH;
@ -646,7 +652,7 @@ VIADRIScreenInit(ScreenPtr pScreen)
pDRIInfo->SAREASize = SAREA_MAX;
#endif
if (!(pVIADRI = (VIADRIPtr) xcalloc(sizeof(VIADRIRec), 1))) {
if (!(pVIADRI = (VIADRIPtr) calloc(sizeof(VIADRIRec), 1))) {
DRIDestroyInfoRec(pVia->pDRIInfo);
pVia->pDRIInfo = NULL;
return FALSE;
@ -665,7 +671,7 @@ VIADRIScreenInit(ScreenPtr pScreen)
if (!DRIScreenInit(pScreen, pDRIInfo, &pVia->drmFD)) {
xf86DrvMsg(pScreen->myNum, X_ERROR,
"[dri] DRIScreenInit failed. Disabling DRI.\n");
xfree(pDRIInfo->devPrivate);
free(pDRIInfo->devPrivate);
pDRIInfo->devPrivate = NULL;
DRIDestroyInfoRec(pVia->pDRIInfo);
pVia->pDRIInfo = NULL;
@ -748,7 +754,7 @@ VIADRICloseScreen(ScreenPtr pScreen)
if (pVia->pDRIInfo) {
if ((pVIADRI = (VIADRIPtr) pVia->pDRIInfo->devPrivate)) {
VIADRIIrqExit(pScrn, pVIADRI);
xfree(pVIADRI);
free(pVIADRI);
pVia->pDRIInfo->devPrivate = NULL;
}
DRIDestroyInfoRec(pVia->pDRIInfo);
@ -756,11 +762,11 @@ VIADRICloseScreen(ScreenPtr pScreen)
}
if (pVia->pVisualConfigs) {
xfree(pVia->pVisualConfigs);
free(pVia->pVisualConfigs);
pVia->pVisualConfigs = NULL;
}
if (pVia->pVisualConfigsPriv) {
xfree(pVia->pVisualConfigsPriv);
free(pVia->pVisualConfigsPriv);
pVia->pVisualConfigsPriv = NULL;
}
}

View File

@ -39,7 +39,7 @@
#include <X11/extensions/dpms.h>
#endif
#include "svnversion.h"
#include "version.h"
#include "via_driver.h"
#include "via_video.h"
@ -143,6 +143,7 @@ static const struct pci_id_match via_device_match[] = {
VIA_DEVICE_MATCH (PCI_CHIP_VT3327, 0 ),
VIA_DEVICE_MATCH (PCI_CHIP_VT3353, 0 ),
VIA_DEVICE_MATCH (PCI_CHIP_VT3409, 0 ),
VIA_DEVICE_MATCH (PCI_CHIP_VT3410, 0 ),
{ 0, 0, 0 },
};
@ -174,12 +175,13 @@ static SymTabRec VIAChipsets[] = {
{VIA_K8M800, "K8M800/K8N800"},
{VIA_PM800, "PM800/PM880/CN400"},
{VIA_VM800, "VM800/P4M800Pro/VN800/CN700"},
{VIA_K8M890, "K8M890/K8N890"},
{VIA_P4M900, "P4M900/VN896/CN896"},
{VIA_CX700, "CX700/VX700"},
{VIA_K8M890, "K8M890/K8N890"},
{VIA_P4M890, "P4M890"},
{VIA_VX800, "VX800"},
{VIA_VX855, "VX855"},
{VIA_P4M900, "P4M900/VN896/CN896"},
{VIA_VX800, "VX800/VX820"},
{VIA_VX855, "VX855/VX875"},
{VIA_VX900, "VX900"},
{-1, NULL }
};
@ -190,12 +192,13 @@ static PciChipsets VIAPciChipsets[] = {
{VIA_K8M800, PCI_CHIP_VT3204, VIA_RES_SHARED},
{VIA_PM800, PCI_CHIP_VT3259, VIA_RES_SHARED},
{VIA_VM800, PCI_CHIP_VT3314, VIA_RES_SHARED},
{VIA_K8M890, PCI_CHIP_VT3336, VIA_RES_SHARED},
{VIA_P4M900, PCI_CHIP_VT3364, VIA_RES_SHARED},
{VIA_CX700, PCI_CHIP_VT3324, VIA_RES_SHARED},
{VIA_K8M890, PCI_CHIP_VT3336, VIA_RES_SHARED},
{VIA_P4M890, PCI_CHIP_VT3327, VIA_RES_SHARED},
{VIA_P4M900, PCI_CHIP_VT3364, VIA_RES_SHARED},
{VIA_VX800, PCI_CHIP_VT3353, VIA_RES_SHARED},
{VIA_VX855, PCI_CHIP_VT3409, VIA_RES_SHARED},
{VIA_VX900, PCI_CHIP_VT3410, VIA_RES_SHARED},
{-1, -1, VIA_RES_UNDEF}
};
@ -215,9 +218,11 @@ typedef enum
OPTION_EXA_SCRATCH_SIZE,
OPTION_SWCURSOR,
OPTION_SHADOW_FB,
OPTION_ROTATION_TYPE,
OPTION_ROTATE,
OPTION_VIDEORAM,
OPTION_ACTIVEDEVICE,
OPTION_I2CDEVICES,
OPTION_BUSWIDTH,
OPTION_CENTER,
OPTION_PANELSIZE,
@ -253,6 +258,7 @@ static OptionInfoRec VIAOptions[] = {
{OPTION_EXA_SCRATCH_SIZE, "ExaScratchSize", OPTV_INTEGER, {0}, FALSE},
{OPTION_SWCURSOR, "SWCursor", OPTV_BOOLEAN, {0}, FALSE},
{OPTION_SHADOW_FB, "ShadowFB", OPTV_BOOLEAN, {0}, FALSE},
{OPTION_ROTATION_TYPE, "RotationType", OPTV_ANYSTR, {0}, FALSE},
{OPTION_ROTATE, "Rotate", OPTV_ANYSTR, {0}, FALSE},
{OPTION_VIDEORAM, "VideoRAM", OPTV_INTEGER, {0}, FALSE},
{OPTION_ACTIVEDEVICE, "ActiveDevice", OPTV_ANYSTR, {0}, FALSE},
@ -276,6 +282,7 @@ static OptionInfoRec VIAOptions[] = {
{OPTION_MODE_SWITCH_METHOD, "ModeSwitchMethod", OPTV_ANYSTR, {0}, FALSE},
{OPTION_MAX_DRIMEM, "MaxDRIMem", OPTV_INTEGER, {0}, FALSE},
{OPTION_AGPMEM, "AGPMem", OPTV_INTEGER, {0}, FALSE},
{OPTION_I2CDEVICES, "I2CDevices", OPTV_ANYSTR, {0}, FALSE},
{-1, NULL, OPTV_NONE, {0}, FALSE}
};
@ -307,6 +314,7 @@ VIASetup(pointer module, pointer opts, int *errmaj, int *errmin)
{
static Bool setupDone = FALSE;
/* Only be loaded once */
if (!setupDone) {
setupDone = TRUE;
xf86AddDriver(&VIA, module,
@ -339,6 +347,7 @@ VIAGetRec(ScrnInfoPtr pScrn)
if (pScrn->driverPrivate)
return TRUE;
/* allocate VIARec */
pScrn->driverPrivate = xnfcalloc(sizeof(VIARec), 1);
VIAPtr pVia = ((VIARec *) (pScrn->driverPrivate));
@ -400,36 +409,36 @@ VIAFreeRec(ScrnInfoPtr pScrn)
if (pBIOSInfo->Panel) {
if (pBIOSInfo->Panel->NativeMode)
xfree(pBIOSInfo->Panel->NativeMode);
free(pBIOSInfo->Panel->NativeMode);
if (pBIOSInfo->Panel->CenteredMode)
xfree(pBIOSInfo->Panel->CenteredMode);
xfree(pBIOSInfo->Panel);
free(pBIOSInfo->Panel->CenteredMode);
free(pBIOSInfo->Panel);
}
if (pBIOSInfo->FirstCRTC)
xfree(pBIOSInfo->FirstCRTC);
free(pBIOSInfo->FirstCRTC);
if (pBIOSInfo->SecondCRTC)
xfree(pBIOSInfo->SecondCRTC);
free(pBIOSInfo->SecondCRTC);
if (pBIOSInfo->Simultaneous)
xfree(pBIOSInfo->Simultaneous);
free(pBIOSInfo->Simultaneous);
if (pBIOSInfo->Lvds)
xfree(pBIOSInfo->Lvds);
free(pBIOSInfo->Lvds);
}
if (VIAPTR(pScrn)->pVbe)
vbeFree(VIAPTR(pScrn)->pVbe);
if (pVia->VideoRegs)
xfree(pVia->VideoRegs);
free(pVia->VideoRegs);
if (((VIARec *) (pScrn->driverPrivate))->pBIOSInfo->TVI2CDev)
xf86DestroyI2CDevRec((((VIARec *) (pScrn->driverPrivate))->pBIOSInfo->
TVI2CDev), TRUE);
xfree(((VIARec *) (pScrn->driverPrivate))->pBIOSInfo);
free(((VIARec *) (pScrn->driverPrivate))->pBIOSInfo);
VIAUnmapMem(pScrn);
xfree(pScrn->driverPrivate);
free(pScrn->driverPrivate);
pScrn->driverPrivate = NULL;
} /* VIAFreeRec */
@ -455,7 +464,6 @@ via_pci_probe(DriverPtr driver, int entity_num,
{
ScrnInfoPtr scrn = NULL;
EntityInfoPtr entity;
DevUnion *private;
scrn = xf86ConfigPciEntity(scrn, 0, entity_num, VIAPciChipsets,
NULL, NULL, NULL, NULL, NULL);
@ -513,7 +521,7 @@ VIAProbe(DriverPtr drv, int flags)
numDevSections,
drv,
&usedChips);
xfree(devSections);
free(devSections);
if (numUsed <= 0)
return FALSE;
@ -588,11 +596,11 @@ VIAProbe(DriverPtr drv, int flags)
}
instance++;
}
xfree(pEnt);
free(pEnt);
}
}
xfree(usedChips);
free(usedChips);
return foundScreen;
@ -652,6 +660,12 @@ VIAProbeDDC(ScrnInfoPtr pScrn, int index)
vbeInfoPtr pVbe;
if (xf86LoadSubModule(pScrn, "vbe")) {
/* FIXME This line should be replaced with:
pVbe = VBEExtendedInit(NULL, index, 0);
for XF86 version > 4.2.99
*/
pVbe = VBEInit(NULL, index);
ConfiguredMonitor = vbeDoEDID(pVbe, NULL);
vbeFree(pVbe);
@ -664,7 +678,7 @@ VIASetupDefaultOptions(ScrnInfoPtr pScrn)
VIAPtr pVia = VIAPTR(pScrn);
VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo;
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIASetupDefaultOptions\n"));
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIASetupDefaultOptions - Setting up default chipset options.\n"));
pVia->shadowFB = FALSE;
pVia->NoAccel = FALSE;
@ -684,10 +698,14 @@ VIASetupDefaultOptions(ScrnInfoPtr pScrn)
pVia->maxDriSize = 0;
pVia->agpMem = AGP_SIZE / 1024;
pVia->ActiveDevice = 0x00;
pVia->I2CDevices = 0x00;
pVia->VideoEngine = VIDEO_ENGINE_CLE;
#ifdef HAVE_DEBUG
pVia->PrintVGARegs = FALSE;
#endif
/* Disable vertical interpolation because the size of */
/* line buffer (limited to 800) is too small to do interpolation. */
pVia->swov.maxWInterp = 800;
pVia->swov.maxHInterp = 600;
pVia->useLegacyVBE = TRUE;
@ -710,20 +728,30 @@ VIASetupDefaultOptions(ScrnInfoPtr pScrn)
break;
case VIA_K8M800:
pVia->DRIIrqEnable = FALSE;
pVia->UseLegacyModeSwitch = TRUE;
break;
case VIA_PM800:
/* Use new mode switch to resolve many resolution and display bugs (switch to console) */
/* FIXME The video playing (XV) is not working correctly after turn on new mode switch */
pVia->VideoEngine = VIDEO_ENGINE_CME;
pVia->UseLegacyModeSwitch = TRUE;
break;
case VIA_VM800:
pVia->UseLegacyModeSwitch = TRUE;
/* New mode switch resolve bug with gamma set #282 */
/* and with Xv after hibernate #240 */
break;
case VIA_CX700:
pVia->VideoEngine = VIDEO_ENGINE_CME;
pVia->swov.maxWInterp = 1920;
pVia->swov.maxHInterp = 1080;
break;
case VIA_K8M890:
pVia->VideoEngine = VIDEO_ENGINE_CME;
pVia->agpEnable = FALSE;
pVia->dmaXV = FALSE;
break;
case VIA_P4M890:
pVia->VideoEngine = VIDEO_ENGINE_CME;
pVia->dmaXV = FALSE;
break;
case VIA_P4M900:
pVia->VideoEngine = VIDEO_ENGINE_CME;
pVia->agpEnable = FALSE;
@ -732,20 +760,13 @@ VIASetupDefaultOptions(ScrnInfoPtr pScrn)
pVia->dmaXV = FALSE;
pBIOSInfo->TVDIPort = VIA_DI_PORT_DVP0;
break;
case VIA_CX700:
pVia->VideoEngine = VIDEO_ENGINE_CME;
pVia->swov.maxWInterp = 1920;
pVia->swov.maxHInterp = 1080;
break;
case VIA_P4M890:
pVia->VideoEngine = VIDEO_ENGINE_CME;
pVia->dmaXV = FALSE;
break;
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
pVia->VideoEngine = VIDEO_ENGINE_CME;
/* pVia->agpEnable = FALSE;
pVia->dmaXV = FALSE;*/
pVia->agpEnable = FALSE;
pVia->dmaXV = FALSE;
break;
}
@ -807,7 +828,7 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
pEnt = xf86GetEntityInfo(pScrn->entityList[0]);
#ifndef XSERVER_LIBPCIACCESS
if (pEnt->resources) {
xfree(pEnt);
free(pEnt);
VIAFreeRec(pScrn);
return FALSE;
}
@ -825,7 +846,7 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
pPriv = xf86GetEntityPrivate(pScrn->entityList[0], gVIAEntityIndex);
pVIAEnt = pPriv->ptr;
if (pVIAEnt->BypassSecondary) {
xfree(pEnt);
free(pEnt);
VIAFreeRec(pScrn);
return FALSE;
}
@ -848,6 +869,7 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
pVIAEnt->HasSecondary = FALSE;
pVIAEnt->RestorePrimary = FALSE;
pVIAEnt->IsSecondaryRestored = FALSE;
}
} else {
pVia->sharedData = xnfcalloc(sizeof(ViaSharedRec), 1);
@ -866,7 +888,7 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
*/
if (!xf86SetDepthBpp(pScrn, 0, 0, 0, Support32bppFb)) {
xfree(pEnt);
free(pEnt);
VIAFreeRec(pScrn);
return FALSE;
} else {
@ -881,7 +903,7 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"Given depth (%d) is not supported by this driver\n",
pScrn->depth);
xfree(pEnt);
free(pEnt);
VIAFreeRec(pScrn);
return FALSE;
}
@ -897,7 +919,7 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
rgb zeros = { 0, 0, 0 };
if (!xf86SetWeight(pScrn, zeros, zeros)) {
xfree(pEnt);
free(pEnt);
VIAFreeRec(pScrn);
return FALSE;
} else {
@ -914,7 +936,7 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Given default visual"
" (%s) is not supported at depth %d.\n",
xf86GetVisualName(pScrn->defaultVisual), pScrn->depth);
xfree(pEnt);
free(pEnt);
VIAFreeRec(pScrn);
return FALSE;
}
@ -979,7 +1001,7 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
xf86DrvMsg(pScrn->scrnIndex, from, "Chipset revision: %d\n", pVia->ChipRev);
xfree(pEnt);
free(pEnt);
/* Detect the amount of installed RAM */
from = X_PROBED;
@ -993,6 +1015,12 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
switch (pVia->Chipset) {
case VIA_CLE266:
#ifdef XSERVER_LIBPCIACCESS
pci_device_cfg_read_u8(bridge, &videoRam, 0xE1);
#else
videoRam = pciReadByte(pciTag(0, 0, 0), 0xE1) & 0x70;
#endif
pScrn->videoRam = (1 << ((videoRam & 0x70) >> 4)) << 10;
case VIA_KM400:
#ifdef XSERVER_LIBPCIACCESS
pci_device_cfg_read_u8(bridge, &videoRam, 0xE1);
@ -1000,6 +1028,12 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
videoRam = pciReadByte(pciTag(0, 0, 0), 0xE1) & 0x70;
#endif
pScrn->videoRam = (1 << ((videoRam & 0x70) >> 4)) << 10;
/* Workaround for #177 (VRAM probing fail on P4M800) */
if (pScrn->videoRam < 16384) {
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
"Memory size detection failed: using 16 MB.\n");
pScrn->videoRam = 16 << 10;
}
break;
case VIA_PM800:
case VIA_VM800:
@ -1017,6 +1051,7 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
case VIA_CX700:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
#ifdef XSERVER_LIBPCIACCESS
pci_device_cfg_read_u8(vgaDevice, &videoRam, 0xA1);
#else
@ -1046,23 +1081,28 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
}
}
if (from == X_PROBED)
/*
* PCI BAR are limited to 256 MB.
* This limitation will go away with TTM.
*/
if (pScrn->videoRam > (256 << 10)) {
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
"Cannot use more than 256 MB of VRAM.\n");
pScrn->videoRam = (256 << 10);
}
if (from == X_PROBED) {
xf86DrvMsg(pScrn->scrnIndex, from,
"Probed amount of VideoRAM = %d kB\n", pScrn->videoRam);
}
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
"Setting up default chipset options.\n");
if (!VIASetupDefaultOptions(pScrn)) {
VIAFreeRec(pScrn);
return FALSE;
}
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Reading config file...\n");
xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, VIAOptions);
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
"Starting to parse config file options...\n");
if (xf86GetOptValInteger(VIAOptions, OPTION_VIDEORAM, &pScrn->videoRam))
xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
"Setting amount of VideoRAM to %d kB\n", pScrn->videoRam);
@ -1099,6 +1139,31 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
}
}
/* When rotating, switch shadow framebuffer on and acceleration off. */
if ((s = xf86GetOptValString(VIAOptions, OPTION_ROTATION_TYPE))) {
if (!xf86NameCmp(s, "SWRandR")) {
pVia->shadowFB = TRUE;
pVia->NoAccel = TRUE;
pVia->RandRRotation = TRUE;
pVia->rotate = RR_Rotate_0;
xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Rotating screen "
"RandR enabled, acceleration disabled\n");
} else if (!xf86NameCmp(s, "HWRandR")) {
pVia->shadowFB = TRUE;
pVia->NoAccel = TRUE;
pVia->RandRRotation = TRUE;
pVia->rotate = RR_Rotate_0;
xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Hardware accelerated "
"rotating screen is not implemented. Using SW RandR.\n");
} else {
xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "\"%s\" is not a valid"
"value for Option \"RotationType\".\n", s);
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
"Valid options are \"SWRandR\" and \"HWRandR\".\n");
}
}
/* When rotating, switch shadow framebuffer on and acceleration off. */
if ((s = xf86GetOptValString(VIAOptions, OPTION_ROTATE))) {
if (!xf86NameCmp(s, "CW")) {
@ -1498,6 +1563,7 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
}
}
/* Initialize the colormap */
Gamma zeros = { 0.0, 0.0, 0.0 };
if (!xf86SetGamma(pScrn, zeros)) {
VIAFreeRec(pScrn);
@ -1523,6 +1589,17 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
pVia->videoRambytes = pScrn->videoRam << 10;
/* I2CDevices Option for I2C Initialization */
//pVia->I2CDevices = 0x00;
if ((s = xf86GetOptValString(VIAOptions, OPTION_I2CDEVICES))) {
if (strstr(s, "Bus1"))
pVia->I2CDevices |= VIA_I2C_BUS1;
if (strstr(s, "Bus2"))
pVia->I2CDevices |= VIA_I2C_BUS2;
if (strstr(s, "Bus3"))
pVia->I2CDevices |= VIA_I2C_BUS3;
}
if (!xf86LoadSubModule(pScrn, "i2c")) {
VIAFreeRec(pScrn);
return FALSE;
@ -1536,10 +1613,13 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
} else {
if (pVia->pI2CBus1) {
pVia->DDC1 = xf86DoEDID_DDC2(pScrn->scrnIndex, pVia->pI2CBus1);
pVia->DDC1 = xf86DoEEDID(pScrn->scrnIndex, pVia->pI2CBus1, TRUE);
if (pVia->DDC1) {
xf86PrintEDID(pVia->DDC1);
xf86SetDDCproperties(pScrn, pVia->DDC1);
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
"DDC pI2CBus1 detected a %s\n", DIGITAL(pVia->DDC1->features.input_type) ?
"DFP" : "CRT"));
}
}
}
@ -1559,17 +1639,6 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
ViaPanelPreInit(pScrn);
}
if (pBIOSInfo->Panel->IsActive &&
((pVia->Chipset == VIA_K8M800) ||
(pVia->Chipset == VIA_PM800) ||
(pVia->Chipset == VIA_VM800))) {
xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Panel on K8M800, PM800 and "
"VM800 is currently not supported.\n");
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
"Using VBE to set modes to work around this.\n");
pVia->useVBEModes = TRUE;
}
pVia->pVbe = NULL;
if (pVia->useVBEModes) {
/* VBE doesn't properly initialise int10 itself. */
@ -1593,6 +1662,7 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
}
} else {
int max_pitch, max_height;
/* Add own modes. */
ViaModesAttach(pScrn, pScrn->monitor);
@ -1609,6 +1679,26 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
clockRanges->interlaceAllowed = TRUE;
clockRanges->doubleScanAllowed = FALSE;
switch (pVia->Chipset) {
case VIA_CLE266:
case VIA_KM400:
case VIA_K8M800:
case VIA_PM800:
case VIA_VM800:
max_pitch = 3344;
max_height = 2508;
case VIA_CX700:
case VIA_K8M890:
case VIA_P4M890:
case VIA_P4M900:
max_pitch = 8192/(pScrn->bitsPerPixel >> 3)-1;
max_height = max_pitch;
break;
default:
max_pitch = 16384/(pScrn->bitsPerPixel >> 3)-1;
max_height = max_pitch;
}
/*
* xf86ValidateModes will check that the mode HTotal and VTotal values
* don't exceed the chipset's limit if pScrn->maxHValue and
@ -1621,7 +1711,7 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
*
* CLE266A: primary AdjustFrame can use only 24 bits, so we are limited
* to 12x11 bits; 4080x2048 (~2:1), 3344x2508 (4:3), or 2896x2896 (1:1).
* Test CLE266Cx, KM400, KM400A, K8M800, PM800, CN400 please.
* TODO Test CLE266Cx, KM400, KM400A, K8M800, CN400 please.
*
* We should be able to limit the memory available for a mode to 32 MB,
* but xf86ValidateModes (or miScanLineWidth) fails to catch this
@ -1629,15 +1719,16 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
*/
/* Select valid modes from those available. */
i = xf86ValidateModes(pScrn, pScrn->monitor->Modes, /* availModes */
pScrn->display->modes, /* modeNames */
clockRanges, /* list of clock ranges */
i = xf86ValidateModes(pScrn,
pScrn->monitor->Modes, /* List of modes available for the monitor */
pScrn->display->modes, /* List of mode names that the screen is requesting */
clockRanges, /* list of clock ranges */
NULL, /* list of line pitches */
256, /* minimum line pitch */
3344, /* maximum line pitch */
32 * 8, /* pitch inc (bits) */
128, /* min height */
2508, /* max height */
max_pitch, /* maximum line pitch */
16 * 8, /* pitch increment (in bits), we just want 16 bytes alignment */
128, /* min virtual height */
max_height, /* maximum virtual height */
pScrn->display->virtualX, /* virtual width */
pScrn->display->virtualY, /* virtual height */
pVia->videoRambytes, /* apertureSize */
@ -1650,6 +1741,7 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
return FALSE;
}
/* This function deletes modes in the modes field of the ScrnInfoRec that have been marked as invalid. */
xf86PruneDriverModes(pScrn);
if (i == 0 || pScrn->modes == NULL) {
@ -1662,9 +1754,17 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
/* Set up screen parameters. */
pVia->Bpp = pScrn->bitsPerPixel >> 3;
pVia->Bpl = pScrn->displayWidth * pVia->Bpp;
/* This function fills in the Crtc fields for all the modes in the modes field of the ScrnInfoRec. */
xf86SetCrtcForModes(pScrn, INTERLACE_HALVE_V);
/* Set the current mode to the first in the list */
pScrn->currentMode = pScrn->modes;
/* Print the list of modes being used */
xf86PrintModes(pScrn);
/* Set display resolution */
xf86SetDpi(pScrn, 0, 0);
#ifdef USE_FB
@ -1822,6 +1922,7 @@ VIALeaveVT(int scrnIndex, int flags)
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
break;
default:
hwp->writeSeq(hwp, 0x1A, pVia->SavedReg.SR1A | 0x40);
@ -1935,7 +2036,9 @@ VIASave(ScrnInfoPtr pScrn)
Regs->SR17 = hwp->readSeq(hwp, 0x17);
Regs->SR18 = hwp->readSeq(hwp, 0x18);
Regs->SR19 = hwp->readSeq(hwp, 0x19);
/* PCI Bus Control */
Regs->SR1A = hwp->readSeq(hwp, 0x1A);
Regs->SR1B = hwp->readSeq(hwp, 0x1B);
Regs->SR1C = hwp->readSeq(hwp, 0x1C);
Regs->SR1D = hwp->readSeq(hwp, 0x1D);
@ -1977,40 +2080,59 @@ VIASave(ScrnInfoPtr pScrn)
Regs->SR4C = hwp->readSeq(hwp, 0x4C);
break;
}
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
"Non-Primary Adapter! saving VGA_SR_MODE only !!\n"));
/* Save Preemptive Arbiter Control Register */
Regs->SR4D = hwp->readSeq(hwp, 0x4D);
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Crtc...\n"));
Regs->CR13 = hwp->readCrtc(hwp, 0x13);
Regs->CR32 = hwp->readCrtc(hwp, 0x32);
Regs->CR33 = hwp->readCrtc(hwp, 0x33);
Regs->CR34 = hwp->readCrtc(hwp, 0x34);
Regs->CR35 = hwp->readCrtc(hwp, 0x35);
Regs->CR36 = hwp->readCrtc(hwp, 0x36);
/* Starting Address */
/* Start Address High */
Regs->CR0C = hwp->readCrtc(hwp, 0x0C);
/* Start Address Low */
Regs->CR0D = hwp->readCrtc(hwp, 0x0D);
/* Starting Address Overflow Bits[28:24] */
Regs->CR48 = hwp->readCrtc(hwp, 0x48);
/* CR34 are fire bits. Must be written after CR0C CR0D CR48. */
/* Starting Address Overflow Bits[23:16] */
Regs->CR34 = hwp->readCrtc(hwp, 0x34);
Regs->CR49 = hwp->readCrtc(hwp, 0x49);
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "TVSave...\n"));
if (pBIOSInfo->TVI2CDev)
ViaTVSave(pScrn);
/* Save LCD control registers. */
/* Save LCD control registers (from CR 0x50 to 0x93). */
for (i = 0; i < 68; i++)
Regs->CRTCRegs[i] = hwp->readCrtc(hwp, i + 0x50);
if (pVia->Chipset != VIA_CLE266 && pVia->Chipset != VIA_KM400) {
Regs->CRA0 = hwp->readCrtc(hwp, 0xA0);
Regs->CRA1 = hwp->readCrtc(hwp, 0xA1);
Regs->CRA2 = hwp->readCrtc(hwp, 0xA2);
/* LVDS Channel 2 Function Select 0 / DVI Function Select */
Regs->CR97 = hwp->readCrtc(hwp, 0x97);
/* LVDS Channel 1 Function Select 0 */
Regs->CR99 = hwp->readCrtc(hwp, 0x99);
/* Digital Video Port 1 Function Select 0 */
Regs->CR9B = hwp->readCrtc(hwp, 0x9B);
/* Power Now Control 4 */
Regs->CR9F = hwp->readCrtc(hwp, 0x9F);
/* Horizontal Scaling Initial Value */
Regs->CRA0 = hwp->readCrtc(hwp, 0xA0);
/* Vertical Scaling Initial Value */
Regs->CRA1 = hwp->readCrtc(hwp, 0xA1);
/* Scaling Enable Bit */
Regs->CRA2 = hwp->readCrtc(hwp, 0xA2);
}
/* Save TMDS status */
@ -2018,6 +2140,7 @@ VIASave(ScrnInfoPtr pScrn)
case VIA_CX700:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
Regs->CRD2 = hwp->readCrtc(hwp, 0xD2);
break;
}
@ -2045,15 +2168,15 @@ VIARestore(ScrnInfoPtr pScrn)
/* Unlock extended registers. */
hwp->writeSeq(hwp, 0x10, 0x01);
/*=* CR6A, CR6B, CR6C must be reset before restore
standard vga regs, or system will be hang. *=*/
/*=* CR6A, CR6B, CR6C must be reset before restoring
standard vga regs, or system will hang. *=*/
/*=* TODO Check is reset IGA2 channel before disable IGA2 channel
is neccesery or it may cause some line garbage. *=*/
is necessary or it may cause some line garbage. *=*/
hwp->writeCrtc(hwp, 0x6A, 0x00);
hwp->writeCrtc(hwp, 0x6B, 0x00);
hwp->writeCrtc(hwp, 0x6C, 0x00);
/* Gamma must disable before restore pallette */
/* Gamma must be disabled before restoring palette */
ViaGammaDisable(pScrn);
if (pBIOSInfo->TVI2CDev)
@ -2098,11 +2221,19 @@ VIARestore(ScrnInfoPtr pScrn)
hwp->writeSeq(hwp, 0x45, Regs->SR45);
hwp->writeSeq(hwp, 0x46, Regs->SR46);
/* Reset VCK PLL */
hwp->writeSeq(hwp, 0x40, hwp->readSeq(hwp, 0x40) | 0x02); /* Set SR40[1] to 1 */
hwp->writeSeq(hwp, 0x40, hwp->readSeq(hwp, 0x40) & 0xFD); /* Set SR40[1] to 0 */
/* ECK Clock Synthesizer: */
hwp->writeSeq(hwp, 0x47, Regs->SR47);
hwp->writeSeq(hwp, 0x48, Regs->SR48);
hwp->writeSeq(hwp, 0x49, Regs->SR49);
/* Reset ECK PLL */
hwp->writeSeq(hwp, 0x40, hwp->readSeq(hwp, 0x40) | 0x01); /* Set SR40[0] to 1 */
hwp->writeSeq(hwp, 0x40, hwp->readSeq(hwp, 0x40) & 0xFE); /* Set SR40[0] to 0 */
switch (pVia->Chipset) {
case VIA_CLE266:
case VIA_KM400:
@ -2112,9 +2243,22 @@ VIARestore(ScrnInfoPtr pScrn)
hwp->writeSeq(hwp, 0x4A, Regs->SR4A);
hwp->writeSeq(hwp, 0x4B, Regs->SR4B);
hwp->writeSeq(hwp, 0x4C, Regs->SR4C);
/* Reset LCK PLL */
hwp->writeSeq(hwp, 0x40, hwp->readSeq(hwp, 0x40) | 0x04); /* Set SR40[2] to 1 */
hwp->writeSeq(hwp, 0x40, hwp->readSeq(hwp, 0x40) & 0xFB); /* Set SR40[2] to 0 */
break;
}
/* Restore Preemptive Arbiter Control Register
* VX800 and VX855 should restore this register too,
* but I don't do that for I don't want to affect any
* chips now.
*/
if (pVia->Chipset == VIA_VX900) {
hwp->writeSeq(hwp, 0x4D, Regs->SR4D);
}
/* Reset dotclocks. */
ViaSeqMask(hwp, 0x40, 0x06, 0x06);
ViaSeqMask(hwp, 0x40, 0x00, 0x06);
@ -2127,14 +2271,23 @@ VIARestore(ScrnInfoPtr pScrn)
hwp->writeCrtc(hwp, 0x32, Regs->CR32);
/* HSYNCH Adjuster */
hwp->writeCrtc(hwp, 0x33, Regs->CR33);
/* Starting Address Overflow */
hwp->writeCrtc(hwp, 0x34, Regs->CR34);
/* Extended Overflow */
hwp->writeCrtc(hwp, 0x35, Regs->CR35);
/*Power Management 3 (Monitor Control) */
hwp->writeCrtc(hwp, 0x36, Regs->CR36);
/* Starting Address */
/* Start Address High */
hwp->writeCrtc(hwp, 0x0C, Regs->CR0C);
/* Start Address Low */
hwp->writeCrtc(hwp, 0x0D, Regs->CR0D);
/* Starting Address Overflow Bits[28:24] */
hwp->writeCrtc(hwp, 0x48, Regs->CR48);
/* CR34 are fire bits. Must be written after CR0C CR0D CR48. */
/* Starting Address Overflow Bits[23:16] */
hwp->writeCrtc(hwp, 0x34, Regs->CR34);
hwp->writeCrtc(hwp, 0x49, Regs->CR49);
/* Restore LCD control registers. */
@ -2160,6 +2313,7 @@ VIARestore(ScrnInfoPtr pScrn)
case VIA_CX700:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
/* LVDS Control Register */
hwp->writeCrtc(hwp, 0xD2, Regs->CRD2);
break;
@ -2189,6 +2343,7 @@ ViaMMIOEnable(ScrnInfoPtr pScrn)
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
ViaSeqMask(hwp, 0x1A, 0x08, 0x08);
break;
default:
@ -2212,6 +2367,7 @@ ViaMMIODisable(ScrnInfoPtr pScrn)
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
ViaSeqMask(hwp, 0x1A, 0x00, 0x08);
break;
default:
@ -2328,10 +2484,18 @@ VIAMapFB(ScrnInfoPtr pScrn)
VIAPtr pVia = VIAPTR(pScrn);
#ifdef XSERVER_LIBPCIACCESS
pVia->FrameBufferBase = pVia->PciInfo->regions[0].base_addr;
if (pVia->Chipset == VIA_VX900) {
pVia->FrameBufferBase = pVia->PciInfo->regions[2].base_addr;
} else {
pVia->FrameBufferBase = pVia->PciInfo->regions[0].base_addr;
}
int err;
#else
pVia->FrameBufferBase = pVia->PciInfo->memBase[0];
if (pVia->Chipset == VIA_VX900) {
pVia->FrameBufferBase = pVia->PciInfo->memBase[2];
} else {
pVia->FrameBufferBase = pVia->PciInfo->memBase[0];
}
#endif
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAMapFB\n"));
@ -2453,7 +2617,6 @@ static void
VIALoadRgbLut(ScrnInfoPtr pScrn, int numColors, int *indices, LOCO *colors,
VisualPtr pVisual)
{
VIAPtr pVia = VIAPTR(pScrn);
vgaHWPtr hwp = VGAHWPTR(pScrn);
int i, j, index;
@ -2844,7 +3007,7 @@ VIAInternalScreenInit(int scrnIndex, ScreenPtr pScreen)
if (pVia->shadowFB) {
pVia->ShadowPitch = BitmapBytePad(pScrn->bitsPerPixel * width);
pVia->ShadowPtr = xalloc(pVia->ShadowPitch * shadowHeight);
pVia->ShadowPtr = malloc(pVia->ShadowPitch * shadowHeight);
displayWidth = pVia->ShadowPitch / (pScrn->bitsPerPixel >> 3);
FBStart = pVia->ShadowPtr;
} else {
@ -2880,7 +3043,6 @@ static Bool
VIAWriteMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
{
VIAPtr pVia = VIAPTR(pScrn);
VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo;
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAWriteMode\n"));
@ -2917,6 +3079,7 @@ VIAWriteMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
/*
* Since we are using virtual, we need to adjust
* the offset to match the framebuffer alignment.
@ -2963,6 +3126,7 @@ VIACloseScreen(int scrnIndex, ScreenPtr pScreen)
case VIA_P4M900:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
break;
default :
hwp->writeSeq(hwp, 0x1A, pVia->SavedReg.SR1A | 0x40);
@ -2986,11 +3150,11 @@ VIACloseScreen(int scrnIndex, ScreenPtr pScreen)
viaExitAccel(pScreen);
if (pVia->ShadowPtr) {
xfree(pVia->ShadowPtr);
free(pVia->ShadowPtr);
pVia->ShadowPtr = NULL;
}
if (pVia->DGAModes) {
xfree(pVia->DGAModes);
free(pVia->DGAModes);
pVia->DGAModes = NULL;
}
@ -3033,9 +3197,7 @@ static void
VIAAdjustFrame(int scrnIndex, int x, int y, int flags)
{
ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
vgaHWPtr hwp = VGAHWPTR(pScrn);
VIAPtr pVia = VIAPTR(pScrn);
CARD32 Base;
DEBUG(xf86DrvMsg(scrnIndex, X_INFO, "VIAAdjustFrame %dx%d\n", x, y));
@ -3173,7 +3335,6 @@ VIASwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
static void
VIADPMS(ScrnInfoPtr pScrn, int mode, int flags)
{
vgaHWPtr hwp = VGAHWPTR(pScrn);
VIAPtr pVia = VIAPTR(pScrn);
VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo;

View File

@ -104,7 +104,7 @@
#define DRIVER_NAME "openchrome"
#define VERSION_MAJOR 0
#define VERSION_MINOR 2
#define PATCHLEVEL 904
#define PATCHLEVEL 905
#define VIA_VERSION ((VERSION_MAJOR<<24) | (VERSION_MINOR<<16) | PATCHLEVEL)
#define VIA_VQ_SIZE (256 * 1024)
@ -127,9 +127,10 @@ typedef struct {
CARD8 SR27, SR28, SR29, SR2A,SR2B,SR2C,SR2D,SR2E;
CARD8 SR2F, SR30, SR31, SR32,SR33,SR34,SR40,SR41;
CARD8 SR42, SR43, SR44, SR45,SR46,SR47,SR48,SR49;
CARD8 SR4A, SR4B, SR4C;
CARD8 SR4A, SR4B, SR4C, SR4D;
/* extended CRTC registers */
CARD8 CR0C, CR0D;
CARD8 CR13, CR30, CR31, CR32, CR33, CR34, CR35, CR36;
CARD8 CR37, CR38, CR39, CR3A, CR40, CR41, CR42, CR43;
CARD8 CR44, CR45, CR46, CR47, CR48, CR49, CR4A;
@ -142,7 +143,7 @@ typedef struct {
} VIARegRec, *VIARegPtr;
/*
* varables that need to be shared among different screens.
* variables that need to be shared among different screens.
*/
typedef struct {
Bool b3DRegsInitialized;
@ -285,6 +286,7 @@ typedef struct _VIA {
Bool agpDMA;
Bool nPOT[VIA_NUM_TEXUNITS];
const unsigned *TwodRegs;
const unsigned *HqvCmeRegs;
ExaDriverPtr exaDriverPtr;
ExaOffscreenArea *exa_scratch;
unsigned int exa_scratch_next;
@ -412,13 +414,15 @@ typedef struct _VIA {
void *cursorMap;
CARD32 cursorOffset;
CARD8 I2CDevices; /* Option */
#ifdef HAVE_DEBUG
Bool disableXvBWCheck;
Bool DumpVGAROM;
Bool PrintVGARegs;
Bool PrintTVRegs;
Bool I2CScan;
#endif /* HAVE_DEBUG */
#endif /* HAVE_DEBUG */
Bool UseLegacyModeSwitch ;
video_via_regs* VideoRegs ;
@ -433,7 +437,7 @@ typedef struct
Bool HasSecondary;
Bool BypassSecondary;
/*These two registers are used to make sure the CRTC2 is
retored before CRTC_EXT, otherwise it could lead to blank screen.*/
restored before CRTC_EXT, otherwise it could lead to blank screen.*/
Bool IsSecondaryRestored;
Bool RestorePrimary;

View File

@ -365,9 +365,18 @@ ViaI2CInit(ScrnInfoPtr pScrn)
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaI2CInit\n"));
pVia->pI2CBus1 = ViaI2CBus1Init(pScrn->scrnIndex);
pVia->pI2CBus2 = ViaI2CBus2Init(pScrn->scrnIndex);
pVia->pI2CBus3 = ViaI2CBus3Init(pScrn->scrnIndex);
if (!pVia->I2CDevices) {
pVia->pI2CBus1 = ViaI2CBus1Init(pScrn->scrnIndex);
pVia->pI2CBus2 = ViaI2CBus2Init(pScrn->scrnIndex);
pVia->pI2CBus3 = ViaI2CBus3Init(pScrn->scrnIndex);
} else {
if (pVia->I2CDevices & VIA_I2C_BUS1)
pVia->pI2CBus1 = ViaI2CBus1Init(pScrn->scrnIndex);
if (pVia->I2CDevices & VIA_I2C_BUS2)
pVia->pI2CBus2 = ViaI2CBus2Init(pScrn->scrnIndex);
if (pVia->I2CDevices & VIA_I2C_BUS3)
pVia->pI2CBus3 = ViaI2CBus3Init(pScrn->scrnIndex);
}
#ifdef HAVE_DEBUG
if (pVia->I2CScan) {

View File

@ -63,6 +63,7 @@ static struct ViaCardIdStruct ViaCardId[] = {
{"Giga-byte 7VM400(A)M", VIA_KM400, 0x1458, 0xD000, VIA_DEVICE_CRT},
{"MSI KM4(A)M-V", VIA_KM400, 0x1462, 0x7061, VIA_DEVICE_CRT}, /* aka "DFI KM400-MLV" */
{"MSI PM8M2-V", VIA_KM400, 0x1462, 0x7071, VIA_DEVICE_CRT},
{"MSI PM8M-V", VIA_KM400, 0x1462, 0x7104, VIA_DEVICE_CRT},
{"MSI KM4(A)M-L", VIA_KM400, 0x1462, 0x7348, VIA_DEVICE_CRT},
{"Abit VA-10 (1)", VIA_KM400, 0x147B, 0x140B, VIA_DEVICE_CRT},
{"Abit VA-10 (2)", VIA_KM400, 0x147B, 0x140C, VIA_DEVICE_CRT},
@ -92,6 +93,7 @@ static struct ViaCardIdStruct ViaCardId[] = {
{"Shuttle FX21", VIA_K8M800, 0x1297, 0x3052, VIA_DEVICE_CRT},
{"Shuttle FX83", VIA_K8M800, 0x1297, 0xF683, VIA_DEVICE_CRT | VIA_DEVICE_TV},
{"Sharp Actius AL27", VIA_K8M800, 0x13BD, 0x1044, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"Sharp Mebius PC-CS30H", VIA_K8M800, 0x13BD, 0x1047, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"Sharp PC-AE30J", VIA_K8M800, 0x13BD, 0x104B, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"Giga-byte GA-K8VM800M", VIA_K8M800, 0x1458, 0xD000, VIA_DEVICE_CRT},
{"MSI K8M Neo-V", VIA_K8M800, 0x1462, 0x0320, VIA_DEVICE_CRT},
@ -114,6 +116,7 @@ static struct ViaCardIdStruct ViaCardId[] = {
{"Packard Bell Easynote B3 800/B3340", VIA_K8M800, 0x1631, 0xC009, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"Packard Bell Imedia 2097", VIA_K8M800, 0x1631, 0xD007, VIA_DEVICE_CRT},
{"Fujitsu-Siemens Amilo K7610", VIA_K8M800, 0x1734, 0x10B3, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"Lenovo ThinkCenter E51 8714", VIA_K8M800, 0x17AA, 0x1008, VIA_DEVICE_CRT},
{"ASRock K8Upgrade-VM800", VIA_K8M800, 0x1849, 0x3108, VIA_DEVICE_CRT},
{"Axper XP-M8VM800", VIA_K8M800, 0x1940, 0xD000, VIA_DEVICE_CRT},
@ -138,8 +141,10 @@ static struct ViaCardIdStruct ViaCardId[] = {
{"Haier A60-440256080BD", VIA_VM800, 0x1019, 0x0F79, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"PCChips P23G", VIA_VM800, 0x1019, 0x1623, VIA_DEVICE_CRT},
{"ECS P4M800PRO-M", VIA_VM800, 0x1019, 0x2122, VIA_DEVICE_CRT},
{"ECS P4M800PRO-M2 (V2.0)", VIA_VM800, 0x1019, 0x2123, VIA_DEVICE_CRT},
{"ECS C7VCM", VIA_VM800, 0x1019, 0xAA2D, VIA_DEVICE_CRT},
{"PCChips V21G", VIA_VM800, 0x1019, 0xAA51, VIA_DEVICE_CRT},
{"Hewlett Packard DX2020", VIA_VM800, 0x103C, 0x3027, VIA_DEVICE_CRT},
{"Asustek P5VDC-MX", VIA_VM800, 0x1043, 0x3344, VIA_DEVICE_CRT},
{"Asustek P5VDC-TVM", VIA_VM800, 0x1043, 0x81CE, VIA_DEVICE_CRT},
{"Foxconn P4M800P7MB-RS2H", VIA_VM800, 0x105B, 0x0CF0, VIA_DEVICE_CRT},
@ -152,6 +157,7 @@ static struct ViaCardIdStruct ViaCardId[] = {
{"MSI PM8PM", VIA_VM800, 0x1462, 0x7222, VIA_DEVICE_CRT},
{"Twinhead M6", VIA_VM800, 0x14FF, 0xA007, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"RoverBook Partner W500", VIA_VM800, 0x1509, 0x4330, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"FIC PTM800Pro LF", VIA_VM800, 0x1509, 0x601A, VIA_DEVICE_CRT},
{"Clevo/RoverBook Voyager V511L", VIA_VM800, 0x1558, 0x0662, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"Clevo M5xxS", VIA_VM800, 0x1558, 0x5406, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"Biostar P4M80-M4 / P4VMA-M", VIA_VM800, 0x1565, 0x1202, VIA_DEVICE_CRT},
@ -170,6 +176,7 @@ static struct ViaCardIdStruct ViaCardId[] = {
{"Asustek M2V-MX SE", VIA_K8M890, 0x1043, 0x8297, VIA_DEVICE_CRT},
{"Foxconn K8M890M2MA-RS2H", VIA_K8M890, 0x105B, 0x0C84, VIA_DEVICE_CRT},
{"Shuttle FX22V1", VIA_K8M890, 0x1297, 0x3080, VIA_DEVICE_CRT},
{"MSI K8M890M2-V", VIA_K8M890, 0x1462, 0x7139, VIA_DEVICE_CRT},
{"MSI K9VGM-V", VIA_K8M890, 0x1462, 0x7253, VIA_DEVICE_CRT},
{"Averatec 226x", VIA_K8M890, 0x14FF, 0xA002, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"Fujitsu/Siemens Amilo La 1703", VIA_K8M890, 0x1734, 0x10D9, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
@ -183,12 +190,15 @@ static struct ViaCardIdStruct ViaCardId[] = {
{"Mitac 8515", VIA_P4M900, 0x1071, 0x8515, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"Medion Notebook MD96483", VIA_P4M900, 0x1071, 0x8615, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"Mitac 8624", VIA_P4M900, 0x1071, 0x8624, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"VIA VT3364 (P4M900)", VIA_P4M900, 0x1106, 0x3371, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"VIA VB8001 Mini-ITX Board (P4M900)", VIA_P4M900, 0x1106, 0x3371, VIA_DEVICE_CRT},
{"Gigabyte GA-VM900M", VIA_P4M900, 0x1458, 0xD000, VIA_DEVICE_CRT},
{"MSI VR321", VIA_P4M900, 0x1462, 0x3355, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"MSI P4M900M / P4M900M2-F/L", VIA_P4M900, 0x1462, 0x7255, VIA_DEVICE_CRT},
{"MSI PM9M-V", VIA_P4M900, 0x1462, 0x7364, VIA_DEVICE_CRT},
{"MSI P4M900M3-L", VIA_P4M900, 0x1462, 0x7387, VIA_DEVICE_CRT},
{"Twinhead H12V", VIA_P4M900, 0x14FF, 0xA00F, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"Twinhead K15V", VIA_P4M900, 0x14FF, 0xA012, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"Semp Informática Notebook IS 1462", VIA_P4M900, 0x1509, 0x1D41, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"Everex NC1501/NC1503", VIA_P4M900, 0x1509, 0x1E30, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"Clevo M660SE", VIA_P4M900, 0x1558, 0x0664, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"Clevo M660SR", VIA_P4M900, 0x1558, 0x0669, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
@ -224,13 +234,23 @@ static struct ViaCardIdStruct ViaCardId[] = {
/*** VX800 ***/
{"VIA Epia M700", VIA_VX800, 0x1106, 0x1122, VIA_DEVICE_CRT},
{"Siragon ML-6200", VIA_VX800, 0x1106, 0x2211, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"Guillemot-Hercules ECafe EC900B", VIA_VX800, 0x1106, 0x3349, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"VIA OpenBook", VIA_VX800, 0x1170, 0x0311, VIA_DEVICE_CRT | VIA_DEVICE_LCD}, /* VIA OpenBook eNote VBE8910 */
{"Samsung NC20", VIA_VX800, 0x144d, 0xc04e, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"FIC CE2A1", VIA_VX800, 0x1509, 0x3002, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"Quanta DreamBook Light IL1", VIA_VX800, 0x152d, 0x0771, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"Lenovo S12", VIA_VX800, 0x17aa, 0x388c, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
/*** VX855 ***/
{"VIA VT8562C", VIA_VX855, 0x1106, 0x5122, VIA_DEVICE_CRT},
{"OLPC XO 1.5", VIA_VX855, 0x152D, 0x0833, VIA_DEVICE_LCD},
/*** VX900 ***/
{"Foxconn L740", VIA_VX900, 0x105B, 0x0CFD, VIA_DEVICE_LCD | VIA_DEVICE_CRT},
{"HP T5550 Thin Client", VIA_VX900, 0x1106, 0x7122, VIA_DEVICE_CRT},
{"ASRock PV530", VIA_VX900, 0x1849, 0x7122, VIA_DEVICE_CRT},
/* keep this */
{NULL, VIA_UNKNOWN, 0x0000, 0x0000, VIA_DEVICE_NONE}

View File

@ -39,6 +39,7 @@ enum VIACHIPTAGS {
VIA_P4M890,
VIA_VX800,
VIA_VX855,
VIA_VX900,
VIA_LAST
};
@ -56,6 +57,7 @@ enum VIACHIPTAGS {
#define PCI_CHIP_VT3327 0x3343 /* P4M890 */
#define PCI_CHIP_VT3353 0x1122 /* VX800 */
#define PCI_CHIP_VT3409 0x5122 /* VX855/VX875 */
#define PCI_CHIP_VT3410 0x7122 /* VX900 */
/* There is some conflicting information about the two major revisions of
* the CLE266, often labelled Ax and Cx. The dividing line seems to be

View File

@ -42,7 +42,7 @@
2^13 X 0.0698uSec [1/14.318MHz] = 8192 X 0.0698uSec =572.1uSec
Timer = Counter x 572 uSec
2. Note:
0.0698 uSec is too small to compute for hardware. So we multify a
0.0698 uSec is too small to compute for hardware. So we multiply a
reference value(2^13) to make it big enough to compute for hardware.
3. Note:
The meaning of the TD0~TD3 are count of the clock.

View File

@ -581,12 +581,12 @@ viaVidCopyInit(char *copyType, ScreenPtr pScreen)
if (VIAAllocLinear(&tmpFbBuffer, pScrn, alignSize + 31))
return libc_YUV42X;
if (NULL == (buf2 = (unsigned char *)xalloc(testSize))) {
if (NULL == (buf2 = (unsigned char *)malloc(testSize))) {
VIAFreeLinear(&tmpFbBuffer);
return libc_YUV42X;
}
if (NULL == (buf3 = (unsigned char *)xalloc(testSize))) {
xfree(buf2);
if (NULL == (buf3 = (unsigned char *)malloc(testSize))) {
free(buf2);
VIAFreeLinear(&tmpFbBuffer);
return libc_YUV42X;
}
@ -642,8 +642,8 @@ viaVidCopyInit(char *copyType, ScreenPtr pScreen)
curData->mName);
}
}
xfree(buf3);
xfree(buf2);
free(buf3);
free(buf2);
VIAFreeLinear(&tmpFbBuffer);
xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
"Using %s YUV42X copy for %s.\n",

View File

@ -308,11 +308,14 @@ ViaDFPDetect(ScrnInfoPtr pScrn)
xf86MonPtr monPtr = NULL;
if (pVia->pI2CBus2)
monPtr = xf86DoEDID_DDC2(pScrn->scrnIndex, pVia->pI2CBus2);
monPtr = xf86DoEEDID(pScrn->scrnIndex, pVia->pI2CBus2, TRUE);
if (monPtr) {
xf86PrintEDID(monPtr);
xf86SetDDCproperties(pScrn, monPtr);
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
"DDC pI2CBus2 detected a %s\n", DIGITAL(monPtr->features.input_type) ?
"DFP" : "CRT"));
return TRUE;
} else {
return FALSE;
@ -380,6 +383,7 @@ ViaOutputsDetect(ScrnInfoPtr pScrn)
case VIA_CX700:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
if (ViaDFPDetect(pScrn)) {
pBIOSInfo->DfpPresent = TRUE;
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
@ -514,6 +518,7 @@ ViaOutputsSelect(ScrnInfoPtr pScrn)
case VIA_CX700:
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
pVia->pBIOSInfo->Lvds->IsActive = TRUE ;
break;
}
@ -859,6 +864,9 @@ ViaGetMemoryBandwidth(ScrnInfoPtr pScrn)
case VIA_MEM_DDR533:
case VIA_MEM_DDR667:
return VIA_BW_DDR667;
case VIA_MEM_DDR800:
case VIA_MEM_DDR1066:
return VIA_BW_DDR1066;
default:
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"ViaBandwidthAllowed: Unknown memory type: %d\n", pVia->MemClk);
@ -999,8 +1007,8 @@ ViaSetDotclock(ScrnInfoPtr pScrn, CARD32 clock, int base, int probase)
dn = pll.params.dn;
dm = pll.params.dm;
/* The VX855 does not modify dm/dn, but earlier chipsets do. */
if (pVia->Chipset != VIA_VX855) {
/* The VX855 and VX900 do not modify dm/dn, but earlier chipsets do. */
if ((pVia->Chipset != VIA_VX855) && (pVia->Chipset != VIA_VX900)) {
dm -= 2;
dn -= 2;
}
@ -1078,7 +1086,7 @@ VIASetLCDMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
pBIOSInfo->Clock = Table.InitTb.LCDClk_12Bit;
else {
pBIOSInfo->Clock = Table.InitTb.VClk_12Bit;
/* for some reason still to be defined this is neccessary */
/* for some reason still to be defined this is necessary */
ViaSetSecondaryDotclock(pScrn, Table.InitTb.LCDClk_12Bit);
}
} else {
@ -1708,7 +1716,7 @@ ViaModeSet(ScrnInfoPtr pScrn, DisplayModePtr mode)
ViaModeSecondCRTC(pScrn, mode);
ViaSecondDisplayChannelEnable(pScrn);
}
if (pBIOSInfo->FirstCRTC->IsActive) {
if (pBIOSInfo->CrtActive) {
/* CRT on FirstCRTC */
@ -1734,6 +1742,15 @@ ViaModeSet(ScrnInfoPtr pScrn, DisplayModePtr mode)
ViaDisplayDisableCRT(pScrn);
}
// Enable panel support on VM800, K8M800 and VX900 chipset
// See: https://bugs.launchpad.net/openchrome/+bug/186103
if (pBIOSInfo->Panel->IsActive &&
((pVia->Chipset == VIA_VM800) ||
(pVia->Chipset == VIA_K8M800) ||
(pVia->Chipset == VIA_VX900) )) {
pBIOSInfo->FirstCRTC->IsActive=TRUE;
ViaModeFirstCRTC(pScrn, mode);
}
if (pBIOSInfo->Simultaneous->IsActive) {
ViaDisplayEnableSimultaneous(pScrn);
} else {

View File

@ -32,8 +32,9 @@
*/
#define VIA_BW_MIN 74000000 /* > 640x480@60Hz@32bpp */
#define VIA_BW_DDR200 394000000
#define VIA_BW_DDR400 498000000 /* > 1920x1080@60Hz@32bpp */
#define VIA_BW_DDR400 553000000 /* > 1920x1200@60Hz@32bpp */
#define VIA_BW_DDR667 922000000
#define VIA_BW_DDR1066 922000000
union pllparams {
struct {
@ -54,50 +55,50 @@ static struct ViaDotClock {
CARD16 UniChrome;
union pllparams UniChromePro;
} ViaDotClocks[] = {
{ 25200, 0x513C, /* 0xa79004 */ { 1, 4, 6, 169 } },
{ 25312, 0xC763, /* 0xc49005 */ { 1, 4, 7, 198 } },
{ 26591, 0x471A, /* 0xce9005 */ { 1, 4, 7, 208 } },
{ 31500, 0xC558, /* 0xae9003 */ { 1, 4, 5, 176 } },
{ 31704, 0x471F, /* 0xaf9002 */ { 1, 4, 4, 177 } },
{ 32663, 0xC449, /* 0x479000 */ { 1, 4, 2, 73 } },
{ 33750, 0x4721, /* 0x959002 */ { 1, 4, 4, 151 } },
{ 35500, 0x5877, /* 0x759001 */ { 1, 4, 3, 119 } },
{ 36000, 0x5879, /* 0x9f9002 */ { 1, 4, 4, 161 } },
{ 39822, 0xC459, /* 0x578c02 */ { 1, 3, 4, 89 } },
{ 40000, 0x515F, /* 0x848c04 */ { 1, 3, 6, 134 } },
{ 41164, 0x4417, /* 0x2c8c00 */ { 1, 3, 2, 46 } },
{ 46981, 0x5069, /* 0x678c02 */ { 1, 3, 4, 105 } },
{ 49500, 0xC353, /* 0xa48c04 */ { 3, 3, 5, 138 } },
{ 50000, 0xC354, /* 0x368c00 */ { 1, 3, 2, 56 } },
{ 56300, 0x4F76, /* 0x3d8c00 */ { 1, 3, 2, 63 } },
{ 57275, 0, /* 0x3e8c00 */ { 1, 3, 5, 157 } }, /* For XO 1.5 no need for a unichrome clock */
{ 57284, 0x4E70, /* 0x3e8c00 */ { 1, 3, 2, 64 } },
{ 64995, 0x0D3B, /* 0x6b8c01 */ { 1, 3, 3, 109 } },
{ 65000, 0x0D3B, /* 0x6b8c01 */ { 1, 3, 3, 109 } }, /* Slightly unstable on PM800 */
{ 65028, 0x866D, /* 0x6b8c01 */ { 1, 3, 3, 109 } },
{ 74480, 0x156E, /* 0x288800 */ { 1, 2, 2, 42 } },
{ 75000, 0x156E, /* 0x288800 */ { 1, 2, 2, 42 } },
{ 78800, 0x442C, /* 0x2a8800 */ { 1, 2, 2, 44 } },
{ 81135, 0x0622, /* 0x428801 */ { 1, 2, 3, 68 } },
{ 81613, 0x4539, /* 0x708803 */ { 1, 2, 5, 114 } },
{ 94500, 0x4542, /* 0x4d8801 */ { 1, 2, 3, 79 } },
{ 108000, 0x0B53, /* 0x778802 */ { 1, 2, 4, 121 } },
{ 108280, 0x4879, /* 0x778802 */ { 1, 2, 4, 121 } },
{ 122000, 0x0D6F, /* 0x428800 */ { 1, 2, 2, 68 } },
{ 122726, 0x073C, /* 0x878802 */ { 1, 2, 4, 137 } },
{ 135000, 0x0742, /* 0x6f8801 */ { 1, 2, 3, 113 } },
{ 148500, 0x0853, /* 0x518800 */ { 1, 2, 2, 83 } },
{ 155800, 0x0857, /* 0x558402 */ { 1, 1, 4, 87 } },
{ 157500, 0x422C, /* 0x2a8400 */ { 1, 1, 2, 44 } },
{ 161793, 0x4571, /* 0x6f8403 */ { 1, 1, 5, 113 } },
{ 162000, 0x0A71, /* 0x6f8403 */ { 1, 1, 5, 113 } },
{ 175500, 0x4231, /* 0x2f8400 */ { 1, 1, 2, 49 } },
{ 189000, 0x0542, /* 0x4d8401 */ { 1, 1, 3, 79 } },
{ 202500, 0x0763, /* 0x6F8402 */ { 1, 1, 4, 113 } },
{ 204800, 0x0764, /* 0x548401 */ { 1, 1, 3, 86 } },
{ 218300, 0x043D, /* 0x3b8400 */ { 1, 1, 2, 61 } },
{ 229500, 0x0660, /* 0x3e8400 */ { 1, 1, 2, 64 } }, /* Not tested on Pro } */
{ 0, 0, { 0, 0, 0, 0 } }
{ 25200, 0x513C, /* 0xa79004 */ { { 1, 4, 6, 169 } } },
{ 25312, 0xC763, /* 0xc49005 */ { { 1, 4, 7, 198 } } },
{ 26591, 0x471A, /* 0xce9005 */ { { 1, 4, 7, 208 } } },
{ 31500, 0xC558, /* 0xae9003 */ { { 1, 4, 5, 176 } } },
{ 31704, 0x471F, /* 0xaf9002 */ { { 1, 4, 4, 177 } } },
{ 32663, 0xC449, /* 0x479000 */ { { 1, 4, 2, 73 } } },
{ 33750, 0x4721, /* 0x959002 */ { { 1, 4, 4, 151 } } },
{ 35500, 0x5877, /* 0x759001 */ { { 1, 4, 3, 119 } } },
{ 36000, 0x5879, /* 0x9f9002 */ { { 1, 4, 4, 161 } } },
{ 39822, 0xC459, /* 0x578c02 */ { { 1, 3, 4, 89 } } },
{ 40000, 0x515F, /* 0x848c04 */ { { 1, 3, 6, 134 } } },
{ 41164, 0x4417, /* 0x2c8c00 */ { { 1, 3, 2, 46 } } },
{ 46981, 0x5069, /* 0x678c02 */ { { 1, 3, 4, 105 } } },
{ 49500, 0xC353, /* 0xa48c04 */ { { 3, 3, 5, 138 } } },
{ 50000, 0xC354, /* 0x368c00 */ { { 1, 3, 2, 56 } } },
{ 56300, 0x4F76, /* 0x3d8c00 */ { { 1, 3, 2, 63 } } },
{ 57275, 0, /* 0x3e8c00 */ { { 1, 3, 5, 157 } } }, /* For XO 1.5 no need for a unichrome clock */
{ 57284, 0x4E70, /* 0x3e8c00 */ { { 1, 3, 2, 64 } } },
{ 64995, 0x0D3B, /* 0x6b8c01 */ { { 1, 3, 3, 109 } } },
{ 65000, 0x0D3B, /* 0x6b8c01 */ { { 1, 3, 3, 109 } } }, /* Slightly unstable on PM800 */
{ 65028, 0x866D, /* 0x6b8c01 */ { { 1, 3, 3, 109 } } },
{ 74480, 0x156E, /* 0x288800 */ { { 1, 2, 2, 42 } } },
{ 75000, 0x156E, /* 0x288800 */ { { 1, 2, 2, 42 } } },
{ 78800, 0x442C, /* 0x2a8800 */ { { 1, 2, 2, 44 } } },
{ 81135, 0x0622, /* 0x428801 */ { { 1, 2, 3, 68 } } },
{ 81613, 0x4539, /* 0x708803 */ { { 1, 2, 5, 114 } } },
{ 94500, 0x4542, /* 0x4d8801 */ { { 1, 2, 3, 79 } } },
{ 108000, 0x0B53, /* 0x778802 */ { { 1, 2, 4, 121 } } },
{ 108280, 0x4879, /* 0x778802 */ { { 1, 2, 4, 121 } } },
{ 122000, 0x0D6F, /* 0x428800 */ { { 1, 2, 2, 68 } } },
{ 122726, 0x073C, /* 0x878802 */ { { 1, 2, 4, 137 } } },
{ 135000, 0x0742, /* 0x6f8801 */ { { 1, 2, 3, 113 } } },
{ 148500, 0x0853, /* 0x518800 */ { { 1, 2, 2, 83 } } },
{ 155800, 0x0857, /* 0x558402 */ { { 1, 1, 4, 87 } } },
{ 157500, 0x422C, /* 0x2a8400 */ { { 1, 1, 2, 44 } } },
{ 161793, 0x4571, /* 0x6f8403 */ { { 1, 1, 5, 113 } } },
{ 162000, 0x0A71, /* 0x6f8403 */ { { 1, 1, 5, 113 } } },
{ 175500, 0x4231, /* 0x2f8400 */ { { 1, 1, 2, 49 } } },
{ 189000, 0x0542, /* 0x4d8401 */ { { 1, 1, 3, 79 } } },
{ 202500, 0x0763, /* 0x6F8402 */ { { 1, 1, 4, 113 } } },
{ 204800, 0x0764, /* 0x548401 */ { { 1, 1, 3, 86 } } },
{ 218300, 0x043D, /* 0x3b8400 */ { { 1, 1, 2, 61 } } },
{ 229500, 0x0660, /* 0x3e8400 */ { { 1, 1, 2, 64 } } }, /* Not tested on Pro } */
{ 0, 0, { { 0, 0, 0, 0 } } }
};
/*
@ -131,7 +132,7 @@ static DisplayModeRec ViaPanelModes[] = {
{ MODEPREFIX("856x480"), 31704, 856, 872, 960, 1064, 0, 480, 480, 483, 497, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX },
{ MODEPREFIX("1024x512"), 41164, 1024, 1056, 1160, 1296, 0, 512, 512, 515, 531, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX },
{ MODEPREFIX("1024x576"), 46981, 1024, 1064, 1168, 1312, 0, 576, 576, 579, 597, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX },
{ MODEPREFIX("1024x600"), 48960, 1024, 1064, 1168, 1312, 0, 600, 601, 604, 622, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX },
{ MODEPREFIX("1024x600"), 48960, 1024, 1048, 1152, 1312, 0, 600, 601, 604, 630, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX },
{ MODEPREFIX("1024x768"), 65028, 1024, 1048, 1184, 1344, 0, 768, 770, 776, 806, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX },
{ MODEPREFIX("1152x864"), 81613, 1152, 1216, 1336, 1520, 0, 864, 864, 867, 895, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX },
{ MODEPREFIX("1280x768"), 81135, 1280, 1328, 1440, 1688, 0, 768, 770, 776, 802, 0, V_PHSYNC | V_NVSYNC, MODESUFFIX },

View File

@ -45,17 +45,17 @@ static ViaPanelModeRec ViaPanelNativeModes[] = {
{1280, 768},
{1280, 1024},
{1400, 1050},
{1600, 1200}, /* 0x6 Resolution 1440x900 */
{1600, 1200}, /* 0x6 */
{1280, 800}, /* 0x7 Resolution 1280x800 (Samsung NC20) */
{800, 480}, /* 0x8 For Quanta 800x480 */
{1024, 600}, /* 0x9 Resolution 1024x600 (for HP 2133) */
{1366, 768}, /* 0xA Resolution 1366x768 */
{1920, 1080},
{1920, 1200},
{1280, 1024}, /* 0xD Need to be fixed to 1920x1200 */
{1440, 900}, /* 0xE Need to be fixed to 640x240 */
{1280, 1024}, /* 0xD */
{1440, 900}, /* 0xE */
{1280, 720}, /* 0xF 480x640 */
{1200, 900}, /* 0x10 For Panasonic 1280x768 18bit Dual-Channel Panel */
{1200, 900}, /* 0x10 For OLPC 1.5 */
{1360, 768}, /* 0x11 Resolution 1360X768 */
{1024, 768}, /* 0x12 Resolution 1024x768 */
{800, 480} /* 0x13 General 8x4 panel use this setting */
@ -147,6 +147,9 @@ ViaPanelScaleDisable(ScrnInfoPtr pScrn)
vgaHWPtr hwp = VGAHWPTR(pScrn);
ViaCrtcMask(hwp, 0x79, 0x00, 0x01);
/* Disable VX900 down scaling */
if (pVia->Chipset == VIA_VX900)
ViaCrtcMask(hwp, 0x89, 0x00, 0x01);
if (pVia->Chipset != VIA_CLE266 && pVia->Chipset != VIA_KM400)
ViaCrtcMask(hwp, 0xA2, 0x00, 0xC8);
}
@ -171,12 +174,18 @@ ViaPanelScale(ScrnInfoPtr pScrn, int resWidth, int resHeight,
resWidth, resHeight, panelWidth, panelHeight));
if (resWidth < panelWidth) {
/* FIXME: It is different for chipset < K8M800 */
horScalingFactor = ((resWidth - 1) * 4096) / (panelWidth - 1);
/* Load Horizontal Scaling Factor */
if (pVia->Chipset != VIA_CLE266 && pVia->Chipset != VIA_KM400) {
horScalingFactor = ((resWidth - 1) * 4096) / (panelWidth - 1);
/* Horizontal scaling enabled */
cra2 = 0xC0;
cr9f = horScalingFactor & 0x0003; /* HSCaleFactor[1:0] at CR9F[1:0] */
} else {
/* TODO: Need testing */
horScalingFactor = ((resWidth - 1) * 1024) / (panelWidth - 1);
}
/* Horizontal scaling enabled */
cra2 = 0xC0;
cr9f = horScalingFactor & 0x0003; /* HSCaleFactor[1:0] at CR9F[1:0] */
cr77 = (horScalingFactor & 0x03FC) >> 2; /* HSCaleFactor[9:2] at CR77[7:0] */
cr79 = (horScalingFactor & 0x0C00) >> 10; /* HSCaleFactor[11:10] at CR79[5:4] */
cr79 <<= 4;
@ -184,11 +193,18 @@ ViaPanelScale(ScrnInfoPtr pScrn, int resWidth, int resHeight,
}
if (resHeight < panelHeight) {
verScalingFactor = ((resHeight - 1) * 2048) / (panelHeight - 1);
/* Load Vertical Scaling Factor */
if (pVia->Chipset != VIA_CLE266 && pVia->Chipset != VIA_KM400) {
verScalingFactor = ((resHeight - 1) * 2048) / (panelHeight - 1);
/* Vertical scaling enabled */
cra2 |= 0x08;
cr79 |= ((verScalingFactor & 0x0001) << 3); /* VSCaleFactor[0] at CR79[3] */
} else {
/* TODO: Need testing */
verScalingFactor = ((resHeight - 1) * 1024) / (panelHeight - 1);
}
/* Vertical scaling enabled */
cra2 |= 0x08;
cr79 |= ((verScalingFactor & 0x0001) << 3); /* VSCaleFactor[0] at CR79[3] */
cr78 |= (verScalingFactor & 0x01FE) >> 1; /* VSCaleFactor[8:1] at CR78[7:0] */
cr79 |= ((verScalingFactor & 0x0600) >> 9) << 6; /* VSCaleFactor[10:9] at CR79[7:6] */
scaling = TRUE;
@ -203,12 +219,18 @@ ViaPanelScale(ScrnInfoPtr pScrn, int resWidth, int resHeight,
ViaCrtcMask(hwp, 0x77, cr77, 0xFF);
ViaCrtcMask(hwp, 0x78, cr78, 0xFF);
ViaCrtcMask(hwp, 0x79, cr79, 0xF8);
ViaCrtcMask(hwp, 0x9F, cr9f, 0x03);
if (pVia->Chipset != VIA_CLE266 && pVia->Chipset != VIA_KM400) {
ViaCrtcMask(hwp, 0x9F, cr9f, 0x03);
}
ViaCrtcMask(hwp, 0x79, 0x03, 0x03);
} else
} else {
/* Disable panel scale */
ViaCrtcMask(hwp, 0x79, 0x00, 0x01);
ViaCrtcMask(hwp, 0xA2, cra2, 0xC8);
}
if (pVia->Chipset != VIA_CLE266 && pVia->Chipset != VIA_KM400) {
ViaCrtcMask(hwp, 0xA2, cra2, 0xC8);
}
/* Horizontal scaling selection: interpolation */
// ViaCrtcMask(hwp, 0x79, 0x02, 0x02);
@ -233,14 +255,14 @@ ViaPanelGetNativeDisplayMode(ScrnInfoPtr pScrn)
if (panelMode->Width && panelMode->Height) {
/* TODO: fix refresh rate and check malloc */
/* TODO: fix refresh rate */
DisplayModePtr p = malloc( sizeof(DisplayModeRec) ) ;
memset(p, 0, sizeof(DisplayModeRec));
float refresh = 60.0f ;
/* The following code is borrowed from xf86SetModeCrtc. */
if (p) {
memset(p, 0, sizeof(DisplayModeRec));
float refresh = 60.0f ;
/* The following code is borrowed from xf86SetModeCrtc. */
viaTimingCvt(p, panelMode->Width, panelMode->Height, refresh, FALSE, TRUE);
p->CrtcHDisplay = p->HDisplay;
p->CrtcHSyncStart = p->HSyncStart;
@ -256,9 +278,13 @@ ViaPanelGetNativeDisplayMode(ScrnInfoPtr pScrn)
p->CrtcVBlankEnd = max(p->CrtcVSyncEnd, p->CrtcVTotal);
p->CrtcHBlankStart = min(p->CrtcHSyncStart, p->CrtcHDisplay);
p->CrtcHBlankEnd = max(p->CrtcHSyncEnd, p->CrtcHTotal);
pVia->pBIOSInfo->Panel->NativeDisplayMode = p;
} else {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"Out of memory. Size: %d bytes\n", sizeof(DisplayModeRec));
}
pVia->pBIOSInfo->Panel->NativeDisplayMode = p;
} else {
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
"Invalid panel dimension (%dx%d)\n", panelMode->Width,
@ -282,10 +308,7 @@ ViaPanelPreInit(ScrnInfoPtr pScrn)
Bool ret;
ret = ViaPanelGetSizeFromDDCv1(pScrn, &width, &height);
/*
if (!ret)
ret = ViaPanelGetSizeFromDDCv2(pScrn, &width);
*/
if (ret) {
panel->NativeModeIndex = ViaPanelLookUpModeIndex(width, height);
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaPanelLookUpModeIndex, Width %d, Height %d, NativeModeIndex%d\n", width, height, panel->NativeModeIndex));
@ -333,28 +356,28 @@ ViaPanelCenterMode(DisplayModePtr centerMode, DisplayModePtr panelMode,
/*
* Try to interprete EDID ourselves.
* Try to interpret EDID ourselves.
*/
Bool
ViaPanelGetSizeFromEDID(ScrnInfoPtr pScrn, xf86MonPtr pMon,
int *width, int *height)
{
int i, max = 0, vsize;
int i, max_hsize = 0, vsize = 0;
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAGetPanelSizeFromEDID\n"));
/* !!! Why are we not checking VESA modes? */
/* checking standard timings */
for (i = 0; i < 8; i++)
for (i = 0; i < STD_TIMINGS; i++)
if ((pMon->timings2[i].hsize > 256)
&& (pMon->timings2[i].hsize > max)) {
max = pMon->timings2[i].hsize;
&& (pMon->timings2[i].hsize > max_hsize)) {
max_hsize = pMon->timings2[i].hsize;
vsize = pMon->timings2[i].vsize;
}
if (max != 0) {
*width = max;
if (max_hsize != 0) {
*width = max_hsize;
*height = vsize;
return TRUE;
}
@ -369,14 +392,14 @@ ViaPanelGetSizeFromEDID(ScrnInfoPtr pScrn, xf86MonPtr pMon,
struct detailed_timings timing = pMon->det_mon[i].section.d_timings;
/* ignore v_active for now */
if ((timing.clock > 15000000) && (timing.h_active > max)) {
max = timing.h_active;
if ((timing.clock > 15000000) && (timing.h_active > max_hsize)) {
max_hsize = timing.h_active;
vsize = timing.v_active;
}
}
if (max != 0) {
*width = max;
if (max_hsize != 0) {
*width = max_hsize;
*height = vsize;
return TRUE;
}
@ -386,7 +409,6 @@ ViaPanelGetSizeFromEDID(ScrnInfoPtr pScrn, xf86MonPtr pMon,
Bool
ViaPanelGetSizeFromDDCv1(ScrnInfoPtr pScrn, int *width, int *height)
{
VIAPtr pVia = VIAPTR(pScrn);
xf86MonPtr pMon;
@ -396,7 +418,7 @@ ViaPanelGetSizeFromDDCv1(ScrnInfoPtr pScrn, int *width, int *height)
if (!xf86I2CProbeAddress(pVia->pI2CBus2, 0xA0))
return FALSE;
pMon = xf86DoEDID_DDC2(pScrn->scrnIndex, pVia->pI2CBus2);
pMon = xf86DoEEDID(pScrn->scrnIndex, pVia->pI2CBus2, TRUE);
if (!pMon)
return FALSE;

View File

@ -65,6 +65,31 @@
#define IN_VIDEO_DISPLAY (*((unsigned long volatile *)(pVia->VidMapBase+V_FLAGS))&VBI_STATUS)
#define VIA_FIRETIMEOUT 40000
enum HQV_CME_Regs {
HQV_SDO_CTRL1,
HQV_SDO_CTRL2,
HQV_SDO_CTRL3,
HQV_SDO_CTRL4
};
/* register offsets for VT3553/VX800 */
static const unsigned hqv_cme_regs[] = {
[HQV_SDO_CTRL1] = HQV_SRC_DATA_OFFSET_CONTROL1,
[HQV_SDO_CTRL2] = HQV_SRC_DATA_OFFSET_CONTROL2,
[HQV_SDO_CTRL3] = HQV_SRC_DATA_OFFSET_CONTROL3,
[HQV_SDO_CTRL4] = HQV_SRC_DATA_OFFSET_CONTROL4
};
/* register hqv offsets for new VT3409/VX855 */
static const unsigned hqv_cme_regs_409[] = {
[HQV_SDO_CTRL1] = HQV_SRC_DATA_OFFSET_CTRL1_409,
[HQV_SDO_CTRL2] = HQV_SRC_DATA_OFFSET_CTRL2_409,
[HQV_SDO_CTRL3] = HQV_SRC_DATA_OFFSET_CTRL3_409,
[HQV_SDO_CTRL4] = HQV_SRC_DATA_OFFSET_CTRL4_409
};
#define HQV_CME_REG(HWDiff, name) (HWDiff)->HQVCmeRegs[name]
static void
viaWaitVideoCommandFire(VIAPtr pVia)
{
@ -88,6 +113,7 @@ viaWaitHQVFlip(VIAPtr pVia)
{
unsigned long proReg = 0;
CARD32 volatile *pdwState;
unsigned count = 50000;
if (pVia->ChipId == PCI_CHIP_VT3259
&& !(pVia->swov.gdwVideoFlagSW & VIDEO_1_INUSE))
@ -96,10 +122,9 @@ viaWaitHQVFlip(VIAPtr pVia)
pdwState = (CARD32 volatile *)(pVia->VidMapBase + (HQV_CONTROL + proReg));
if (pVia->VideoEngine == VIDEO_ENGINE_CME) {
// while (*pdwState & (HQV_SUBPIC_FLIP | HQV_SW_FLIP)) ;
while (*pdwState & HQV_SUBPIC_FLIP);
while (--count && (*pdwState & HQV_SUBPIC_FLIP));
} else {
while (!(*pdwState & HQV_FLIP_STATUS)) ;
while (--count && !(*pdwState & HQV_FLIP_STATUS)) ;
}
}
@ -109,8 +134,9 @@ viaWaitHQVFlipClear(VIAPtr pVia, unsigned long dwData)
CARD32 volatile *pdwState =
(CARD32 volatile *)(pVia->VidMapBase + HQV_CONTROL);
*pdwState = dwData;
unsigned count = 50000;
while ((*pdwState & HQV_FLIP_STATUS)) {
while (--count && (*pdwState & HQV_FLIP_STATUS)) {
VIDOutD(HQV_CONTROL, *pdwState | HQV_FLIP_STATUS);
}
}
@ -126,6 +152,7 @@ viaWaitHQVDone(VIAPtr pVia)
{
CARD32 volatile *pdwState;
unsigned long proReg = 0;
unsigned count = 50000;
if (pVia->ChipId == PCI_CHIP_VT3259
&& !(pVia->swov.gdwVideoFlagSW & VIDEO_1_INUSE))
@ -133,7 +160,7 @@ viaWaitHQVDone(VIAPtr pVia)
pdwState = (CARD32 volatile *)(pVia->VidMapBase + (HQV_CONTROL + proReg));
if (pVia->swov.MPEG_ON) {
while ((*pdwState & HQV_SW_FLIP)) ;
while (--count && (*pdwState & HQV_SW_FLIP)) ;
}
}
@ -179,12 +206,14 @@ ResetVidRegBuffer(VIAPtr pVia)
static void
SaveVideoRegister(VIAPtr pVia, CARD32 index, CARD32 data)
{
if (pVia->VidRegCursor >= VIDREG_BUFFER_SIZE) {
DBG_DD(ErrorF("SaveVideoRegister: Out of video register space flushing"));
FlushVidRegBuffer(pVia);
ResetVidRegBuffer(pVia);
}
pVia->VidRegBuffer[pVia->VidRegCursor++] = index;
pVia->VidRegBuffer[pVia->VidRegCursor++] = data;
if (pVia->VidRegCursor > VIDREG_BUFFER_SIZE) {
DBG_DD(ErrorF("SaveVideoRegister: Out of video register space"));
}
}
/*
@ -224,6 +253,7 @@ VIAVidHWDiffInit(ScrnInfoPtr pScrn)
HWDiff->dwHQVDisablePatch = VID_HWDIFF_TRUE;
HWDiff->dwNeedV1Prefetch = VID_HWDIFF_FALSE;
}
HWDiff->dwNewScaleCtl = VID_HWDIFF_FALSE;
break;
case VIA_KM400:
HWDiff->dwThreeHQVBuffer = VID_HWDIFF_TRUE;
@ -232,6 +262,7 @@ VIAVidHWDiffInit(ScrnInfoPtr pScrn)
HWDiff->dwHQVInitPatch = VID_HWDIFF_FALSE;
HWDiff->dwHQVDisablePatch = VID_HWDIFF_TRUE;
HWDiff->dwNeedV1Prefetch = VID_HWDIFF_FALSE;
HWDiff->dwNewScaleCtl = VID_HWDIFF_FALSE;
break;
case VIA_K8M800:
HWDiff->dwThreeHQVBuffer = VID_HWDIFF_TRUE;
@ -240,6 +271,7 @@ VIAVidHWDiffInit(ScrnInfoPtr pScrn)
HWDiff->dwHQVInitPatch = VID_HWDIFF_FALSE;
HWDiff->dwHQVDisablePatch = VID_HWDIFF_TRUE;
HWDiff->dwNeedV1Prefetch = VID_HWDIFF_FALSE;
HWDiff->dwNewScaleCtl = VID_HWDIFF_FALSE;
break;
case VIA_PM800:
HWDiff->dwThreeHQVBuffer = VID_HWDIFF_TRUE;
@ -248,6 +280,8 @@ VIAVidHWDiffInit(ScrnInfoPtr pScrn)
HWDiff->dwHQVInitPatch = VID_HWDIFF_FALSE;
HWDiff->dwHQVDisablePatch = VID_HWDIFF_FALSE;
HWDiff->dwNeedV1Prefetch = VID_HWDIFF_FALSE;
HWDiff->dwNewScaleCtl = VID_HWDIFF_FALSE;
HWDiff->HQVCmeRegs = hqv_cme_regs;
break;
case VIA_VM800:
case VIA_P4M900:
@ -257,6 +291,8 @@ VIAVidHWDiffInit(ScrnInfoPtr pScrn)
HWDiff->dwHQVInitPatch = VID_HWDIFF_FALSE;
HWDiff->dwHQVDisablePatch = VID_HWDIFF_TRUE;
HWDiff->dwNeedV1Prefetch = VID_HWDIFF_FALSE;
HWDiff->dwNewScaleCtl = VID_HWDIFF_FALSE;
HWDiff->HQVCmeRegs = hqv_cme_regs;
break;
case VIA_K8M890:
HWDiff->dwThreeHQVBuffer = VID_HWDIFF_TRUE;
@ -265,6 +301,8 @@ VIAVidHWDiffInit(ScrnInfoPtr pScrn)
HWDiff->dwHQVInitPatch = VID_HWDIFF_FALSE;
HWDiff->dwHQVDisablePatch = VID_HWDIFF_TRUE;
HWDiff->dwNeedV1Prefetch = VID_HWDIFF_TRUE;
HWDiff->dwNewScaleCtl = VID_HWDIFF_FALSE;
HWDiff->HQVCmeRegs = hqv_cme_regs;
break;
case VIA_P4M890:
HWDiff->dwThreeHQVBuffer = VID_HWDIFF_TRUE;
@ -273,6 +311,8 @@ VIAVidHWDiffInit(ScrnInfoPtr pScrn)
HWDiff->dwHQVInitPatch = VID_HWDIFF_FALSE;
HWDiff->dwHQVDisablePatch = VID_HWDIFF_TRUE;
HWDiff->dwNeedV1Prefetch = VID_HWDIFF_FALSE;
HWDiff->dwNewScaleCtl = VID_HWDIFF_FALSE;
HWDiff->HQVCmeRegs = hqv_cme_regs;
break;
case VIA_CX700:
HWDiff->dwThreeHQVBuffer = VID_HWDIFF_TRUE;
@ -281,8 +321,19 @@ VIAVidHWDiffInit(ScrnInfoPtr pScrn)
HWDiff->dwHQVInitPatch = VID_HWDIFF_FALSE;
HWDiff->dwHQVDisablePatch = VID_HWDIFF_FALSE;
HWDiff->dwNeedV1Prefetch = VID_HWDIFF_FALSE;
HWDiff->dwNewScaleCtl = VID_HWDIFF_FALSE;
HWDiff->HQVCmeRegs = hqv_cme_regs;
break;
case VIA_VX800:
HWDiff->dwThreeHQVBuffer = VID_HWDIFF_TRUE;
HWDiff->dwHQVFetchByteUnit = VID_HWDIFF_TRUE;
HWDiff->dwSupportTwoColorKey = VID_HWDIFF_TRUE;
HWDiff->dwHQVInitPatch = VID_HWDIFF_FALSE;
HWDiff->dwHQVDisablePatch = VID_HWDIFF_FALSE;
HWDiff->dwNeedV1Prefetch = VID_HWDIFF_FALSE;
HWDiff->dwNewScaleCtl = VID_HWDIFF_TRUE;
HWDiff->HQVCmeRegs = hqv_cme_regs;
break;
case VIA_VX855:
HWDiff->dwThreeHQVBuffer = VID_HWDIFF_TRUE;
HWDiff->dwHQVFetchByteUnit = VID_HWDIFF_TRUE;
@ -290,6 +341,8 @@ VIAVidHWDiffInit(ScrnInfoPtr pScrn)
HWDiff->dwHQVInitPatch = VID_HWDIFF_FALSE;
HWDiff->dwHQVDisablePatch = VID_HWDIFF_FALSE;
HWDiff->dwNeedV1Prefetch = VID_HWDIFF_FALSE;
HWDiff->dwNewScaleCtl = VID_HWDIFF_TRUE;
HWDiff->HQVCmeRegs = hqv_cme_regs_409;
break;
default:
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
@ -339,6 +392,7 @@ viaOverlayGetV1V3Format(VIAPtr pVia, int vport, /* 1 or 3, as in V1 or V3 */
if (videoFlag & VIDEO_HQV_INUSE) {
switch (pVia->swov.SrcFourCC) {
case FOURCC_YV12:
case FOURCC_I420:
case FOURCC_XVMC:
*pHQVCtl |= HQV_YUV420;
break;
@ -368,6 +422,7 @@ viaOverlayGetV1V3Format(VIAPtr pVia, int vport, /* 1 or 3, as in V1 or V3 */
} else {
switch (pVia->swov.SrcFourCC) {
case FOURCC_YV12:
case FOURCC_I420:
case FOURCC_XVMC:
if (vport == 1) {
*pVidCtl |= V1_YCbCr420;
@ -450,6 +505,7 @@ viaOverlayGetSrcStartAddress(VIAPtr pVia,
break;
case FOURCC_YV12:
case FOURCC_I420:
case FOURCC_XVMC:
if (videoFlag & VIDEO_HQV_INUSE)
@ -509,10 +565,12 @@ viaOverlayHQVCalcZoomWidth(VIAPtr pVia,
unsigned long *pMiniCtl,
unsigned long *pHQVfilterCtl,
unsigned long *pHQVminiCtl,
unsigned long *pHQVscaleCtlH,
unsigned long *pHQVzoomflag)
{
unsigned long tmp, sw1, d, falign, mdiv;
Bool zoom_ok = TRUE;
VIAHWDiff *hwDiff = &pVia->HWDiff;
CARD32 HQVfilter[5] = { HQV_H_FILTER_DEFAULT, HQV_H_TAP4_121,
HQV_H_TAP4_121, HQV_H_TAP8_12221, HQV_H_TAP8_12221
@ -525,24 +583,57 @@ viaOverlayHQVCalcZoomWidth(VIAPtr pVia,
if (srcWidth == dstWidth) { /* No zoom */
*pHQVfilterCtl |= HQV_H_FILTER_DEFAULT;
} else if (srcWidth < dstWidth) { /* Zoom in */
*pZoomCtl &= 0x0000FFFF;
tmp = srcWidth * 0x800 / dstWidth;
*pZoomCtl |= ((tmp & 0x7ff) << 16) | V1_X_ZOOM_ENABLE;
*pMiniCtl |= V1_X_INTERPOLY;
zoom_ok = !(tmp > 0x7ff);
tmp = srcWidth * 0x800 / dstWidth;
*pZoomCtl = ((tmp & 0x7ff) << 16) | V1_X_ZOOM_ENABLE;
*pMiniCtl |= V1_X_INTERPOLY;
zoom_ok = !(tmp > 0x7ff);
*pHQVzoomflag = 1;
*pHQVfilterCtl |= HQV_H_FILTER_DEFAULT;
*pHQVzoomflag = 1;
*pHQVfilterCtl |= HQV_H_FILTER_DEFAULT;
} else { /* srcWidth > dstWidth - Zoom out */
if (hwDiff->dwNewScaleCtl) {
if (srcWidth > (dstWidth << 3)) {
/*<1/8*/
/*FIXME!*/
if (dstWidth <= 32) {
dstWidth = 33;
}
if (srcWidth > (dstWidth << 5)) {
tmp = 1 * 0x1000 / 31;
} else {
tmp = (dstWidth * 0x1000) / srcWidth;
}
/* HQV rounding patch, instead of:
* //tmp = dstWidth*0x0800 / srcWidth; */
tmp = dstWidth * 0x800 * 0x400 / srcWidth;
tmp = tmp / 0x400 + ((tmp & 0x3ff) ? 1 : 0);
*pHQVscaleCtlH = HQV_H_SCALE_DOWN_UNDER_EIGHTH;
} else if (srcWidth == (dstWidth << 3)) {
/*1/8*/
tmp = ((dstWidth - 1) * 0x1000) / srcWidth;
*pHQVscaleCtlH = HQV_H_SCALE_DOWN_UNDER_EIGHTH;
} else if (srcWidth > (dstWidth << 2)) {
/*1/4 -1/8 zoom-out*/
tmp = (srcWidth * 0x1000) / dstWidth;
*pHQVscaleCtlH = HQV_H_SCALE_DOWN_FOURTH_TO_EIGHTH;
} else {
/*1-1/4 zoom-out*/
/*setting :src/(destination+0.5)*/
tmp = (srcWidth * 0x2000) / ((dstWidth << 1) + 1);
*pHQVscaleCtlH = HQV_H_SCALE_DOWN_FOURTH_TO_1;
}
*pHQVminiCtl = (tmp & 0x7ff) | HQV_H_MINIFY_ENABLE | HQV_H_MINIFY_DOWN;
/*rounding to nearest interger*/
tmp += (((tmp * 0x1000) & 0xfff) > 1) ? 1 : 0;
*pHQVscaleCtlH |= (tmp & 0x7fff) | HQV_H_SCALE_ENABLE;
} else {
/* HQV rounding patch, instead of:
* //tmp = dstWidth*0x0800 / srcWidth; */
tmp = dstWidth * 0x800 * 0x400 / srcWidth;
tmp = tmp / 0x400 + ((tmp & 0x3ff) ? 1 : 0);
*pHQVminiCtl = (tmp & 0x7ff) | HQV_H_MINIFY_ENABLE | HQV_H_MINIFY_DOWN;
*pHQVminiCtl |= HQV_HDEBLOCK_FILTER;
}
/* Scale down the picture by a factor mdiv = (1 << d) = {2, 4, 8 or 16} */
sw1 = srcWidth;
@ -561,27 +652,25 @@ viaOverlayHQVCalcZoomWidth(VIAPtr pVia,
*pMiniCtl |= ((d << 1) - 1) << 24; /* <= {1,3,5,7} << 24 */
*pHQVfilterCtl |= HQVfilter[d];
/* *pHQVminiCtl = HQVmini[d]; */
*pHQVminiCtl |= HQV_HDEBLOCK_FILTER;
/* Scale to arbitrary size, on top of previous scaling by (1 << d). */
/* Scale to arbitrary size, on top of previous scaling by (1 << d). */
if (sw1 < dstWidth) {
/* CLE bug
*pZoomCtl = sw1 * 0x0800 / dstWidth;*/
*pZoomCtl = (sw1 - 2) * 0x0800 / dstWidth;
*pZoomCtl = ((*pZoomCtl & 0x7ff) << 16) | V1_X_ZOOM_ENABLE;
}
}
if (sw1 < dstWidth) {
/* CLE bug
*pZoomCtl = sw1 * 0x0800 / dstWidth;*/
*pZoomCtl = (sw1 - 2) * 0x0800 / dstWidth;
*pZoomCtl = ((*pZoomCtl & 0x7ff) << 16) | V1_X_ZOOM_ENABLE;
}
if (videoFlag & VIDEO_1_INUSE) {
pVia->swov.overlayRecordV1.dwFetchAlignment = falign;
pVia->swov.overlayRecordV1.dwminifyH = mdiv;
} else {
pVia->swov.overlayRecordV3.dwFetchAlignment = falign;
pVia->swov.overlayRecordV3.dwminifyH = mdiv;
}
if (videoFlag & VIDEO_1_INUSE) {
pVia->swov.overlayRecordV1.dwFetchAlignment = falign;
pVia->swov.overlayRecordV1.dwminifyH = mdiv;
} else {
pVia->swov.overlayRecordV3.dwFetchAlignment = falign;
pVia->swov.overlayRecordV3.dwminifyH = mdiv;
}
}
return zoom_ok;
}
@ -591,10 +680,12 @@ viaOverlayHQVCalcZoomHeight(VIAPtr pVia,
unsigned long *pZoomCtl, unsigned long *pMiniCtl,
unsigned long *pHQVfilterCtl,
unsigned long *pHQVminiCtl,
unsigned long *pHQVscaleCtlV,
unsigned long *pHQVzoomflag)
{
unsigned long tmp, sh1, d;
Bool zoom_ok = TRUE;
VIAHWDiff *hwDiff = &pVia->HWDiff;
CARD32 HQVfilter[5] = { HQV_V_TAP4_121, HQV_V_TAP4_121, HQV_V_TAP4_121,
HQV_V_TAP8_12221, HQV_V_TAP8_12221 };
@ -608,48 +699,58 @@ viaOverlayHQVCalcZoomHeight(VIAPtr pVia,
if (srcHeight == dstHeight) { /* No zoom */
*pHQVfilterCtl |= HQV_V_TAP4_121;
} else if (srcHeight < dstHeight) { /* Zoom in */
*pZoomCtl &= 0xFFFF0000;
tmp = srcHeight * 0x400 / dstHeight - 1;
*pZoomCtl |= ((tmp & 0x3ff) | V1_Y_ZOOM_ENABLE);
*pMiniCtl |= (V1_Y_INTERPOLY | V1_YCBCR_INTERPOLY);
tmp = srcHeight * 0x0400 / dstHeight;
*pZoomCtl |= ((tmp & 0x3ff) | V1_Y_ZOOM_ENABLE);
*pMiniCtl |= (V1_Y_INTERPOLY | V1_YCBCR_INTERPOLY);
*pHQVzoomflag = 1;
*pHQVfilterCtl |= HQV_V_TAP4_121;
*pHQVzoomflag = 1;
*pHQVfilterCtl |= HQV_V_TAP4_121;
} else { /* srcHeight > dstHeight - Zoom out */
if (hwDiff->dwNewScaleCtl) {
/*setting :src/(destination+0.5)*/
tmp = srcHeight * 0x2000 / ((dstHeight << 1) + 1);
tmp += (((tmp * 0x1000) & 0xfff) > 1) ? 1 : 0;
if ((tmp & 0x1ffff) == 0) {
tmp = 0x1ffff;
}
/* HQV rounding patch, instead of:
* //tmp = dstHeight*0x0800 / srcHeight; */
tmp = dstHeight * 0x0800 * 0x400 / srcHeight;
tmp = tmp / 0x400 + ((tmp & 0x3ff) ? 1 : 0);
*pHQVminiCtl |= (((tmp & 0x7ff) << 16) | HQV_V_MINIFY_ENABLE
| HQV_V_MINIFY_DOWN);
*pHQVscaleCtlV = (tmp & 0x1ffff) | HQV_V_SCALE_ENABLE| HQV_V_SCALE_DOWN;
} else {
/* HQV rounding patch, instead of:
* //tmp = dstHeight*0x0800 / srcHeight; */
tmp = dstHeight * 0x0800 * 0x400 / srcHeight;
tmp = tmp / 0x400 + ((tmp & 0x3ff) ? 1 : 0);
*pHQVminiCtl |= (((tmp & 0x7ff) << 16) | HQV_V_MINIFY_ENABLE
| HQV_V_MINIFY_DOWN);
/* Scale down the picture by a factor (1 << d) = {2, 4, 8 or 16} */
/* Scale down the picture by a factor (1 << d) = {2, 4, 8 or 16} */
sh1 = srcHeight;
for (d = 1; d < 5; d++) {
sh1 >>= 1;
if (sh1 <= dstHeight)
break;
}
if (d == 5) { /* Too small. */
d = 4;
zoom_ok = FALSE;
}
sh1 = srcHeight;
for (d = 1; d < 5; d++) {
sh1 >>= 1;
if (sh1 <= dstHeight)
break;
}
if (d == 5) { /* Too small. */
d = 4;
zoom_ok = FALSE;
}
*pMiniCtl |= ((d << 1) - 1) << 16; /* <= {1,3,5,7} << 16 */
*pMiniCtl |= ((d << 1) - 1) << 16; /* <= {1,3,5,7} << 16 */
*pHQVfilterCtl |= HQVfilter[d];
/* *pHQVminiCtl |= HQVmini[d]; */
*pHQVminiCtl |= HQV_VDEBLOCK_FILTER;
*pHQVfilterCtl |= HQVfilter[d];
/* *pHQVminiCtl |= HQVmini[d]; */
*pHQVminiCtl |= HQV_VDEBLOCK_FILTER;
/* Scale to arbitrary size, on top of previous scaling by (1 << d). */
/* Scale to arbitrary size, on top of previous scaling by (1 << d). */
if (sh1 < dstHeight) {
tmp = sh1 * 0x0400 / dstHeight;
*pZoomCtl |= ((tmp & 0x3ff) | V1_Y_ZOOM_ENABLE);
*pMiniCtl |= V1_Y_INTERPOLY | V1_YCBCR_INTERPOLY;
}
if (sh1 < dstHeight) {
tmp = sh1 * 0x0400 / dstHeight;
*pZoomCtl |= ((tmp & 0x3ff) | V1_Y_ZOOM_ENABLE);
*pMiniCtl |= V1_Y_INTERPOLY | V1_YCBCR_INTERPOLY;
}
}
}
return zoom_ok;
@ -665,6 +766,7 @@ viaOverlayGetFetch(VIAPtr pVia, unsigned long videoFlag,
switch (pVia->swov.SrcFourCC) {
case FOURCC_YV12:
case FOURCC_I420:
case FOURCC_XVMC:
n = 0; /* 2^n = 1 byte per pixel (Y channel in planar YUV) */
break;
@ -1048,7 +1150,8 @@ AddHQVSurface(ScrnInfoPtr pScrn, unsigned int numbuf, CARD32 fourcc)
!(pVia->swov.gdwVideoFlagSW & VIDEO_1_INUSE))
proReg = PRO_HQV1_OFFSET;
isplanar = ((fourcc == FOURCC_YV12) || (fourcc == FOURCC_XVMC));
isplanar = ((fourcc == FOURCC_YV12) || (fourcc == FOURCC_I420) ||
(fourcc == FOURCC_XVMC));
width = pVia->swov.SWDevice.gdwSWSrcWidth;
height = pVia->swov.SWDevice.gdwSWSrcHeight;
@ -1091,6 +1194,7 @@ CreateSurface(ScrnInfoPtr pScrn, CARD32 FourCC, CARD16 Width,
isplanar = FALSE;
switch (FourCC) {
case FOURCC_YV12:
case FOURCC_I420:
case FOURCC_XVMC:
isplanar = TRUE;
pitch = ALIGN_TO(Width, 32);
@ -1183,9 +1287,10 @@ ViaSwovSurfaceCreate(ScrnInfoPtr pScrn, viaPortPrivPtr pPriv,
break;
case FOURCC_YV12:
case FOURCC_I420:
retCode = CreateSurface(pScrn, FourCC, Width, Height, TRUE);
if (retCode == Success)
retCode = AddHQVSurface(pScrn, numbuf, FOURCC_YV12);
retCode = AddHQVSurface(pScrn, numbuf, FourCC);
break;
case FOURCC_XVMC:
@ -1247,6 +1352,7 @@ ViaSwovSurfaceDestroy(ScrnInfoPtr pScrn, viaPortPrivPtr pPriv)
break;
case FOURCC_YV12:
case FOURCC_I420:
VIAFreeLinear(&pVia->swov.SWfbMem);
case FOURCC_XVMC:
pVia->swov.SrcFourCC = 0;
@ -1411,6 +1517,7 @@ SetupFIFOs(VIAPtr pVia, unsigned long videoFlag,
{
if (miniCtl & V1_Y_INTERPOLY) {
if (pVia->swov.SrcFourCC == FOURCC_YV12
|| pVia->swov.SrcFourCC == FOURCC_I420
|| pVia->swov.SrcFourCC == FOURCC_XVMC) {
if (videoFlag & VIDEO_HQV_INUSE) {
if (videoFlag & VIDEO_1_INUSE)
@ -1444,6 +1551,7 @@ SetupFIFOs(VIAPtr pVia, unsigned long videoFlag,
}
} else {
if (pVia->swov.SrcFourCC == FOURCC_YV12
|| pVia->swov.SrcFourCC == FOURCC_I420
|| pVia->swov.SrcFourCC == FOURCC_XVMC) {
if (videoFlag & VIDEO_HQV_INUSE) {
if (videoFlag & VIDEO_1_INUSE)
@ -1488,6 +1596,7 @@ SetColorKey(VIAPtr pVia, unsigned long videoFlag,
if (videoFlag & VIDEO_1_INUSE) {
SaveVideoRegister(pVia, V_COLOR_KEY, keyLow);
SaveVideoRegister(pVia, SND_COLOR_KEY, keyLow);
} else {
if (pVia->HWDiff.dwSupportTwoColorKey) /*CLE_C0 */
SaveVideoRegister(pVia, V3_COLOR_KEY, keyLow);
@ -1561,8 +1670,9 @@ SetHQVFetch(VIAPtr pVia, CARD32 srcFetch, unsigned long srcHeight)
srcFetch >>= 3; /* fetch unit is 8 bytes */
}
SaveVideoRegister(pVia, HQV_SRC_FETCH_LINE + proReg,
((srcFetch - 1) << 16) | (srcHeight - 1));
if (pVia->ChipId != PCI_CHIP_VT3409)
SaveVideoRegister(pVia, HQV_SRC_FETCH_LINE + proReg,
((srcFetch - 1) << 16) | (srcHeight - 1));
}
static void
@ -1713,13 +1823,14 @@ Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag,
unsigned long zoomCtl = 0, miniCtl = 0;
unsigned long hqvCtl = 0;
unsigned long hqvFilterCtl = 0, hqvMiniCtl = 0;
unsigned long hqvScaleCtlH = 0, hqvScaleCtlV = 0;
unsigned long haveHQVzoomH = 0, haveHQVzoomV = 0;
unsigned long hqvSrcWidth = 0, hqvDstWidth = 0;
unsigned long hqvSrcFetch = 0, hqvOffset = 0;
unsigned long dwOffset = 0, fetch = 0, tmp = 0;
unsigned long proReg = 0;
DBG_DD(ErrorF("videoflag=%p\n", videoFlag));
DBG_DD(ErrorF("videoflag=%ld\n", videoFlag));
if (pVia->ChipId == PCI_CHIP_VT3259 && !(videoFlag & VIDEO_1_INUSE))
proReg = PRO_HQV1_OFFSET;
@ -1762,16 +1873,16 @@ Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag,
/*
* FIXME:
* Enable video on secondary
* Enable video on secondary (change Panel to SecondCRTC?)
*/
if ((pVia->VideoEngine == VIDEO_ENGINE_CME
|| pVia->Chipset == VIA_VM800)
&& pVia->pBIOSInfo->Panel->IsActive) {
/* V1_ON_SND_DISPLAY */
vidCtl |= 0x80000000;
vidCtl |= V1_ON_SND_DISPLAY;
/* SECOND_DISPLAY_COLOR_KEY_ENABLE */
compose |= 0x00010000 | 0x1;
compose |= SECOND_DISPLAY_COLOR_KEY_ENABLE | 0x1;
}
viaOverlayGetV1V3Format(pVia, (videoFlag & VIDEO_1_INUSE) ? 1 : 3,
@ -1790,6 +1901,7 @@ Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag,
pVia->swov.overlayRecordV1.dwOffset = dwOffset;
if (pVia->swov.SrcFourCC == FOURCC_YV12
|| pVia->swov.SrcFourCC == FOURCC_I420
|| pVia->swov.SrcFourCC == FOURCC_XVMC) {
YCBCRREC YCbCr;
@ -1882,6 +1994,7 @@ Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag,
SetHQVFetch(pVia, hqvSrcFetch, oriSrcHeight);
if (pVia->swov.SrcFourCC == FOURCC_YV12
|| pVia->swov.SrcFourCC == FOURCC_I420
|| pVia->swov.SrcFourCC == FOURCC_XVMC) {
if (videoFlag & VIDEO_1_INUSE)
SaveVideoRegister(pVia, V1_STRIDE, srcPitch << 1);
@ -1925,7 +2038,7 @@ Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag,
if (!viaOverlayHQVCalcZoomWidth(pVia, videoFlag, srcWidth, dstWidth,
&zoomCtl, &miniCtl, &hqvFilterCtl,
&hqvMiniCtl, &haveHQVzoomH)) {
&hqvMiniCtl, &hqvScaleCtlH, &haveHQVzoomH)) {
/* Need to scale (minify) too much - can't handle it. */
SetFetch(pVia, videoFlag, fetch);
FireVideoCommand(pVia, videoFlag, compose);
@ -1964,7 +2077,7 @@ Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag,
if (!viaOverlayHQVCalcZoomHeight(pVia, srcHeight, dstHeight, &zoomCtl,
&miniCtl, &hqvFilterCtl, &hqvMiniCtl,
&haveHQVzoomV)) {
&hqvScaleCtlV, &haveHQVzoomV)) {
/* Need to scale (minify) too much - can't handle it. */
FireVideoCommand(pVia, videoFlag, compose);
FlushVidRegBuffer(pVia);
@ -2008,8 +2121,13 @@ Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag,
hqvFilterCtl &= 0xfffdffff;
SetMiniAndZoom(pVia, videoFlag, 0, 0);
}
SaveVideoRegister(pVia, HQV_MINIFY_CONTROL + proReg, hqvMiniCtl);
SaveVideoRegister(pVia, HQV_FILTER_CONTROL + proReg, hqvFilterCtl);
if (hwDiff->dwNewScaleCtl) {
SaveVideoRegister(pVia, HQV_H_SCALE_CONTROL + proReg, hqvScaleCtlH);
SaveVideoRegister(pVia, HQV_V_SCALE_CONTROL + proReg, hqvScaleCtlV);
} else {
SaveVideoRegister(pVia, HQV_MINIFY_CONTROL + proReg, hqvMiniCtl);
}
SaveVideoRegister(pVia, HQV_FILTER_CONTROL + proReg, hqvFilterCtl);
} else
SetMiniAndZoom(pVia, videoFlag, miniCtl, zoomCtl);
@ -2022,11 +2140,24 @@ Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag,
miniCtl, compose);
if (pVia->VideoEngine == VIDEO_ENGINE_CME) {
VIDOutD(HQV_SRC_DATA_OFFSET_CONTROL1,0);
VIDOutD(HQV_SRC_DATA_OFFSET_CONTROL3,((pUpdate->SrcRight - 1 ) << 16) | (pUpdate->SrcBottom - 1));
SaveVideoRegister(pVia, HQV_CME_REG(hwDiff, HQV_SDO_CTRL1),0);
SaveVideoRegister(pVia, HQV_CME_REG(hwDiff, HQV_SDO_CTRL3),((pUpdate->SrcRight - 1 ) << 16) | (pUpdate->SrcBottom - 1));
if (pVia->Chipset == VIA_VX800 || pVia->Chipset == VIA_VX855) {
VIDOutD(HQV_SRC_DATA_OFFSET_CONTROL2,0);
VIDOutD(HQV_SRC_DATA_OFFSET_CONTROL4,((pUpdate->SrcRight - 1 ) << 16) | (pUpdate->SrcBottom - 1));
SaveVideoRegister(pVia, HQV_CME_REG(hwDiff, HQV_SDO_CTRL2),0);
SaveVideoRegister(pVia, HQV_CME_REG(hwDiff, HQV_SDO_CTRL4),((pUpdate->SrcRight - 1 ) << 16) | (pUpdate->SrcBottom - 1));
if (pVia->Chipset == VIA_VX855) {
SaveVideoRegister(pVia, HQV_DST_DATA_OFFSET_CTRL1,0);
SaveVideoRegister(pVia, HQV_DST_DATA_OFFSET_CTRL3,((pUpdate->SrcRight - 1 ) << 16) | (pUpdate->SrcBottom - 1));
SaveVideoRegister(pVia, HQV_DST_DATA_OFFSET_CTRL2,0);
SaveVideoRegister(pVia, HQV_DST_DATA_OFFSET_CTRL4,((pUpdate->SrcRight - 1 ) << 16) | (pUpdate->SrcBottom - 1));
SaveVideoRegister(pVia, HQV_BACKGROUND_DATA_OFFSET,((pUpdate->SrcRight - 1 ) << 16) | (pUpdate->SrcBottom - 1));
SaveVideoRegister(pVia, HQV_EXTENDED_CONTROL,0);
/*0x3e0*/
SaveVideoRegister(pVia, HQV_SUBP_HSCALE_CTRL,0);
/*0x3e8*/
SaveVideoRegister(pVia, HQV_SUBP_VSCALE_CTRL,0);
SaveVideoRegister(pVia, HQV_DEFAULT_VIDEO_COLOR, HQV_FIX_COLOR);
}
}
}
@ -2062,9 +2193,6 @@ Upd_Video(ScrnInfoPtr pScrn, unsigned long videoFlag,
usleep(1);
}
if (pVia->VideoEngine == VIDEO_ENGINE_CME)
hqvCtl |= HQV_GEN_IRQ;
VIDOutD(HQV_CONTROL + proReg, hqvCtl & ~HQV_SW_FLIP);
VIDOutD(HQV_CONTROL + proReg, hqvCtl | HQV_SW_FLIP);
@ -2176,6 +2304,7 @@ VIAVidUpdateOverlay(ScrnInfoPtr pScrn, LPDDUPDATEOVERLAY pUpdate)
(pVia->swov.SrcFourCC == FOURCC_RV16) ||
(pVia->swov.SrcFourCC == FOURCC_RV32) ||
(pVia->swov.SrcFourCC == FOURCC_YV12) ||
(pVia->swov.SrcFourCC == FOURCC_I420) ||
(pVia->swov.SrcFourCC == FOURCC_XVMC)) {
videoFlag = pVia->swov.gdwVideoFlagSW;
}
@ -2250,6 +2379,7 @@ VIAVidUpdateOverlay(ScrnInfoPtr pScrn, LPDDUPDATEOVERLAY pUpdate)
(pVia->swov.SrcFourCC == FOURCC_RV16) ||
(pVia->swov.SrcFourCC == FOURCC_RV32) ||
(pVia->swov.SrcFourCC == FOURCC_YV12) ||
(pVia->swov.SrcFourCC == FOURCC_I420) ||
(pVia->swov.SrcFourCC == FOURCC_XVMC)) {
pVia->swov.SWDevice.gdwSWDstLeft = pUpdate->DstLeft + panDX;
pVia->swov.SWDevice.gdwSWDstTop = pUpdate->DstTop + panDY;
@ -2309,6 +2439,7 @@ ViaOverlayHide(ScrnInfoPtr pScrn)
(pVia->swov.SrcFourCC == FOURCC_RV16) ||
(pVia->swov.SrcFourCC == FOURCC_RV32) ||
(pVia->swov.SrcFourCC == FOURCC_YV12) ||
(pVia->swov.SrcFourCC == FOURCC_I420) ||
(pVia->swov.SrcFourCC == FOURCC_XVMC))
videoFlag = pVia->swov.gdwVideoFlagSW;

View File

@ -53,7 +53,7 @@ typedef struct __VIAHWDiff
{
unsigned long dwThreeHQVBuffer; /* Use Three HQV Buffers */
/* unsigned long dwV3SrcHeightSetting; *//* Set Video Source Width and Height */
/* unsigned long dwSupportExtendFIFO; *//* Support Extand FIFO */
/* unsigned long dwSupportExtendFIFO; *//* Support Extend FIFO */
unsigned long dwHQVFetchByteUnit; /* HQV Fetch Count unit is byte */
unsigned long dwHQVInitPatch; /* Initialize HQV Engine 2 times */
/*unsigned long dwSupportV3Gamma; *//* Support V3 Gamma */
@ -73,6 +73,8 @@ typedef struct __VIAHWDiff
/*unsigned long dwV3FIFOPatch; *//* For CLE V3 FIFO Bug (srcWidth <= 8) */
unsigned long dwSupportTwoColorKey; /* Support two color key */
/* unsigned long dwCxColorSpace; *//* CLE_Cx ColorSpace */
unsigned dwNewScaleCtl; /* Use new HQV scale engine code */
const unsigned *HQVCmeRegs; /* Which set of CME regs to use for newer chipsets */
} VIAHWDiff;
void VIAVidHWDiffInit(ScrnInfoPtr pScrn);

View File

@ -40,7 +40,7 @@
#define TIMING_CVT_WARN_REFRESH_RATE_NOT_RB 1 << 3
/**
* Geneartes a CVT modeline
* Generates a CVT modeline
* mode must not be null, if mode->name is null a new char* will be allocated.
*
*/

View File

@ -230,7 +230,7 @@ ViaVbeSetMode(ScrnInfoPtr pScrn, DisplayModePtr pMode)
/* Some cards do not like setting the clock. */
xf86ErrorF("...but worked OK without customized "
"refresh and dotclock.\n");
xfree(data->block);
free(data->block);
data->block = NULL;
data->mode &= ~(1 << 11);
} else {
@ -322,7 +322,7 @@ ViaVbeSaveRestore(ScrnInfoPtr pScrn, vbeSaveRestoreFunction function)
&& (function == MODE_SAVE)) {
/* Do not rely on the memory not being touched. */
if (pVia->vbeMode.pstate == NULL)
pVia->vbeMode.pstate = xalloc(pVia->vbeMode.stateSize);
pVia->vbeMode.pstate = malloc(pVia->vbeMode.stateSize);
memcpy(pVia->vbeMode.pstate, pVia->vbeMode.state,
pVia->vbeMode.stateSize);
}

View File

@ -36,6 +36,11 @@
#include "via_driver.h" /* for HAVE_DEBUG */
#include "via_vgahw.h"
#if ABI_VIDEODRV_VERSION < 12
#define PIOOFFSET hwp->PIOOffset
#else
#define PIOOFFSET 0
#endif
static CARD8
ViaVgahwIn(vgaHWPtr hwp, int address)
@ -43,7 +48,7 @@ ViaVgahwIn(vgaHWPtr hwp, int address)
if (hwp->MMIOBase)
return MMIO_IN8(hwp->MMIOBase, hwp->MMIOOffset + address);
else
return inb(hwp->PIOOffset + address);
return inb(PIOOFFSET + address);
}
static void
@ -52,7 +57,7 @@ ViaVgahwOut(vgaHWPtr hwp, int address, CARD8 value)
if (hwp->MMIOBase)
MMIO_OUT8(hwp->MMIOBase, hwp->MMIOOffset + address, value);
else
outb(hwp->PIOOffset + address, value);
outb(PIOOFFSET + address, value);
}
/*

View File

@ -117,6 +117,10 @@ static int viaSetPortAttribute(ScrnInfoPtr, Atom, INT32, pointer);
static int viaPutImage(ScrnInfoPtr, short, short, short, short, short, short,
short, short, int, unsigned char *, short, short, Bool,
RegionPtr, pointer, DrawablePtr);
static void UVBlit(unsigned char *dest,
const unsigned char *uBuffer,
const unsigned char *vBuffer,
unsigned width, unsigned srcPitch, unsigned dstPitch, unsigned lines);
static void nv12Blit(unsigned char *nv12Chroma,
const unsigned char *uBuffer,
const unsigned char *vBuffer,
@ -158,11 +162,12 @@ static XF86AttributeRec AttributesG[NUM_ATTRIBUTES_G] = {
{XvSettable | XvGettable, 0, 1, "XV_AUTOPAINT_COLORKEY"}
};
#define NUM_IMAGES_G 6
#define NUM_IMAGES_G 7
static XF86ImageRec ImagesG[NUM_IMAGES_G] = {
XVIMAGE_YUY2,
XVIMAGE_YV12,
XVIMAGE_I420,
{
/*
* Below, a dummy picture type that is used in XvPutImage only to do
@ -354,6 +359,14 @@ DecideOverlaySupport(ScrnInfoPtr pScrn)
mClock = 333;
memEfficiency = (float)SINGLE_3205_133;
break;
case VIA_MEM_DDR800:
mClock = 400;
memEfficiency = (float)SINGLE_3205_133;
break;
case VIA_MEM_DDR1066:
mClock = 533;
memEfficiency = (float)SINGLE_3205_133;
break;
default:
/*Unknow DRAM Type */
DBG_DD(ErrorF("Unknow DRAM Type!\n"));
@ -426,7 +439,7 @@ DecideOverlaySupport(ScrnInfoPtr pScrn)
DBG_DD(ErrorF(" via_video.c : totalBandwidth= %f : \n",
totalBandWidth));
if (needBandWidth < totalBandWidth)
return TRUE;
return TRUE;
}
return FALSE;
}
@ -466,8 +479,8 @@ viaResetVideo(ScrnInfoPtr pScrn)
viaVidEng->video1_ctl = 0;
viaVidEng->video3_ctl = 0;
viaVidEng->compose = V1_COMMAND_FIRE;
viaVidEng->compose = V3_COMMAND_FIRE;
viaVidEng->compose = V1_COMMAND_FIRE;
viaVidEng->compose = V3_COMMAND_FIRE;
viaVidEng->color_key = 0x821;
viaVidEng->snd_color_key = 0x821;
@ -479,7 +492,7 @@ viaSaveVideo(ScrnInfoPtr pScrn)
VIAPtr pVia = VIAPTR(pScrn);
vmmtr viaVidEng = (vmmtr) pVia->VidMapBase;
DBG_DD(ErrorF(" via_video.c : viaSaveVideo : \n"));
DBG_DD(ErrorF(" via_video.c : viaSaveVideo : \n"));
/* Save video registers */
memcpy(pVia->VideoRegs, (void*)viaVidEng, sizeof(video_via_regs));
@ -487,8 +500,8 @@ viaSaveVideo(ScrnInfoPtr pScrn)
pVia->dwV3 = ((vmmtr) viaVidEng)->video3_ctl;
viaVidEng->video1_ctl = 0;
viaVidEng->video3_ctl = 0;
viaVidEng->compose = V1_COMMAND_FIRE;
viaVidEng->compose = V3_COMMAND_FIRE;
viaVidEng->compose = V1_COMMAND_FIRE;
viaVidEng->compose = V3_COMMAND_FIRE;
}
void
@ -496,65 +509,83 @@ viaRestoreVideo(ScrnInfoPtr pScrn)
{
VIAPtr pVia = VIAPTR(pScrn);
vmmtr viaVidEng = (vmmtr) pVia->VidMapBase;
video_via_regs *localVidEng = pVia->VideoRegs;
video_via_regs *localVidEng = pVia->VideoRegs;
DBG_DD(ErrorF(" via_video.c : viaRestoreVideo : \n"));
DBG_DD(ErrorF(" via_video.c : viaRestoreVideo : \n"));
/* Restore video registers */
/* flush restored video engines' setting to VidMapBase */
viaVidEng->alphawin_hvstart = localVidEng->alphawin_hvstart;
viaVidEng->alphawin_size = localVidEng->alphawin_size;
viaVidEng->alphawin_ctl = localVidEng->alphawin_ctl;
viaVidEng->alphafb_stride = localVidEng->alphafb_stride;
viaVidEng->color_key = localVidEng->color_key;
viaVidEng->alphafb_addr = localVidEng->alphafb_addr;
viaVidEng->chroma_low = localVidEng->chroma_low;
viaVidEng->chroma_up = localVidEng->chroma_up;
if (pVia->ChipId != PCI_CHIP_VT3314)
{
/*VT3314 only has V3*/
viaVidEng->video1_ctl = localVidEng->video1_ctl;
viaVidEng->video1_fetch = localVidEng->video1_fetch;
viaVidEng->video1y_addr1 = localVidEng->video1y_addr1;
viaVidEng->video1_stride = localVidEng->video1_stride;
viaVidEng->video1_hvstart = localVidEng->video1_hvstart;
viaVidEng->video1_size = localVidEng->video1_size;
viaVidEng->video1y_addr2 = localVidEng->video1y_addr2;
viaVidEng->video1_zoom = localVidEng->video1_zoom;
viaVidEng->video1_mictl = localVidEng->video1_mictl;
viaVidEng->video1y_addr0 = localVidEng->video1y_addr0;
viaVidEng->video1_fifo = localVidEng->video1_fifo;
viaVidEng->video1y_addr3 = localVidEng->video1y_addr3;
viaVidEng->v1_source_w_h = localVidEng->v1_source_w_h ;
viaVidEng->video1_CSC1 = localVidEng->video1_CSC1;
viaVidEng->video1_CSC2 = localVidEng->video1_CSC2;
}
viaVidEng->snd_color_key = localVidEng->snd_color_key;
viaVidEng->v3alpha_prefifo = localVidEng->v3alpha_prefifo;
viaVidEng->v3alpha_fifo = localVidEng->v3alpha_fifo;
viaVidEng->video3_CSC2 = localVidEng->video3_CSC2;
viaVidEng->video3_CSC2 = localVidEng->video3_CSC2;
viaVidEng->v3_source_width = localVidEng->v3_source_width;
viaVidEng->video3_ctl = localVidEng->video3_ctl;
viaVidEng->video3_addr0 = localVidEng->video3_addr0;
viaVidEng->video3_addr1 = localVidEng->video3_addr1;
viaVidEng->video3_stride = localVidEng->video3_stride;
viaVidEng->video3_hvstart = localVidEng->video3_hvstart;
viaVidEng->video3_size = localVidEng->video3_size;
viaVidEng->v3alpha_fetch = localVidEng->v3alpha_fetch;
viaVidEng->video3_zoom = localVidEng->video3_zoom;
viaVidEng->video3_mictl = localVidEng->video3_mictl;
viaVidEng->video3_CSC1 = localVidEng->video3_CSC1;
viaVidEng->video3_CSC2 = localVidEng->video3_CSC2;
viaVidEng->compose = localVidEng->compose;
viaVidEng->video1_ctl = pVia->dwV1;
/* flush restored video engines' setting to VidMapBase */
viaVidEng->alphawin_hvstart = localVidEng->alphawin_hvstart;
viaVidEng->alphawin_size = localVidEng->alphawin_size;
viaVidEng->alphawin_ctl = localVidEng->alphawin_ctl;
viaVidEng->alphafb_stride = localVidEng->alphafb_stride;
viaVidEng->color_key = localVidEng->color_key;
viaVidEng->alphafb_addr = localVidEng->alphafb_addr;
viaVidEng->chroma_low = localVidEng->chroma_low;
viaVidEng->chroma_up = localVidEng->chroma_up;
viaVidEng->interruptflag = localVidEng->interruptflag;
if (pVia->ChipId != PCI_CHIP_VT3314)
{
/*VT3314 only has V3*/
viaVidEng->video1_ctl = localVidEng->video1_ctl;
viaVidEng->video1_fetch = localVidEng->video1_fetch;
viaVidEng->video1y_addr1 = localVidEng->video1y_addr1;
viaVidEng->video1_stride = localVidEng->video1_stride;
viaVidEng->video1_hvstart = localVidEng->video1_hvstart;
viaVidEng->video1_size = localVidEng->video1_size;
viaVidEng->video1y_addr2 = localVidEng->video1y_addr2;
viaVidEng->video1_zoom = localVidEng->video1_zoom;
viaVidEng->video1_mictl = localVidEng->video1_mictl;
viaVidEng->video1y_addr0 = localVidEng->video1y_addr0;
viaVidEng->video1_fifo = localVidEng->video1_fifo;
viaVidEng->video1y_addr3 = localVidEng->video1y_addr3;
viaVidEng->v1_source_w_h = localVidEng->v1_source_w_h;
viaVidEng->video1_CSC1 = localVidEng->video1_CSC1;
viaVidEng->video1_CSC2 = localVidEng->video1_CSC2;
/* Fix cursor garbage after suspend for VX855 and VX900 (#405) */
/* 0x2E4 T Signature Data Result 1 */
viaVidEng->video1u_addr1 = localVidEng->video1u_addr1;
/* 0x2E8 HI for Primary Display FIFO Control Signal */
viaVidEng->video1u_addr2 = localVidEng->video1u_addr2;
/* 0x2EC HI for Primary Display FIFO Transparent color */
viaVidEng->video1u_addr3 = localVidEng->video1u_addr3;
/* 0x2F0 HI for Primary Display Control Signal */
viaVidEng->video1v_addr0 = localVidEng->video1v_addr0;
/* 0x2F4 HI for Primary Display Frame Buffer Starting Address */
viaVidEng->video1v_addr1 = localVidEng->video1v_addr1;
/* 0x2F8 HI for Primary Display Horizontal and Vertical Start */
viaVidEng->video1v_addr2 = localVidEng->video1v_addr2;
/* 0x2FC HI for Primary Display Center Offset */
viaVidEng->video1v_addr3 = localVidEng->video1v_addr3;
}
viaVidEng->snd_color_key = localVidEng->snd_color_key;
viaVidEng->v3alpha_prefifo = localVidEng->v3alpha_prefifo;
viaVidEng->v3alpha_fifo = localVidEng->v3alpha_fifo;
viaVidEng->video3_CSC2 = localVidEng->video3_CSC2;
viaVidEng->video3_CSC2 = localVidEng->video3_CSC2;
viaVidEng->v3_source_width = localVidEng->v3_source_width;
viaVidEng->video3_ctl = localVidEng->video3_ctl;
viaVidEng->video3_addr0 = localVidEng->video3_addr0;
viaVidEng->video3_addr1 = localVidEng->video3_addr1;
viaVidEng->video3_stride = localVidEng->video3_stride;
viaVidEng->video3_hvstart = localVidEng->video3_hvstart;
viaVidEng->video3_size = localVidEng->video3_size;
viaVidEng->v3alpha_fetch = localVidEng->v3alpha_fetch;
viaVidEng->video3_zoom = localVidEng->video3_zoom;
viaVidEng->video3_mictl = localVidEng->video3_mictl;
viaVidEng->video3_CSC1 = localVidEng->video3_CSC1;
viaVidEng->video3_CSC2 = localVidEng->video3_CSC2;
viaVidEng->compose = localVidEng->compose;
viaVidEng->video3_ctl = pVia->dwV3;
if (pVia->ChipId != PCI_CHIP_VT3314)
viaVidEng->compose = V1_COMMAND_FIRE;
viaVidEng->compose = V3_COMMAND_FIRE;
if (pVia->ChipId != PCI_CHIP_VT3314) {
viaVidEng->video1_ctl = pVia->dwV1;
viaVidEng->compose = V1_COMMAND_FIRE;
}
viaVidEng->compose = V3_COMMAND_FIRE;
}
void
@ -573,8 +604,8 @@ viaExitVideo(ScrnInfoPtr pScrn)
viaVidEng->video1_ctl = 0;
viaVidEng->video3_ctl = 0;
viaVidEng->compose = V1_COMMAND_FIRE;
viaVidEng->compose = V3_COMMAND_FIRE;
viaVidEng->compose = V1_COMMAND_FIRE;
viaVidEng->compose = V3_COMMAND_FIRE;
/*
* Free all adaptor info allocated in viaInitVideo.
@ -591,15 +622,15 @@ viaExitVideo(ScrnInfoPtr pScrn)
(viaPortPrivPtr) curAdapt->pPortPrivates->ptr + j,
TRUE);
}
xfree(curAdapt->pPortPrivates->ptr);
free(curAdapt->pPortPrivates->ptr);
}
xfree(curAdapt->pPortPrivates);
free(curAdapt->pPortPrivates);
}
xfree(curAdapt);
free(curAdapt);
}
}
if (allAdaptors)
xfree(allAdaptors);
free(allAdaptors);
}
void
@ -610,7 +641,7 @@ viaInitVideo(ScreenPtr pScreen)
XF86VideoAdaptorPtr *adaptors, *newAdaptors;
int num_adaptors, num_new;
DBG_DD(ErrorF(" via_video.c : viaInitVideo : \n"));
DBG_DD(ErrorF(" via_video.c : viaInitVideo, Screen[%d]\n", pScrn->scrnIndex));
allAdaptors = NULL;
newAdaptors = NULL;
@ -660,7 +691,7 @@ viaInitVideo(ScreenPtr pScreen)
DBG_DD(ErrorF(" via_video.c : num_adaptors : %d\n", num_adaptors));
if (newAdaptors) {
allAdaptors = xalloc((num_adaptors + num_new) *
allAdaptors = malloc((num_adaptors + num_new) *
sizeof(XF86VideoAdaptorPtr *));
if (allAdaptors) {
if (num_adaptors)
@ -685,100 +716,6 @@ viaInitVideo(ScreenPtr pScreen)
}
}
static Bool
RegionsEqual(RegionPtr A, RegionPtr B)
{
int *dataA, *dataB;
int num;
num = REGION_NUM_RECTS(A);
if (num != REGION_NUM_RECTS(B))
return FALSE;
if ((A->extents.x1 != B->extents.x1) ||
(A->extents.x2 != B->extents.x2) ||
(A->extents.y1 != B->extents.y1) || (A->extents.y2 != B->extents.y2))
return FALSE;
dataA = (int *)REGION_RECTS(A);
dataB = (int *)REGION_RECTS(B);
while (num--) {
if ((dataA[0] != dataB[0]) || (dataA[1] != dataB[1]))
return FALSE;
dataA += 2;
dataB += 2;
}
return TRUE;
}
/*
* This one gets called, for example, on panning.
*/
static int
viaReputImage(ScrnInfoPtr pScrn,
short drw_x, short drw_y, RegionPtr clipBoxes, pointer data,
DrawablePtr pDraw)
{
DDUPDATEOVERLAY UpdateOverlay_Video;
LPDDUPDATEOVERLAY lpUpdateOverlay = &UpdateOverlay_Video;
viaPortPrivPtr pPriv = (viaPortPrivPtr) data;
VIAPtr pVia = VIAPTR(pScrn);
if (!RegionsEqual(&pPriv->clip, clipBoxes)) {
REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes);
if (pPriv->autoPaint) {
if (pDraw->type == DRAWABLE_WINDOW) {
/* TODO Replace xf86XVFillKeyHelper with xf86XVFillKeyHelperDrawable
Currently resizing problem exist in VLC Media Player
Example of implementation:
xf86XVFillKeyHelperDrawable(pDraw, pPriv->colorKey, clipBoxes);
DamageDamageRegion(pDraw, clipBoxes); */
xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes);
} else {
xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes);
}
}
}
if (drw_x == pPriv->old_drw_x &&
drw_y == pPriv->old_drw_y &&
pVia->swov.oldPanningX == pVia->swov.panning_x &&
pVia->swov.oldPanningY == pVia->swov.panning_y) {
viaXvError(pScrn, pPriv, xve_none);
return Success;
}
lpUpdateOverlay->SrcLeft = pPriv->old_src_x;
lpUpdateOverlay->SrcTop = pPriv->old_src_y;
lpUpdateOverlay->SrcRight = pPriv->old_src_x + pPriv->old_src_w;
lpUpdateOverlay->SrcBottom = pPriv->old_src_y + pPriv->old_src_h;
lpUpdateOverlay->DstLeft = drw_x;
lpUpdateOverlay->DstTop = drw_y;
lpUpdateOverlay->DstRight = drw_x + pPriv->old_drw_w;
lpUpdateOverlay->DstBottom = drw_y + pPriv->old_drw_h;
pPriv->old_drw_x = drw_x;
pPriv->old_drw_y = drw_y;
lpUpdateOverlay->dwFlags = DDOVER_KEYDEST;
if (pScrn->bitsPerPixel == 8)
lpUpdateOverlay->dwColorSpaceLowValue = pPriv->colorKey & 0xff;
else
lpUpdateOverlay->dwColorSpaceLowValue = pPriv->colorKey;
VIAVidUpdateOverlay(pScrn, lpUpdateOverlay);
viaXvError(pScrn, pPriv, xve_none);
return Success;
}
static unsigned
viaSetupAdaptors(ScreenPtr pScreen, XF86VideoAdaptorPtr ** adaptors)
{
@ -787,7 +724,7 @@ viaSetupAdaptors(ScreenPtr pScreen, XF86VideoAdaptorPtr ** adaptors)
DevUnion *pdevUnion;
int i, j, usedPorts, numPorts;
DBG_DD(ErrorF(" via_video.c : viaSetupImageVideo: \n"));
DBG_DD(ErrorF(" via_video.c : viaSetupAdaptors (viaSetupImageVideo): \n"));
xvBrightness = MAKE_ATOM("XV_BRIGHTNESS");
xvContrast = MAKE_ATOM("XV_CONTRAST");
@ -839,7 +776,7 @@ viaSetupAdaptors(ScreenPtr pScreen, XF86VideoAdaptorPtr ** adaptors)
viaAdaptPtr[i]->GetPortAttribute = viaGetPortAttribute;
viaAdaptPtr[i]->SetPortAttribute = viaSetPortAttribute;
viaAdaptPtr[i]->PutImage = viaPutImage;
viaAdaptPtr[i]->ReputImage = viaReputImage;
viaAdaptPtr[i]->ReputImage = NULL;
viaAdaptPtr[i]->QueryImageAttributes = viaQueryImageAttributes;
for (j = 0; j < numPorts; ++j) {
viaPortPriv[j].dmaBounceBuffer = NULL;
@ -886,7 +823,7 @@ viaStopVideo(ScrnInfoPtr pScrn, pointer data, Bool exit)
if (exit) {
ViaSwovSurfaceDestroy(pScrn, pPriv);
if (pPriv->dmaBounceBuffer)
xfree(pPriv->dmaBounceBuffer);
free(pPriv->dmaBounceBuffer);
pPriv->dmaBounceBuffer = 0;
pPriv->dmaBounceStride = 0;
pPriv->dmaBounceLines = 0;
@ -997,6 +934,8 @@ viaGetPortAttribute(ScrnInfoPtr pScrn,
}
} else {
DBG_DD(ErrorF(" via_video.c : viaGetPortAttribute : is not supported the attribute\n"));
/*return BadMatch */;
}
return Success;
@ -1025,6 +964,7 @@ Flip(VIAPtr pVia, viaPortPrivPtr pPriv, int fourcc,
unsigned long DisplayBufferIndex)
{
unsigned long proReg = 0;
unsigned count = 50000;
if (pVia->ChipId == PCI_CHIP_VT3259
&& !(pVia->swov.gdwVideoFlagSW & VIDEO_1_INUSE))
@ -1036,7 +976,8 @@ Flip(VIAPtr pVia, viaPortPrivPtr pPriv, int fourcc,
case FOURCC_RV15:
case FOURCC_RV16:
case FOURCC_RV32:
while ((VIDInD(HQV_CONTROL + proReg) & HQV_SW_FLIP));
while ((VIDInD(HQV_CONTROL + proReg) & HQV_SW_FLIP)
&& --count);
VIDOutD(HQV_SRC_STARTADDR_Y + proReg,
pVia->swov.SWDevice.dwSWPhysicalAddr[DisplayBufferIndex]);
VIDOutD(HQV_CONTROL + proReg,
@ -1044,8 +985,10 @@ Flip(VIAPtr pVia, viaPortPrivPtr pPriv, int fourcc,
proReg) & ~HQV_FLIP_ODD) | HQV_SW_FLIP | HQV_FLIP_STATUS);
break;
case FOURCC_YV12:
case FOURCC_I420:
default:
while ((VIDInD(HQV_CONTROL + proReg) & HQV_SW_FLIP));
while ((VIDInD(HQV_CONTROL + proReg) & HQV_SW_FLIP)
&& --count);
VIDOutD(HQV_SRC_STARTADDR_Y + proReg,
pVia->swov.SWDevice.dwSWPhysicalAddr[DisplayBufferIndex]);
if (pVia->VideoEngine == VIDEO_ENGINE_CME) {
@ -1069,16 +1012,49 @@ Flip(VIAPtr pVia, viaPortPrivPtr pPriv, int fourcc,
*/
static void
nv12cp(unsigned char *dst,
const unsigned char *src, int dstPitch, int w, int h, int yuv422)
planar420cp(unsigned char *dst,
const unsigned char *src, int dstPitch, int w, int h, int i420)
{
/*
* Blit luma component as a fake YUY2 assembler blit.
*/
unsigned long srcUOffset, srcVOffset;
if (i420) {
srcVOffset = w * h + (w >> 1) * (h >> 1);
srcUOffset = w * h;
} else {
srcUOffset = w * h + (w >> 1) * (h >> 1);
srcVOffset = w * h;
}
(*viaFastVidCpy) (dst, src, dstPitch, w >> 1, h, 1);
UVBlit(dst + dstPitch * h, src + srcUOffset,
src + srcVOffset, w >> 1, w >> 1, dstPitch, h >> 1);
}
/*
* Slow and dirty. NV12 blit.
*/
static void
nv12cp(unsigned char *dst,
const unsigned char *src, int dstPitch, int w, int h, int i420)
{
/*
* Blit luma component as a fake YUY2 assembler blit.
*/
unsigned long srcUOffset, srcVOffset;
if (i420) {
srcVOffset = w * h + (w >> 1) * (h >> 1);
srcUOffset = w * h;
} else {
srcUOffset = w * h + (w >> 1) * (h >> 1);
srcVOffset = w * h;
}
(*viaFastVidCpy) (dst, src, dstPitch, w >> 1, h, TRUE);
nv12Blit(dst + dstPitch * h, src + w * h + (w >> 1) * (h >> 1),
src + w * h, w >> 1, w >> 1, dstPitch, h >> 1);
nv12Blit(dst + dstPitch * h, src + srcUOffset,
src + srcVOffset, w >> 1, w >>1, dstPitch, h >> 1);
}
#ifdef OPENCHROMEDRI
@ -1103,7 +1079,7 @@ viaDmaBlitImage(VIAPtr pVia,
bounceBuffer = ((unsigned long)src & 15);
nv12Conversion = (pVia->VideoEngine == VIDEO_ENGINE_CME &&
id == FOURCC_YV12);
(id == FOURCC_YV12 || id == FOURCC_I420));
switch (id) {
case FOURCC_YUY2:
@ -1118,6 +1094,7 @@ viaDmaBlitImage(VIAPtr pVia,
break;
case FOURCC_YV12:
case FOURCC_I420:
default:
bounceStride = ALIGN_TO(width, 16);
bounceLines = height;
@ -1129,11 +1106,11 @@ viaDmaBlitImage(VIAPtr pVia,
pPort->dmaBounceStride != bounceStride ||
pPort->dmaBounceLines != bounceLines) {
if (pPort->dmaBounceBuffer) {
xfree(pPort->dmaBounceBuffer);
free(pPort->dmaBounceBuffer);
pPort->dmaBounceBuffer = 0;
}
size = bounceStride * bounceLines + 16;
if (FOURCC_YV12 == id)
if (id == FOURCC_YV12 || id == FOURCC_I420)
size += ALIGN_TO(bounceStride >> 1, 16) * bounceLines;
pPort->dmaBounceBuffer = (unsigned char *)malloc(size);
pPort->dmaBounceLines = bounceLines;
@ -1173,7 +1150,7 @@ viaDmaBlitImage(VIAPtr pVia,
lumaSync = blit.sync;
if (id == FOURCC_YV12) {
if (id == FOURCC_YV12 || id == FOURCC_I420) {
unsigned tmp = ALIGN_TO(width >> 1, 16);
if (nv12Conversion) {
@ -1251,7 +1228,7 @@ viaPutImage(ScrnInfoPtr pScrn,
unsigned long retCode;
# ifdef XV_DEBUG
ErrorF(" via_video.c : viaPutImage : called, Screen[%d]\n", pScrn->scrnIndex);
ErrorF(" via_video.c : viaPutImage : called, Screen[%d]\n", pScrn->scrnIndex);
ErrorF(" via_video.c : FourCC=0x%x width=%d height=%d sync=%d\n", id,
width, height, sync);
ErrorF
@ -1305,6 +1282,17 @@ viaPutImage(ScrnInfoPtr pScrn,
#endif
} else {
switch (id) {
case FOURCC_I420:
if (pVia->VideoEngine == VIDEO_ENGINE_CME) {
planar420cp(pVia->swov.SWDevice.
lpSWOverlaySurface[pVia->dwFrameNum & 1],
buf, dstPitch, width, height, 1);
} else {
(*viaFastVidCpy)(pVia->swov.SWDevice.
lpSWOverlaySurface[pVia->dwFrameNum & 1],
buf, dstPitch, width, height, 0);
}
break;
case FOURCC_YV12:
if (pVia->VideoEngine == VIDEO_ENGINE_CME) {
nv12cp(pVia->swov.SWDevice.
@ -1360,11 +1348,11 @@ viaPutImage(ScrnInfoPtr pScrn,
lpUpdateOverlay->dwFlags = DDOVER_KEYDEST;
if (pScrn->bitsPerPixel == 8) {
lpUpdateOverlay->dwColorSpaceLowValue = pPriv->colorKey & 0xff;
} else {
lpUpdateOverlay->dwColorSpaceLowValue = pPriv->colorKey;
}
if (pScrn->bitsPerPixel == 8) {
lpUpdateOverlay->dwColorSpaceLowValue = pPriv->colorKey & 0xff;
} else {
lpUpdateOverlay->dwColorSpaceLowValue = pPriv->colorKey;
}
/* If use extend FIFO mode */
if (pScrn->currentMode->HDisplay > 1024) {
dwUseExtendedFIFO = 1;
@ -1390,7 +1378,8 @@ viaPutImage(ScrnInfoPtr pScrn,
&& (pPriv->old_src_w == src_w) && (pPriv->old_src_h == src_h)
&& (pVia->old_dwUseExtendedFIFO == dwUseExtendedFIFO)
&& (pVia->VideoStatus & VIDEO_SWOV_ON) &&
RegionsEqual(&pPriv->clip, clipBoxes)) {
REGION_EQUAL(pScrn->pScreen, &pPriv->clip, clipBoxes)) {
DBG_DD(ErrorF(" via_video.c : don't do UpdateOverlay! \n"));
viaXvError(pScrn, pPriv, xve_none);
return Success;
}
@ -1408,23 +1397,18 @@ viaPutImage(ScrnInfoPtr pScrn,
pVia->VideoStatus |= VIDEO_SWOV_ON;
/* BitBlt: Draw the colorkey rectangle */
if (!RegionsEqual(&pPriv->clip, clipBoxes)) {
if (!REGION_EQUAL(pScrn->pScreen, &pPriv->clip, clipBoxes)) {
REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes);
if (pPriv->autoPaint) {
if (pDraw->type == DRAWABLE_WINDOW) {
/* TODO Replace xf86XVFillKeyHelper with xf86XVFillKeyHelperDrawable
Currently resizing problem exists in VLC Media Player
Example of implementation:
xf86XVFillKeyHelperDrawable(pDraw, pPriv->colorKey, clipBoxes);
DamageDamageRegion(pDraw, clipBoxes);
*/
xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes);
xf86XVFillKeyHelperDrawable(pDraw, pPriv->colorKey, clipBoxes);
DamageDamageRegion(pDraw, clipBoxes);
} else {
xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes);
xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes);
}
}
} else {
DBG_DD(ErrorF(" via_video.c : // No need to draw Colorkey!! \n"));
} else {
DBG_DD(ErrorF(" via_video.c : // No need to draw Colorkey!! \n"));
}
/*
* Update video overlay
@ -1459,6 +1443,7 @@ viaQueryImageAttributes(ScrnInfoPtr pScrn,
DBG_DD(ErrorF(" via_video.c : viaQueryImageAttributes : FourCC=0x%x, ",
id));
DBG_DD(ErrorF(" via_video.c : Screen[%d], w=%d, h=%d\n", pScrn->scrnIndex, *w, *h));
if ((!w) || (!h))
return 0;
@ -1473,6 +1458,7 @@ viaQueryImageAttributes(ScrnInfoPtr pScrn,
offsets[0] = 0;
switch (id) {
case FOURCC_I420:
case FOURCC_YV12: /*Planar format : YV12 -4:2:0 */
*h = (*h + 1) & ~1;
size = *w;
@ -1558,6 +1544,35 @@ VIAVidAdjustFrame(ScrnInfoPtr pScrn, int x, int y)
pVia->swov.panning_y = y;
}
/*
* Blit the U and V Fields. Used to Flip the U V for I420.
*/
static void
UVBlit(unsigned char *dst,
const unsigned char *uBuffer,
const unsigned char *vBuffer,
unsigned width, unsigned srcPitch, unsigned dstPitch, unsigned lines)
{
int i, j;
dstPitch >>= 1;
for(j = 0; j < lines; j++)
{
for(i = 0; i < width; i++)
{
dst[i] = (uBuffer[i] << 8) | (vBuffer[i] << 16);
}
dst += dstPitch;
uBuffer += srcPitch;
vBuffer += srcPitch;
}
}
/*
* Blit the chroma field from one buffer to another while at the same time converting from
* YV12 to NV12.

View File

@ -44,10 +44,10 @@
#define VIDEO_BPP 2
#define V1_COMMAND_FIRE 0x80000000 /* V1 commands fire */
#define V3_COMMAND_FIRE 0x40000000 /* V3 commands fire */
#define V1_COMMAND_FIRE 0x80000000 /* V1 commands fire */
#define V3_COMMAND_FIRE 0x40000000 /* V3 commands fire */
typedef struct
{
CARD32 interruptflag; /* 200 */
@ -93,7 +93,7 @@ typedef struct
CARD32 video3_ctl; /* 2a0 */
CARD32 video3_addr0; /* 2a4 */
CARD32 video3_addr1; /* 2a8 */
CARD32 video3_stride; /* 2ac */
CARD32 video3_stride; /* 2ac */
CARD32 video3_hvstart; /* 2b0 */
CARD32 video3_size; /* 2b4 */
CARD32 v3alpha_fetch; /* 2b8 */

View File

@ -41,30 +41,42 @@ ViaSetTVClockSource(ScrnInfoPtr pScrn)
VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo;
vgaHWPtr hwp = VGAHWPTR(pScrn);
/* External TV: */
switch(pVia->Chipset) {
case VIA_CX700:
case VIA_VX800:
if (pBIOSInfo->FirstCRTC->IsActive) {
if(pBIOSInfo->TVDIPort == VIA_DI_PORT_DVP1)
ViaCrtcMask(hwp, 0x6C, 0xB0, 0xF0);
else if(pBIOSInfo->TVDIPort == VIA_DI_PORT_DVP0)
ViaCrtcMask(hwp, 0x6C, 0x90, 0xF0);
} else {
/* IGA2 */
if(pBIOSInfo->TVDIPort == VIA_DI_PORT_DVP1)
ViaCrtcMask(hwp, 0x6C, 0x0B, 0x0F);
else if(pBIOSInfo->TVDIPort == VIA_DI_PORT_DVP0)
ViaCrtcMask(hwp, 0x6C, 0x09, 0x0F);
switch(pBIOSInfo->TVEncoder) {
case VIA_VT1625:
/* External TV: */
switch(pVia->Chipset) {
case VIA_CX700:
case VIA_VX800:
case VIA_VX855:
if (pBIOSInfo->FirstCRTC->IsActive) {
if(pBIOSInfo->TVDIPort == VIA_DI_PORT_DVP1)
ViaCrtcMask(hwp, 0x6C, 0xB0, 0xF0);
else if(pBIOSInfo->TVDIPort == VIA_DI_PORT_DVP0)
ViaCrtcMask(hwp, 0x6C, 0x90, 0xF0);
} else {
/* IGA2 */
if(pBIOSInfo->TVDIPort == VIA_DI_PORT_DVP1)
ViaCrtcMask(hwp, 0x6C, 0x0B, 0x0F);
else if(pBIOSInfo->TVDIPort == VIA_DI_PORT_DVP0)
ViaCrtcMask(hwp, 0x6C, 0x09, 0x0F);
}
break;
default:
if (pBIOSInfo->FirstCRTC->IsActive)
ViaCrtcMask(hwp, 0x6C, 0x21, 0x21);
else
ViaCrtcMask(hwp, 0x6C, 0xA1, 0xA1);
break;
}
break;
default:
if (pBIOSInfo->FirstCRTC->IsActive)
ViaCrtcMask(hwp, 0x6C, 0x21, 0x21);
ViaCrtcMask(hwp, 0x6C, 0x50, 0xF0);
else
ViaCrtcMask(hwp, 0x6C, 0xA1, 0xA1);
ViaCrtcMask(hwp, 0x6C, 0x05, 0x0F);
break;
}
}
static void

View File

@ -151,7 +151,7 @@ cleanupViaXvMC(ViaXvMCPtr vXvMC, XF86VideoAdaptorPtr * XvAdaptors,
for (i = 0; i < VIA_XVMC_MAX_CONTEXTS; ++i) {
vXvMC->contexts[i] = 0;
if (vXvMC->cPrivs[i]) {
xfree(vXvMC->cPrivs[i]);
free(vXvMC->cPrivs[i]);
vXvMC->cPrivs[i] = 0;
}
}
@ -159,7 +159,7 @@ cleanupViaXvMC(ViaXvMCPtr vXvMC, XF86VideoAdaptorPtr * XvAdaptors,
for (i = 0; i < VIA_XVMC_MAX_SURFACES; ++i) {
vXvMC->surfaces[i] = 0;
if (vXvMC->sPrivs[i]) {
xfree(vXvMC->sPrivs[i]);
free(vXvMC->sPrivs[i]);
vXvMC->sPrivs[i] = 0;
}
}
@ -270,7 +270,7 @@ static XF86ImagePtr Via_subpicture_list[2] = {
/*
* Filling in the device dependent adaptor record.
* This is named "VIA Video Overlay" because this code falls under the
* XV extenstion, the name must match or it won't be used.
* XV extension, the name must match or it won't be used.
*
* For surface and subpicture, see above.
* The function pointers point to functions below.
@ -325,10 +325,11 @@ ViaInitXVMC(ScreenPtr pScreen)
if ((pVia->Chipset == VIA_KM400) ||
(pVia->Chipset == VIA_CX700) ||
(pVia->Chipset == VIA_K8M890) ||
(pVia->Chipset == VIA_P4M900) ||
(pVia->Chipset == VIA_VX800) ||
(pVia->Chipset == VIA_VX855) ||
(pVia->Chipset == VIA_K8M890) ||
(pVia->Chipset == VIA_P4M900)) {
(pVia->Chipset == VIA_VX900)) {
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
"[XvMC] XvMC is not supported on this chipset.\n");
return;
@ -424,7 +425,7 @@ ViaCleanupXVMC(ScrnInfoPtr pScrn, XF86VideoAdaptorPtr * XvAdaptors,
viaPortPrivPtr pPriv = XvAdaptors[i]->pPortPrivates[j].ptr;
if (pPriv->xvmc_priv)
xfree(pPriv->xvmc_priv);
free(pPriv->xvmc_priv);
}
}
pVia->XvMCEnabled = 0;
@ -460,7 +461,7 @@ ViaXvMCCreateContext(ScrnInfoPtr pScrn, XvMCContextPtr pContext,
return BadAlloc;
}
*priv = xcalloc(1, sizeof(ViaXvMCCreateContextRec));
*priv = calloc(1, sizeof(ViaXvMCCreateContextRec));
contextRec = (ViaXvMCCreateContextRec *) * priv;
if (!*priv) {
@ -475,12 +476,12 @@ ViaXvMCCreateContext(ScrnInfoPtr pScrn, XvMCContextPtr pContext,
break;
}
cPriv = (ViaXvMCContextPriv *) xcalloc(1, sizeof(ViaXvMCContextPriv));
cPriv = (ViaXvMCContextPriv *) calloc(1, sizeof(ViaXvMCContextPriv));
if (!cPriv) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"[XvMC] ViaXvMCCreateContext: Unable to allocate memory!\n");
xfree(*priv);
free(*priv);
*num_priv = 0;
return BadAlloc;
}
@ -532,7 +533,7 @@ ViaXvMCCreateSurface(ScrnInfoPtr pScrn, XvMCSurfacePtr pSurf,
return BadAlloc;
}
sPriv = (ViaXvMCSurfacePriv *) xcalloc(1, sizeof(ViaXvMCSurfacePriv));
sPriv = (ViaXvMCSurfacePriv *) calloc(1, sizeof(ViaXvMCSurfacePriv));
if (!sPriv) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
@ -566,13 +567,13 @@ ViaXvMCCreateSurface(ScrnInfoPtr pScrn, XvMCSurfacePtr pSurf,
#endif
*num_priv = numBuffers + 2;
*priv = (INT32 *) xcalloc(*num_priv, sizeof(INT32));
*priv = (INT32 *) calloc(*num_priv, sizeof(INT32));
if (!*priv) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"[XvMC] ViaXvMCCreateSurface: Unable to allocate memory!\n");
*num_priv = 0;
xfree(sPriv);
free(sPriv);
return BadAlloc;
}
@ -588,8 +589,8 @@ ViaXvMCCreateSurface(ScrnInfoPtr pScrn, XvMCSurfacePtr pSurf,
sPriv->memory_ref.pool = 0;
if (VIAAllocLinear(&(sPriv->memory_ref), pScrn,
numBuffers * bufSize + 32)) {
xfree(*priv);
xfree(sPriv);
free(*priv);
free(sPriv);
xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[XvMC] ViaXvMCCreateSurface: "
"Unable to allocate frambuffer memory!\n");
return BadAlloc;
@ -631,7 +632,7 @@ ViaXvMCCreateSubpicture(ScrnInfoPtr pScrn, XvMCSubpicturePtr pSubp,
return BadAlloc;
}
sPriv = (ViaXvMCSurfacePriv *) xcalloc(1, sizeof(ViaXvMCSurfacePriv));
sPriv = (ViaXvMCSurfacePriv *) calloc(1, sizeof(ViaXvMCSurfacePriv));
if (!sPriv) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[XvMC] ViaXvMCCreateSubpicture:"
@ -640,13 +641,13 @@ ViaXvMCCreateSubpicture(ScrnInfoPtr pScrn, XvMCSubpicturePtr pSubp,
return BadAlloc;
}
*priv = (INT32 *) xcalloc(3, sizeof(INT32));
*priv = (INT32 *) calloc(3, sizeof(INT32));
if (!*priv) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[XvMC] ViaXvMCCreateSubpicture:"
" Unable to allocate memory!\n");
*num_priv = 0;
xfree(sPriv);
free(sPriv);
return BadAlloc;
}
@ -663,8 +664,8 @@ ViaXvMCCreateSubpicture(ScrnInfoPtr pScrn, XvMCSubpicturePtr pSubp,
bufSize = size_xx44(ctx->width, ctx->height);
sPriv->memory_ref.pool = 0;
if (VIAAllocLinear(&(sPriv->memory_ref), pScrn, 1 * bufSize + 32)) {
xfree(*priv);
xfree(sPriv);
free(*priv);
free(sPriv);
xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[XvMC] ViaXvMCCreateSubpicture:"
" Unable to allocate framebuffer memory!\n");
return BadAlloc;
@ -701,7 +702,7 @@ ViaXvMCDestroyContext(ScrnInfoPtr pScrn, XvMCContextPtr pContext)
vx->ctxDisplaying = 0;
}
xfree(vXvMC->cPrivs[i]);
free(vXvMC->cPrivs[i]);
vXvMC->cPrivs[i] = 0;
vXvMC->nContexts--;
vXvMC->contexts[i] = 0;
@ -736,7 +737,7 @@ ViaXvMCDestroySurface(ScrnInfoPtr pScrn, XvMCSurfacePtr pSurf)
}
VIAFreeLinear(&(vXvMC->sPrivs[i]->memory_ref));
xfree(vXvMC->sPrivs[i]);
free(vXvMC->sPrivs[i]);
vXvMC->nSurfaces--;
vXvMC->sPrivs[i] = 0;
vXvMC->surfaces[i] = 0;
@ -778,7 +779,7 @@ ViaXvMCDestroySubpicture(ScrnInfoPtr pScrn, XvMCSubpicturePtr pSubp)
}
VIAFreeLinear(&(vXvMC->sPrivs[i]->memory_ref));
xfree(vXvMC->sPrivs[i]);
free(vXvMC->sPrivs[i]);
vXvMC->nSurfaces--;
vXvMC->sPrivs[i] = 0;
vXvMC->surfaces[i] = 0;
@ -828,7 +829,7 @@ viaXvMCInitXv(ScrnInfoPtr pScrn, XF86VideoAdaptorPtr XvAdapt)
for (j = 0; j < XvAdapt->nPorts; ++j) {
pPriv = (viaPortPrivPtr) XvAdapt->pPortPrivates[j].ptr;
if (NULL == (pPriv->xvmc_priv = xcalloc(1, sizeof(ViaXvMCXVPriv))))
if (NULL == (pPriv->xvmc_priv = calloc(1, sizeof(ViaXvMCXVPriv))))
return BadAlloc;
for (i = 0; i < VIA_NUM_XVMC_ATTRIBUTES; ++i) {

View File

@ -0,0 +1,6 @@
if TOOLS
bin_PROGRAMS = via_regs_dump
via_regs_dump_SOURCES = registers.c
else
EXTRA_DIST = registers.c
endif

View File

@ -0,0 +1,504 @@
# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = ${SHELL} $(install_sh) -c -m 644
install_sh_PROGRAM = ${SHELL} $(install_sh) -c
install_sh_SCRIPT = ${SHELL} $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
@TOOLS_TRUE@bin_PROGRAMS = via_regs_dump$(EXEEXT)
subdir = tools
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
PROGRAMS = $(bin_PROGRAMS)
am__via_regs_dump_SOURCES_DIST = registers.c
@TOOLS_TRUE@am_via_regs_dump_OBJECTS = registers.$(OBJEXT)
via_regs_dump_OBJECTS = $(am_via_regs_dump_OBJECTS)
via_regs_dump_LDADD = $(LDADD)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(via_regs_dump_SOURCES)
DIST_SOURCES = $(am__via_regs_dump_SOURCES_DIST)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
APP_MAN_DIR = @APP_MAN_DIR@
APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BASE_CFLAGS = @BASE_CFLAGS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CHANGELOG_CMD = @CHANGELOG_CMD@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CWARNFLAGS = @CWARNFLAGS@
CYGPATH_W = @CYGPATH_W@
DEBUG_FALSE = @DEBUG_FALSE@
DEBUG_TRUE = @DEBUG_TRUE@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
DRIVER_NAME = @DRIVER_NAME@
DRI_CFLAGS = @DRI_CFLAGS@
DRI_FALSE = @DRI_FALSE@
DRI_LIBS = @DRI_LIBS@
DRI_TRUE = @DRI_TRUE@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
FILE_MAN_DIR = @FILE_MAN_DIR@
FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
GREP = @GREP@
HAVE_XEXTPROTO_71_FALSE = @HAVE_XEXTPROTO_71_FALSE@
HAVE_XEXTPROTO_71_TRUE = @HAVE_XEXTPROTO_71_TRUE@
INSTALL_CMD = @INSTALL_CMD@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIB_MAN_DIR = @LIB_MAN_DIR@
LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MAN_SUBSTS = @MAN_SUBSTS@
MISC_MAN_DIR = @MISC_MAN_DIR@
MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PCIACCESS_CFLAGS = @PCIACCESS_CFLAGS@
PCIACCESS_LIBS = @PCIACCESS_LIBS@
PKG_CONFIG = @PKG_CONFIG@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRICT_CFLAGS = @STRICT_CFLAGS@
STRIP = @STRIP@
TOOLS_FALSE = @TOOLS_FALSE@
TOOLS_TRUE = @TOOLS_TRUE@
VERSION = @VERSION@
XEXT_CFLAGS = @XEXT_CFLAGS@
XEXT_LIBS = @XEXT_LIBS@
XORG_CFLAGS = @XORG_CFLAGS@
XORG_LIBS = @XORG_LIBS@
XORG_MAN_PAGE = @XORG_MAN_PAGE@
XSERVER_LIBPCIACCESS_FALSE = @XSERVER_LIBPCIACCESS_FALSE@
XSERVER_LIBPCIACCESS_TRUE = @XSERVER_LIBPCIACCESS_TRUE@
XVMC_CFLAGS = @XVMC_CFLAGS@
XVMC_FALSE = @XVMC_FALSE@
XVMC_LIBS = @XVMC_LIBS@
XVMC_TRUE = @XVMC_TRUE@
XV_DEBUG_FALSE = @XV_DEBUG_FALSE@
XV_DEBUG_TRUE = @XV_DEBUG_TRUE@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
moduledir = @moduledir@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
@TOOLS_TRUE@via_regs_dump_SOURCES = registers.c
@TOOLS_FALSE@EXTRA_DIST = registers.c
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu tools/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
@list='$(bin_PROGRAMS)'; for p in $$list; do \
p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
if test -f $$p \
|| test -f $$p1 \
; then \
f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
$(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
else :; fi; \
done
uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
rm -f "$(DESTDIR)$(bindir)/$$f"; \
done
clean-binPROGRAMS:
@list='$(bin_PROGRAMS)'; for p in $$list; do \
f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
echo " rm -f $$p $$f"; \
rm -f $$p $$f ; \
done
via_regs_dump$(EXEEXT): $(via_regs_dump_OBJECTS) $(via_regs_dump_DEPENDENCIES)
@rm -f via_regs_dump$(EXEEXT)
$(LINK) $(via_regs_dump_LDFLAGS) $(via_regs_dump_OBJECTS) $(via_regs_dump_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/registers.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(PROGRAMS)
installdirs:
for dir in "$(DESTDIR)$(bindir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-libtool distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am:
install-exec-am: install-binPROGRAMS
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-binPROGRAMS uninstall-info-am
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
clean-generic clean-libtool ctags distclean distclean-compile \
distclean-generic distclean-libtool distclean-tags distdir dvi \
dvi-am html html-am info info-am install install-am \
install-binPROGRAMS install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
pdf pdf-am ps ps-am tags uninstall uninstall-am \
uninstall-binPROGRAMS uninstall-info-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

File diff suppressed because it is too large Load Diff