Update to xf86-video-nv 2.1.17.

This commit is contained in:
matthieu 2010-05-24 09:45:39 +00:00
parent bd38ae49de
commit 1603c57ad4
28 changed files with 4067 additions and 2455 deletions

View File

@ -1,3 +1,188 @@
commit 71321d0ddecf1ab5327c754353d31db5d1f3c6bf
Author: Aaron Plattner <aplattner@nvidia.com>
Date: Mon Mar 8 13:34:20 2010 -0800
nv 2.1.17
Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
commit 467f0f3890622e57607b103b07e4f265cf999b1e
Author: Aaron Plattner <aplattner@nvidia.com>
Date: Mon Mar 8 13:16:26 2010 -0800
More products
Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
Reviewed-by: Andy Ritger <ARitger@nvidia.com>
commit e34a53167d6a142949b3e0258dc336dc297368aa
Author: Aaron Plattner <aplattner@nvidia.com>
Date: Fri Mar 5 14:27:31 2010 -0800
G80: Cast register reads before shifting them to avoid truncation to 32 bits.
Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
commit 9378ecd34ad71083602232b56e8810d6cd39b518
Author: Aaron Plattner <aplattner@nvidia.com>
Date: Wed Mar 3 20:29:55 2010 -0800
Bug #19545: Add support for MCP7x-based integrated GPUs.
Based in part on an idea from Ben Skeggs.
Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
Signed-off-by: Andy Ritger <aritger@nvidia.com>
Reviewed-by: Christian Zander <chzander@nvidia.com>
commit 49349f6e47b7315088a80789f134895677f57287
Author: Aaron Plattner <aplattner@nvidia.com>
Date: Tue Mar 2 12:53:54 2010 -0800
G80: Log unrecognized outputs
Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
Reviewed-by: Andy Ritger <aritger@nvidia.com>
commit 7b01fc8f4ba1182370980f54a34bdb959e291e02
Author: Aaron Plattner <aplattner@nvidia.com>
Date: Mon Mar 1 14:26:51 2010 -0800
Bug #26612: Separate LUTs per output.
Wire up the RandR 1.2 gamma_set hook. Call it from G80SetPalette like the Intel
driver does.
Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
Signed-off-by: Andy Ritger <aritger@nvidia.com>
Reviewed-by: Christian Zander <chzander@nvidia.com>
commit e6f4c9c6379b20b9fee50489d6afd05867c35967
Author: Alan Coopersmith <alan.coopersmith@sun.com>
Date: Fri Jan 15 13:46:50 2010 -0800
Update Sun license notices to current X.Org standard form
Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
commit 893cee2aeda8074de3d5c99df90e23d6ec2217d2
Author: Gaetan Nadon <memsize@videotron.ca>
Date: Tue Dec 15 22:01:02 2009 -0500
configure.ac: remove unused sdkdir=$(pkg-config...) statement
The sdkdir variable isn't use, so remove the statement.
Acked-by: Dan Nicholson <dbn.lists@gmail.com>
Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
commit 2b69212ff84e8b815d6915dc81644280cc92cbe7
Author: Aaron Plattner <aplattner@nvidia.com>
Date: Tue Dec 15 10:48:33 2009 -0800
nv 2.1.16
commit 99ed1c83f78b3b947d95aa9f0d3b5555d9a2a769
Author: Aaron Plattner <aplattner@nvidia.com>
Date: Tue Dec 15 10:17:27 2009 -0800
New board names
Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
commit 5eb01497139ead89c7262a6055a4fd293c5beb3e
Author: Aaron Plattner <aplattner@nvidia.com>
Date: Tue Dec 15 10:16:51 2009 -0800
Remove an unnecessary (and typo'd) gitignore comment
commit 85638b2f0acc418aa77241dd123f7de76ea3ce8f
Author: Adam Jackson <ajax@redhat.com>
Date: Tue Dec 15 16:42:15 2009 -0500
g80: Add a no-op gamma hook so we don't crash on 1.7 servers
Signed-off-by: Adam Jackson <ajax@redhat.com>
commit d3ba2a45ed21f60667716be0cdcb6a7888263ffd
Author: Gaetan Nadon <memsize@videotron.ca>
Date: Mon Nov 23 09:25:05 2009 -0500
Makefile.am: add ChangeLog and INSTALL on MAINTAINERCLEANFILES
Now that the INSTALL file is generated.
Allows running make maintainer-clean.
commit 8664df401ff26718608e0bfc319514387d232771
Author: Gaetan Nadon <memsize@videotron.ca>
Date: Wed Oct 28 14:41:41 2009 -0400
INSTALL, NEWS, README or AUTHORS files are missing/incorrect #24206
Automake 'foreign' option is specified in configure.ac.
Remove from Makefile.am
commit bbb016dfdca06c34bdc163ee772284a5fc1f1139
Author: Gaetan Nadon <memsize@videotron.ca>
Date: Wed Oct 28 14:09:09 2009 -0400
INSTALL, NEWS, README or AUTHORS files are missing/incorrect #24206
Add missing INSTALL file. Use standard GNU file on building tarball
README may have been updated
Remove AUTHORS file as it is empty and no content available yet.
Remove NEWS file as it is empty and no content available yet.
commit ee24fd1773268e0a593c7de760bafa282f3489a2
Author: Gaetan Nadon <memsize@videotron.ca>
Date: Mon Oct 26 12:54:21 2009 -0400
Several driver modules do not have a ChangeLog target in Makefile.am #23814
The git generated ChangeLog replaces the hand written one.
Update configure.ac to xorg-macros level 1.3.
Use XORG_DEFAULT_OPTIONS which replaces four XORG_* macros
Update Makefile.am to add ChangeLog target if missing
Remove ChangeLog from EXTRA_DIST or *CLEAN variables
This is a pre-req for the INSTALL_CMD
commit 57c505852bcf38dc3a3e6a9d603e4a8fd9ed3b80
Author: Gaetan Nadon <memsize@videotron.ca>
Date: Thu Oct 22 13:02:49 2009 -0400
.gitignore: use common defaults with custom section # 24239
Using common defaults will reduce errors and maintenance.
Only the very small or inexistent custom section need periodic maintenance
when the structure of the component changes. Do not edit defaults.
commit f07ed67a9e14ddc42a96756fbe69cf927c308d1c
Author: Gaetan Nadon <memsize@videotron.ca>
Date: Thu Oct 22 12:34:17 2009 -0400
.gitignore: use common defaults with custom section # 24239
Using common defaults will reduce errors and maintenance.
Only the very small or inexistent custom section need periodic maintenance
when the structure of the component changes. Do not edit defaults.
commit b30ec386abb7219be50c7aa42db9f08f12fe5c8c
Author: Aaron Plattner <aplattner@nvidia.com>
Date: Tue Nov 10 12:17:23 2009 -0800
More new boards
Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
commit f050096ad3c9ef4484b69c22217efe0557f16e35
Author: Aaron Plattner <aplattner@nvidia.com>
Date: Mon Nov 9 16:16:19 2009 -0800
New boards
Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
commit 0250f0d7ebe30368c5a63809ed1f58673493627c commit 0250f0d7ebe30368c5a63809ed1f58673493627c
Author: Peter Hutterer <peter.hutterer@who-t.net> Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Fri Sep 11 12:24:18 2009 +1000 Date: Fri Sep 11 12:24:18 2009 +1000

View File

@ -0,0 +1,291 @@
Installation Instructions
*************************
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
2006, 2007, 2008 Free Software Foundation, Inc.
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
Basic Installation
==================
Briefly, the shell commands `./configure; make; make install' should
configure, build, and install this package. The following
more-detailed instructions are generic; see the `README' file for
instructions specific to this package.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for
debugging `configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. Caching is
disabled by default to prevent problems with accidental use of stale
cache files.
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You need `configure.ac' if
you want to change it or regenerate `configure' using a newer version
of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system.
Running `configure' might take a while. While running, it prints
some messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
6. Often, you can also type `make uninstall' to remove the installed
files again.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. Run `./configure --help'
for details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
./configure CC=c99 CFLAGS=-g LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you can use GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
With a non-GNU `make', it is safer to compile the package for one
architecture at a time in the source code directory. After you have
installed the package for one architecture, use `make distclean' before
reconfiguring for another architecture.
On MacOS X 10.5 and later systems, you can create libraries and
executables that work on multiple system types--known as "fat" or
"universal" binaries--by specifying multiple `-arch' options to the
compiler but only a single `-arch' option to the preprocessor. Like
this:
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CPP="gcc -E" CXXCPP="g++ -E"
This is not guaranteed to produce working output in all cases, you
may have to build one architecture at a time and combine the results
using the `lipo' tool if you have problems.
Installation Names
==================
By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
PREFIX as the prefix for installing programs and libraries.
Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Particular systems
==================
On HP-UX, the default C compiler is not ANSI C compatible. If GNU
CC is not installed, it is recommended to use the following options in
order to use an ANSI C compiler:
./configure CC="cc -Ae"
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
parse its `<wchar.h>' header file. The option `-nodtk' can be used as
a workaround. If GNU CC is not installed, it is therefore recommended
to try
./configure CC="cc"
and if that doesn't work, try
./configure CC="cc -nodtk"
Specifying the System Type
==========================
There may be some features `configure' cannot figure out
automatically, but needs to determine by the type of machine the package
will run on. Usually, assuming the package is built to be run on the
_same_ architectures, `configure' can figure that out, but if it prints
a message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM
where SYSTEM can have one of these forms:
OS KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the option `--target=TYPE' to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is
overridden in the site shell script).
Unfortunately, this technique does not work for `CONFIG_SHELL' due to
an Autoconf bug. Until the bug is fixed you can use this workaround:
CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
`configure' Invocation
======================
`configure' recognizes the following options to control how it
operates.
`--help'
`-h'
Print a summary of all of the options to `configure', and exit.
`--help=short'
`--help=recursive'
Print a summary of the options unique to this package's
`configure', and exit. The `short' variant lists options used
only in the top level, while the `recursive' variant lists options
also present in any nested packages.
`--version'
`-V'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE,
traditionally `config.cache'. FILE defaults to `/dev/null' to
disable caching.
`--config-cache'
`-C'
Alias for `--cache-file=config.cache'.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`--prefix=DIR'
Use DIR as the installation prefix. *Note Installation Names::
for more details, including other options available for fine-tuning
the installation locations.
`--no-create'
`-n'
Run the configure checks, but stop before creating any output
files.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.

View File

@ -18,15 +18,17 @@
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
AUTOMAKE_OPTIONS = foreign
SUBDIRS = src man compat SUBDIRS = src man compat
MAINTAINERCLEANFILES = ChangeLog INSTALL
EXTRA_DIST = README.G80 ChangeLog EXTRA_DIST = README.G80
CLEANFILES = ChangeLog .PHONY: ChangeLog INSTALL
.PHONY: ChangeLog
INSTALL:
$(INSTALL_CMD)
ChangeLog: ChangeLog:
$(CHANGELOG_CMD) $(CHANGELOG_CMD)
dist-hook: ChangeLog dist-hook: ChangeLog INSTALL

View File

@ -57,7 +57,7 @@ build_triplet = @build@
host_triplet = @host@ host_triplet = @host@
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \
$(top_srcdir)/configure COPYING ChangeLog config.guess \ $(top_srcdir)/configure COPYING ChangeLog INSTALL config.guess \
config.sub depcomp install-sh ltmain.sh missing config.sub depcomp install-sh ltmain.sh missing
subdir = . subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@ -90,12 +90,14 @@ am__remove_distdir = \
DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
GZIP_ENV = --best GZIP_ENV = --best
distuninstallcheck_listfiles = find . -type f -print distuninstallcheck_listfiles = find . -type f -print
distcleancheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@ ACLOCAL = @ACLOCAL@
ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@ AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@ AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_DIR = @APP_MAN_DIR@
APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
AR = @AR@ AR = @AR@
@ -111,6 +113,7 @@ CFLAGS = @CFLAGS@
CHANGELOG_CMD = @CHANGELOG_CMD@ CHANGELOG_CMD = @CHANGELOG_CMD@
CPP = @CPP@ CPP = @CPP@
CPPFLAGS = @CPPFLAGS@ CPPFLAGS = @CPPFLAGS@
CWARNFLAGS = @CWARNFLAGS@
CXX = @CXX@ CXX = @CXX@
CXXCPP = @CXXCPP@ CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@ CXXDEPMODE = @CXXDEPMODE@
@ -135,6 +138,7 @@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
GREP = @GREP@ GREP = @GREP@
HAVE_XEXTPROTO_71_FALSE = @HAVE_XEXTPROTO_71_FALSE@ HAVE_XEXTPROTO_71_FALSE = @HAVE_XEXTPROTO_71_FALSE@
HAVE_XEXTPROTO_71_TRUE = @HAVE_XEXTPROTO_71_TRUE@ HAVE_XEXTPROTO_71_TRUE = @HAVE_XEXTPROTO_71_TRUE@
INSTALL_CMD = @INSTALL_CMD@
INSTALL_DATA = @INSTALL_DATA@ INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
@ -196,7 +200,6 @@ build_os = @build_os@
build_vendor = @build_vendor@ build_vendor = @build_vendor@
datadir = @datadir@ datadir = @datadir@
datarootdir = @datarootdir@ datarootdir = @datarootdir@
distcleancheck_listfiles = @distcleancheck_listfiles@
docdir = @docdir@ docdir = @docdir@
dvidir = @dvidir@ dvidir = @dvidir@
exec_prefix = @exec_prefix@ exec_prefix = @exec_prefix@
@ -227,10 +230,9 @@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@ sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@ sysconfdir = @sysconfdir@
target_alias = @target_alias@ target_alias = @target_alias@
AUTOMAKE_OPTIONS = foreign
SUBDIRS = src man compat SUBDIRS = src man compat
EXTRA_DIST = README.G80 ChangeLog MAINTAINERCLEANFILES = ChangeLog INSTALL
CLEANFILES = ChangeLog EXTRA_DIST = README.G80
all: config.h all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive $(MAKE) $(AM_MAKEFLAGS) all-recursive
@ -594,7 +596,6 @@ install-strip:
mostlyclean-generic: mostlyclean-generic:
clean-generic: clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic: distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@ -602,6 +603,7 @@ distclean-generic:
maintainer-clean-generic: maintainer-clean-generic:
@echo "This command is intended for maintainers to use" @echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild." @echo "it deletes files that may require special tools to rebuild."
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-recursive clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am clean-am: clean-generic clean-libtool mostlyclean-am
@ -669,12 +671,16 @@ uninstall-info: uninstall-info-recursive
mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
tags tags-recursive uninstall uninstall-am uninstall-info-am tags tags-recursive uninstall uninstall-am uninstall-info-am
.PHONY: ChangeLog
.PHONY: ChangeLog INSTALL
INSTALL:
$(INSTALL_CMD)
ChangeLog: ChangeLog:
$(CHANGELOG_CMD) $(CHANGELOG_CMD)
dist-hook: ChangeLog dist-hook: ChangeLog INSTALL
# Tell versions [3.59,3.63) of GNU make to not export all variables. # 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. # Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: .NOEXPORT:

View File

@ -7636,29 +7636,23 @@ dnl
dnl Copyright 2005-2006 Sun Microsystems, Inc. All rights reserved. dnl Copyright 2005-2006 Sun Microsystems, Inc. All rights reserved.
dnl dnl
dnl Permission is hereby granted, free of charge, to any person obtaining a dnl Permission is hereby granted, free of charge, to any person obtaining a
dnl copy of this software and associated documentation files (the dnl copy of this software and associated documentation files (the "Software"),
dnl "Software"), to deal in the Software without restriction, including dnl to deal in the Software without restriction, including without limitation
dnl without limitation the rights to use, copy, modify, merge, publish, dnl the rights to use, copy, modify, merge, publish, distribute, sublicense,
dnl distribute, and/or sell copies of the Software, and to permit persons dnl and/or sell copies of the Software, and to permit persons to whom the
dnl to whom the Software is furnished to do so, provided that the above dnl Software is furnished to do so, subject to the following conditions:
dnl copyright notice(s) and this permission notice appear in all copies of
dnl the Software and that both the above copyright notice(s) and this
dnl permission notice appear in supporting documentation.
dnl dnl
dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS dnl The above copyright notice and this permission notice (including the next
dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF dnl paragraph) shall be included in all copies or substantial portions of the
dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT dnl Software.
dnl OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
dnl HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
dnl INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
dnl FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
dnl NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
dnl WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
dnl dnl
dnl Except as contained in this notice, the name of a copyright holder dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
dnl shall not be used in advertising or otherwise to promote the sale, use dnl IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
dnl or other dealings in this Software without prior written authorization dnl FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
dnl of the copyright holder. dnl THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
dnl LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
dnl FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
dnl DEALINGS IN THE SOFTWARE.
# XORG_MACROS_VERSION(required-version) # XORG_MACROS_VERSION(required-version)
# ------------------------------------- # -------------------------------------
@ -7676,7 +7670,7 @@ dnl of the copyright holder.
# See the "minimum version" comment for each macro you use to see what # See the "minimum version" comment for each macro you use to see what
# version you require. # version you require.
m4_defun([XORG_MACROS_VERSION],[ m4_defun([XORG_MACROS_VERSION],[
m4_define([vers_have], [1.3.0]) m4_define([vers_have], [1.7.0])
m4_define([maj_have], m4_substr(vers_have, 0, m4_index(vers_have, [.]))) m4_define([maj_have], m4_substr(vers_have, 0, m4_index(vers_have, [.])))
m4_define([maj_needed], m4_substr([$1], 0, m4_index([$1], [.]))) m4_define([maj_needed], m4_substr([$1], 0, m4_index([$1], [.])))
m4_if(m4_cmp(maj_have, maj_needed), 0,, m4_if(m4_cmp(maj_have, maj_needed), 0,,
@ -7817,6 +7811,31 @@ AC_SUBST([DRIVER_MAN_DIR])
AC_SUBST([ADMIN_MAN_DIR]) AC_SUBST([ADMIN_MAN_DIR])
]) # XORG_MANPAGE_SECTIONS ]) # XORG_MANPAGE_SECTIONS
# XORG_CHECK_SGML_DOCTOOLS
# ------------------------
# Minimum version: 1.7.0
#
# Defines the variable XORG_SGML_PATH containing the location of X11/defs.ent
# provided by xorg-sgml-doctools, if installed.
AC_DEFUN([XORG_CHECK_SGML_DOCTOOLS],[
AC_MSG_CHECKING([for X.Org SGML entities])
XORG_SGML_PATH=
PKG_CHECK_EXISTS([xorg-sgml-doctools],
[XORG_SGML_PATH=`$PKG_CONFIG --variable=sgmlrootdir xorg-sgml-doctools`],
[if test x"$cross_compiling" != x"yes" ; then
AC_CHECK_FILE([$prefix/share/sgml/X11/defs.ent],
[XORG_SGML_PATH=$prefix/share/sgml])
fi])
if test "x$XORG_SGML_PATH" != "x" ; then
AC_MSG_RESULT([$XORG_SGML_PATH])
else
AC_MSG_RESULT([no])
fi
AC_SUBST(XORG_SGML_PATH)
]) # XORG_CHECK_SGML_DOCTOOLS
# XORG_CHECK_LINUXDOC # XORG_CHECK_LINUXDOC
# ------------------- # -------------------
# Minimum version: 1.0.0 # Minimum version: 1.0.0
@ -7826,23 +7845,14 @@ AC_SUBST([ADMIN_MAN_DIR])
# Whether or not the necessary tools and files are found can be checked # Whether or not the necessary tools and files are found can be checked
# with the AM_CONDITIONAL "BUILD_LINUXDOC" # with the AM_CONDITIONAL "BUILD_LINUXDOC"
AC_DEFUN([XORG_CHECK_LINUXDOC],[ AC_DEFUN([XORG_CHECK_LINUXDOC],[
if test x$XORG_SGML_PATH = x ; then AC_REQUIRE([XORG_CHECK_SGML_DOCTOOLS])
XORG_SGML_PATH=$prefix/share/sgml
fi
HAVE_DEFS_ENT=
if test x"$cross_compiling" = x"yes" ; then
HAVE_DEFS_ENT=no
else
AC_CHECK_FILE([$XORG_SGML_PATH/X11/defs.ent], [HAVE_DEFS_ENT=yes])
fi
AC_PATH_PROG(LINUXDOC, linuxdoc) AC_PATH_PROG(LINUXDOC, linuxdoc)
AC_PATH_PROG(PS2PDF, ps2pdf) AC_PATH_PROG(PS2PDF, ps2pdf)
AC_MSG_CHECKING([Whether to build documentation]) AC_MSG_CHECKING([whether to build documentation])
if test x$HAVE_DEFS_ENT != x && test x$LINUXDOC != x ; then if test x$XORG_SGML_PATH != x && test x$LINUXDOC != x ; then
BUILDDOC=yes BUILDDOC=yes
else else
BUILDDOC=no BUILDDOC=no
@ -7852,7 +7862,7 @@ AM_CONDITIONAL(BUILD_LINUXDOC, [test x$BUILDDOC = xyes])
AC_MSG_RESULT([$BUILDDOC]) AC_MSG_RESULT([$BUILDDOC])
AC_MSG_CHECKING([Whether to build pdf documentation]) AC_MSG_CHECKING([whether to build pdf documentation])
if test x$PS2PDF != x && test x$BUILD_PDFDOC != xno; then if test x$PS2PDF != x && test x$BUILD_PDFDOC != xno; then
BUILDPDFDOC=yes BUILDPDFDOC=yes
@ -7884,48 +7894,44 @@ AC_SUBST(MAKE_HTML)
# indicates whether the necessary tools and files are found and, if set, # indicates whether the necessary tools and files are found and, if set,
# $(MAKE_XXX) blah.sgml will produce blah.xxx. # $(MAKE_XXX) blah.sgml will produce blah.xxx.
AC_DEFUN([XORG_CHECK_DOCBOOK],[ AC_DEFUN([XORG_CHECK_DOCBOOK],[
if test x$XORG_SGML_PATH = x ; then AC_REQUIRE([XORG_CHECK_SGML_DOCTOOLS])
XORG_SGML_PATH=$prefix/share/sgml
fi
HAVE_DEFS_ENT=
BUILDTXTDOC=no BUILDTXTDOC=no
BUILDPDFDOC=no BUILDPDFDOC=no
BUILDPSDOC=no BUILDPSDOC=no
BUILDHTMLDOC=no BUILDHTMLDOC=no
AC_CHECK_FILE([$XORG_SGML_PATH/X11/defs.ent], [HAVE_DEFS_ENT=yes])
AC_PATH_PROG(DOCBOOKPS, docbook2ps) AC_PATH_PROG(DOCBOOKPS, docbook2ps)
AC_PATH_PROG(DOCBOOKPDF, docbook2pdf) AC_PATH_PROG(DOCBOOKPDF, docbook2pdf)
AC_PATH_PROG(DOCBOOKHTML, docbook2html) AC_PATH_PROG(DOCBOOKHTML, docbook2html)
AC_PATH_PROG(DOCBOOKTXT, docbook2txt) AC_PATH_PROG(DOCBOOKTXT, docbook2txt)
AC_MSG_CHECKING([Whether to build text documentation]) AC_MSG_CHECKING([whether to build text documentation])
if test x$HAVE_DEFS_ENT != x && test x$DOCBOOKTXT != x && if test x$XORG_SGML_PATH != x && test x$DOCBOOKTXT != x &&
test x$BUILD_TXTDOC != xno; then test x$BUILD_TXTDOC != xno; then
BUILDTXTDOC=yes BUILDTXTDOC=yes
fi fi
AM_CONDITIONAL(BUILD_TXTDOC, [test x$BUILDTXTDOC = xyes]) AM_CONDITIONAL(BUILD_TXTDOC, [test x$BUILDTXTDOC = xyes])
AC_MSG_RESULT([$BUILDTXTDOC]) AC_MSG_RESULT([$BUILDTXTDOC])
AC_MSG_CHECKING([Whether to build PDF documentation]) AC_MSG_CHECKING([whether to build PDF documentation])
if test x$HAVE_DEFS_ENT != x && test x$DOCBOOKPDF != x && if test x$XORG_SGML_PATH != x && test x$DOCBOOKPDF != x &&
test x$BUILD_PDFDOC != xno; then test x$BUILD_PDFDOC != xno; then
BUILDPDFDOC=yes BUILDPDFDOC=yes
fi fi
AM_CONDITIONAL(BUILD_PDFDOC, [test x$BUILDPDFDOC = xyes]) AM_CONDITIONAL(BUILD_PDFDOC, [test x$BUILDPDFDOC = xyes])
AC_MSG_RESULT([$BUILDPDFDOC]) AC_MSG_RESULT([$BUILDPDFDOC])
AC_MSG_CHECKING([Whether to build PostScript documentation]) AC_MSG_CHECKING([whether to build PostScript documentation])
if test x$HAVE_DEFS_ENT != x && test x$DOCBOOKPS != x && if test x$XORG_SGML_PATH != x && test x$DOCBOOKPS != x &&
test x$BUILD_PSDOC != xno; then test x$BUILD_PSDOC != xno; then
BUILDPSDOC=yes BUILDPSDOC=yes
fi fi
AM_CONDITIONAL(BUILD_PSDOC, [test x$BUILDPSDOC = xyes]) AM_CONDITIONAL(BUILD_PSDOC, [test x$BUILDPSDOC = xyes])
AC_MSG_RESULT([$BUILDPSDOC]) AC_MSG_RESULT([$BUILDPSDOC])
AC_MSG_CHECKING([Whether to build HTML documentation]) AC_MSG_CHECKING([whether to build HTML documentation])
if test x$HAVE_DEFS_ENT != x && test x$DOCBOOKHTML != x && if test x$XORG_SGML_PATH != x && test x$DOCBOOKHTML != x &&
test x$BUILD_HTMLDOC != xno; then test x$BUILD_HTMLDOC != xno; then
BUILDHTMLDOC=yes BUILDHTMLDOC=yes
fi fi
@ -7943,6 +7949,490 @@ AC_SUBST(MAKE_PDF)
AC_SUBST(MAKE_HTML) AC_SUBST(MAKE_HTML)
]) # XORG_CHECK_DOCBOOK ]) # XORG_CHECK_DOCBOOK
# XORG_WITH_XMLTO([MIN-VERSION])
# ----------------
# Minimum version: 1.5.0
#
# Documentation tools are not always available on all platforms and sometimes
# not at the appropriate level. This macro enables a module to test for the
# presence of the tool and obtain it's path in separate variables. Coupled with
# the --with-xmlto option, it allows maximum flexibilty in making decisions
# as whether or not to use the xmlto package.
#
# Interface to module:
# HAVE_XMLTO: used in makefiles to conditionally generate documentation
# XMLTO: returns the path of the xmlto program found
# returns the path set by the user in the environment
# --with-xmlto: 'yes' user instructs the module to use xmlto
# 'no' user instructs the module not to use xmlto
#
# If the user sets the value of XMLTO, AC_PATH_PROG skips testing the path.
#
AC_DEFUN([XORG_WITH_XMLTO],[
AC_ARG_VAR([XMLTO], [Path to xmlto command])
AC_ARG_WITH(xmlto,
AS_HELP_STRING([--with-xmlto],
[Use xmlto to regenerate documentation (default: yes, if installed)]),
[use_xmlto=$withval], [use_xmlto=auto])
if test "x$use_xmlto" = x"auto"; then
AC_PATH_PROG([XMLTO], [xmlto])
if test "x$XMLTO" = "x"; then
AC_MSG_WARN([xmlto not found - documentation targets will be skipped])
have_xmlto=no
else
have_xmlto=yes
fi
elif test "x$use_xmlto" = x"yes" ; then
AC_PATH_PROG([XMLTO], [xmlto])
if test "x$XMLTO" = "x"; then
AC_MSG_ERROR([--with-xmlto=yes specified but xmlto not found in PATH])
fi
have_xmlto=yes
elif test "x$use_xmlto" = x"no" ; then
if test "x$XMLTO" != "x"; then
AC_MSG_WARN([ignoring XMLTO environment variable since --with-xmlto=no was specified])
fi
have_xmlto=no
else
AC_MSG_ERROR([--with-xmlto expects 'yes' or 'no'])
fi
m4_ifval([$1],
[if test "$have_xmlto" = yes; then
# scrape the xmlto version
AC_MSG_CHECKING([the xmlto version])
xmlto_version=`$XMLTO --version 2>/dev/null | cut -d' ' -f3`
AC_MSG_RESULT([$xmlto_version])
AS_VERSION_COMPARE([$xmlto_version], [$1],
[if test "x$use_xmlto" = xauto; then
AC_MSG_WARN([xmlto version $xmlto_version found, but $1 needed])
have_xmlto=no
else
AC_MSG_ERROR([xmlto version $xmlto_version found, but $1 needed])
fi])
fi])
AM_CONDITIONAL([HAVE_XMLTO], [test "$have_xmlto" = yes])
]) # XORG_WITH_XMLTO
# XORG_WITH_ASCIIDOC([MIN-VERSION])
# ----------------
# Minimum version: 1.5.0
#
# Documentation tools are not always available on all platforms and sometimes
# not at the appropriate level. This macro enables a module to test for the
# presence of the tool and obtain it's path in separate variables. Coupled with
# the --with-asciidoc option, it allows maximum flexibilty in making decisions
# as whether or not to use the asciidoc package.
#
# Interface to module:
# HAVE_ASCIIDOC: used in makefiles to conditionally generate documentation
# ASCIIDOC: returns the path of the asciidoc program found
# returns the path set by the user in the environment
# --with-asciidoc: 'yes' user instructs the module to use asciidoc
# 'no' user instructs the module not to use asciidoc
#
# If the user sets the value of ASCIIDOC, AC_PATH_PROG skips testing the path.
#
AC_DEFUN([XORG_WITH_ASCIIDOC],[
AC_ARG_VAR([ASCIIDOC], [Path to asciidoc command])
AC_ARG_WITH(asciidoc,
AS_HELP_STRING([--with-asciidoc],
[Use asciidoc to regenerate documentation (default: yes, if installed)]),
[use_asciidoc=$withval], [use_asciidoc=auto])
if test "x$use_asciidoc" = x"auto"; then
AC_PATH_PROG([ASCIIDOC], [asciidoc])
if test "x$ASCIIDOC" = "x"; then
AC_MSG_WARN([asciidoc not found - documentation targets will be skipped])
have_asciidoc=no
else
have_asciidoc=yes
fi
elif test "x$use_asciidoc" = x"yes" ; then
AC_PATH_PROG([ASCIIDOC], [asciidoc])
if test "x$ASCIIDOC" = "x"; then
AC_MSG_ERROR([--with-asciidoc=yes specified but asciidoc not found in PATH])
fi
have_asciidoc=yes
elif test "x$use_asciidoc" = x"no" ; then
if test "x$ASCIIDOC" != "x"; then
AC_MSG_WARN([ignoring ASCIIDOC environment variable since --with-asciidoc=no was specified])
fi
have_asciidoc=no
else
AC_MSG_ERROR([--with-asciidoc expects 'yes' or 'no'])
fi
m4_ifval([$1],
[if test "$have_asciidoc" = yes; then
# scrape the asciidoc version
AC_MSG_CHECKING([the asciidoc version])
asciidoc_version=`$ASCIIDOC --version 2>/dev/null | cut -d' ' -f2`
AC_MSG_RESULT([$asciidoc_version])
AS_VERSION_COMPARE([$asciidoc_version], [$1],
[if test "x$use_asciidoc" = xauto; then
AC_MSG_WARN([asciidoc version $asciidoc_version found, but $1 needed])
have_asciidoc=no
else
AC_MSG_ERROR([asciidoc version $asciidoc_version found, but $1 needed])
fi])
fi])
AM_CONDITIONAL([HAVE_ASCIIDOC], [test "$have_asciidoc" = yes])
]) # XORG_WITH_ASCIIDOC
# XORG_WITH_DOXYGEN([MIN-VERSION])
# --------------------------------
# Minimum version: 1.5.0
#
# Documentation tools are not always available on all platforms and sometimes
# not at the appropriate level. This macro enables a module to test for the
# presence of the tool and obtain it's path in separate variables. Coupled with
# the --with-doxygen option, it allows maximum flexibilty in making decisions
# as whether or not to use the doxygen package.
#
# Interface to module:
# HAVE_DOXYGEN: used in makefiles to conditionally generate documentation
# DOXYGEN: returns the path of the doxygen program found
# returns the path set by the user in the environment
# --with-doxygen: 'yes' user instructs the module to use doxygen
# 'no' user instructs the module not to use doxygen
#
# If the user sets the value of DOXYGEN, AC_PATH_PROG skips testing the path.
#
AC_DEFUN([XORG_WITH_DOXYGEN],[
AC_ARG_VAR([DOXYGEN], [Path to doxygen command])
AC_ARG_WITH(doxygen,
AS_HELP_STRING([--with-doxygen],
[Use doxygen to regenerate documentation (default: yes, if installed)]),
[use_doxygen=$withval], [use_doxygen=auto])
if test "x$use_doxygen" = x"auto"; then
AC_PATH_PROG([DOXYGEN], [doxygen])
if test "x$DOXYGEN" = "x"; then
AC_MSG_WARN([doxygen not found - documentation targets will be skipped])
have_doxygen=no
else
have_doxygen=yes
fi
elif test "x$use_doxygen" = x"yes" ; then
AC_PATH_PROG([DOXYGEN], [doxygen])
if test "x$DOXYGEN" = "x"; then
AC_MSG_ERROR([--with-doxygen=yes specified but doxygen not found in PATH])
fi
have_doxygen=yes
elif test "x$use_doxygen" = x"no" ; then
if test "x$DOXYGEN" != "x"; then
AC_MSG_WARN([ignoring DOXYGEN environment variable since --with-doxygen=no was specified])
fi
have_doxygen=no
else
AC_MSG_ERROR([--with-doxygen expects 'yes' or 'no'])
fi
m4_ifval([$1],
[if test "$have_doxygen" = yes; then
# scrape the doxygen version
AC_MSG_CHECKING([the doxygen version])
doxygen_version=`$DOXYGEN --version 2>/dev/null`
AC_MSG_RESULT([$doxygen_version])
AS_VERSION_COMPARE([$doxygen_version], [$1],
[if test "x$use_doxygen" = xauto; then
AC_MSG_WARN([doxygen version $doxygen_version found, but $1 needed])
have_doxygen=no
else
AC_MSG_ERROR([doxygen version $doxygen_version found, but $1 needed])
fi])
fi])
AM_CONDITIONAL([HAVE_DOXYGEN], [test "$have_doxygen" = yes])
]) # XORG_WITH_DOXYGEN
# XORG_WITH_GROFF
# ----------------
# Minimum version: 1.6.0
#
# Documentation tools are not always available on all platforms and sometimes
# not at the appropriate level. This macro enables a module to test for the
# presence of the tool and obtain it's path in separate variables. Coupled with
# the --with-groff option, it allows maximum flexibilty in making decisions
# as whether or not to use the groff package.
#
# Interface to module:
# HAVE_GROFF: used in makefiles to conditionally generate documentation
# HAVE_GROFF_MM: the memorandum macros (-mm) package
# HAVE_GROFF_MS: the -ms macros package
# GROFF: returns the path of the groff program found
# returns the path set by the user in the environment
# --with-groff: 'yes' user instructs the module to use groff
# 'no' user instructs the module not to use groff
#
# If the user sets the value of GROFF, AC_PATH_PROG skips testing the path.
#
# OS and distros often splits groff in a basic and full package, the former
# having the groff program and the later having devices, fonts and macros
# Checking for the groff executable is not enough.
#
# If macros are missing, we cannot assume that groff is useless, so we don't
# unset HAVE_GROFF or GROFF env variables.
# HAVE_GROFF_?? can never be true while HAVE_GROFF is false.
#
AC_DEFUN([XORG_WITH_GROFF],[
AC_ARG_VAR([GROFF], [Path to groff command])
AC_ARG_WITH(groff,
AS_HELP_STRING([--with-groff],
[Use groff to regenerate documentation (default: yes, if installed)]),
[use_groff=$withval], [use_groff=auto])
if test "x$use_groff" = x"auto"; then
AC_PATH_PROG([GROFF], [groff])
if test "x$GROFF" = "x"; then
AC_MSG_WARN([groff not found - documentation targets will be skipped])
have_groff=no
else
have_groff=yes
fi
elif test "x$use_groff" = x"yes" ; then
AC_PATH_PROG([GROFF], [groff])
if test "x$GROFF" = "x"; then
AC_MSG_ERROR([--with-groff=yes specified but groff not found in PATH])
fi
have_groff=yes
elif test "x$use_groff" = x"no" ; then
if test "x$GROFF" != "x"; then
AC_MSG_WARN([ignoring GROFF environment variable since --with-groff=no was specified])
fi
have_groff=no
else
AC_MSG_ERROR([--with-groff expects 'yes' or 'no'])
fi
# We have groff, test for the presence of the macro packages
if test "x$have_groff" = x"yes"; then
AC_MSG_CHECKING([for ${GROFF} -ms macros])
if ${GROFF} -ms -I. /dev/null >/dev/null 2>&1 ; then
groff_ms_works=yes
else
groff_ms_works=no
fi
AC_MSG_RESULT([$groff_ms_works])
AC_MSG_CHECKING([for ${GROFF} -mm macros])
if ${GROFF} -mm -I. /dev/null >/dev/null 2>&1 ; then
groff_mm_works=yes
else
groff_mm_works=no
fi
AC_MSG_RESULT([$groff_mm_works])
fi
AM_CONDITIONAL([HAVE_GROFF], [test "$have_groff" = yes])
AM_CONDITIONAL([HAVE_GROFF_MS], [test "$groff_ms_works" = yes])
AM_CONDITIONAL([HAVE_GROFF_MM], [test "$groff_mm_works" = yes])
]) # XORG_WITH_GROFF
# XORG_WITH_FOP
# ----------------
# Minimum version: 1.6.0
#
# Documentation tools are not always available on all platforms and sometimes
# not at the appropriate level. This macro enables a module to test for the
# presence of the tool and obtain it's path in separate variables. Coupled with
# the --with-fop option, it allows maximum flexibilty in making decisions
# as whether or not to use the fop package.
#
# Interface to module:
# HAVE_FOP: used in makefiles to conditionally generate documentation
# FOP: returns the path of the fop program found
# returns the path set by the user in the environment
# --with-fop: 'yes' user instructs the module to use fop
# 'no' user instructs the module not to use fop
#
# If the user sets the value of FOP, AC_PATH_PROG skips testing the path.
#
AC_DEFUN([XORG_WITH_FOP],[
AC_ARG_VAR([FOP], [Path to fop command])
AC_ARG_WITH(fop,
AS_HELP_STRING([--with-fop],
[Use fop to regenerate documentation (default: yes, if installed)]),
[use_fop=$withval], [use_fop=auto])
if test "x$use_fop" = x"auto"; then
AC_PATH_PROG([FOP], [fop])
if test "x$FOP" = "x"; then
AC_MSG_WARN([fop not found - documentation targets will be skipped])
have_fop=no
else
have_fop=yes
fi
elif test "x$use_fop" = x"yes" ; then
AC_PATH_PROG([FOP], [fop])
if test "x$FOP" = "x"; then
AC_MSG_ERROR([--with-fop=yes specified but fop not found in PATH])
fi
have_fop=yes
elif test "x$use_fop" = x"no" ; then
if test "x$FOP" != "x"; then
AC_MSG_WARN([ignoring FOP environment variable since --with-fop=no was specified])
fi
have_fop=no
else
AC_MSG_ERROR([--with-fop expects 'yes' or 'no'])
fi
AM_CONDITIONAL([HAVE_FOP], [test "$have_fop" = yes])
]) # XORG_WITH_FOP
# XORG_WITH_PS2PDF
# ----------------
# Minimum version: 1.6.0
#
# Documentation tools are not always available on all platforms and sometimes
# not at the appropriate level. This macro enables a module to test for the
# presence of the tool and obtain it's path in separate variables. Coupled with
# the --with-ps2pdf option, it allows maximum flexibilty in making decisions
# as whether or not to use the ps2pdf package.
#
# Interface to module:
# HAVE_PS2PDF: used in makefiles to conditionally generate documentation
# PS2PDF: returns the path of the ps2pdf program found
# returns the path set by the user in the environment
# --with-ps2pdf: 'yes' user instructs the module to use ps2pdf
# 'no' user instructs the module not to use ps2pdf
#
# If the user sets the value of PS2PDF, AC_PATH_PROG skips testing the path.
#
AC_DEFUN([XORG_WITH_PS2PDF],[
AC_ARG_VAR([PS2PDF], [Path to ps2pdf command])
AC_ARG_WITH(ps2pdf,
AS_HELP_STRING([--with-ps2pdf],
[Use ps2pdf to regenerate documentation (default: yes, if installed)]),
[use_ps2pdf=$withval], [use_ps2pdf=auto])
if test "x$use_ps2pdf" = x"auto"; then
AC_PATH_PROG([PS2PDF], [ps2pdf])
if test "x$PS2PDF" = "x"; then
AC_MSG_WARN([ps2pdf not found - documentation targets will be skipped])
have_ps2pdf=no
else
have_ps2pdf=yes
fi
elif test "x$use_ps2pdf" = x"yes" ; then
AC_PATH_PROG([PS2PDF], [ps2pdf])
if test "x$PS2PDF" = "x"; then
AC_MSG_ERROR([--with-ps2pdf=yes specified but ps2pdf not found in PATH])
fi
have_ps2pdf=yes
elif test "x$use_ps2pdf" = x"no" ; then
if test "x$PS2PDF" != "x"; then
AC_MSG_WARN([ignoring PS2PDF environment variable since --with-ps2pdf=no was specified])
fi
have_ps2pdf=no
else
AC_MSG_ERROR([--with-ps2pdf expects 'yes' or 'no'])
fi
AM_CONDITIONAL([HAVE_PS2PDF], [test "$have_ps2pdf" = yes])
]) # XORG_WITH_PS2PDF
# XORG_ENABLE_DOCS (enable_docs=yes)
# ----------------
# Minimum version: 1.6.0
#
# Documentation tools are not always available on all platforms and sometimes
# not at the appropriate level. This macro enables a builder to skip all
# documentation targets except traditional man pages.
# Combined with the specific tool checking macros XORG_WITH_*, it provides
# maximum flexibilty in controlling documentation building.
# Refer to:
# XORG_WITH_XMLTO --with-xmlto
# XORG_WITH_ASCIIDOC --with-asciidoc
# XORG_WITH_DOXYGEN --with-doxygen
# XORG_WITH_FOP --with-fop
# XORG_WITH_GROFF --with-groff
# XORG_WITH_PS2PDF --with-ps2pdf
#
# Interface to module:
# ENABLE_DOCS: used in makefiles to conditionally generate documentation
# --enable-docs: 'yes' user instructs the module to generate docs
# 'no' user instructs the module not to generate docs
# parm1: specify the default value, yes or no.
#
AC_DEFUN([XORG_ENABLE_DOCS],[
default=$1
if test "x$default" = x ; then
default="yes"
fi
AC_ARG_ENABLE(docs,
AS_HELP_STRING([--enable-docs],
[Enable building the documentation (default: yes)]),
[build_docs=$enableval], [build_docs=$default])
AM_CONDITIONAL(ENABLE_DOCS, [test x$build_docs = xyes])
AC_MSG_CHECKING([whether to build documentation])
AC_MSG_RESULT([$build_docs])
]) # XORG_ENABLE_DOCS
# XORG_ENABLE_DEVEL_DOCS (enable_devel_docs=yes)
# ----------------
# Minimum version: 1.6.0
#
# This macro enables a builder to skip all developer documentation.
# Combined with the specific tool checking macros XORG_WITH_*, it provides
# maximum flexibilty in controlling documentation building.
# Refer to:
# XORG_WITH_XMLTO --with-xmlto
# XORG_WITH_ASCIIDOC --with-asciidoc
# XORG_WITH_DOXYGEN --with-doxygen
# XORG_WITH_FOP --with-fop
# XORG_WITH_GROFF --with-groff
# XORG_WITH_PS2PDF --with-ps2pdf
#
# Interface to module:
# ENABLE_DEVEL_DOCS: used in makefiles to conditionally generate developer docs
# --enable-devel-docs: 'yes' user instructs the module to generate developer docs
# 'no' user instructs the module not to generate developer docs
# parm1: specify the default value, yes or no.
#
AC_DEFUN([XORG_ENABLE_DEVEL_DOCS],[
devel_default=$1
if test "x$devel_default" = x ; then
devel_default="yes"
fi
AC_ARG_ENABLE(devel-docs,
AS_HELP_STRING([--enable-devel-docs],
[Enable building the developer documentation (default: yes)]),
[build_devel_docs=$enableval], [build_devel_docs=$devel_default])
AM_CONDITIONAL(ENABLE_DEVEL_DOCS, [test x$build_devel_docs = xyes])
AC_MSG_CHECKING([whether to build developer documentation])
AC_MSG_RESULT([$build_devel_docs])
]) # XORG_ENABLE_DEVEL_DOCS
# XORG_ENABLE_SPECS (enable_specs=yes)
# ----------------
# Minimum version: 1.6.0
#
# This macro enables a builder to skip all functional specification targets.
# Combined with the specific tool checking macros XORG_WITH_*, it provides
# maximum flexibilty in controlling documentation building.
# Refer to:
# XORG_WITH_XMLTO --with-xmlto
# XORG_WITH_ASCIIDOC --with-asciidoc
# XORG_WITH_DOXYGEN --with-doxygen
# XORG_WITH_FOP --with-fop
# XORG_WITH_GROFF --with-groff
# XORG_WITH_PS2PDF --with-ps2pdf
#
# Interface to module:
# ENABLE_SPECS: used in makefiles to conditionally generate specs
# --enable-specs: 'yes' user instructs the module to generate specs
# 'no' user instructs the module not to generate specs
# parm1: specify the default value, yes or no.
#
AC_DEFUN([XORG_ENABLE_SPECS],[
spec_default=$1
if test "x$spec_default" = x ; then
spec_default="yes"
fi
AC_ARG_ENABLE(specs,
AS_HELP_STRING([--enable-specs],
[Enable building the specs (default: yes)]),
[build_specs=$enableval], [build_specs=$spec_default])
AM_CONDITIONAL(ENABLE_SPECS, [test x$build_specs = xyes])
AC_MSG_CHECKING([whether to build functional specifications])
AC_MSG_RESULT([$build_specs])
]) # XORG_ENABLE_SPECS
# XORG_CHECK_MALLOC_ZERO # XORG_CHECK_MALLOC_ZERO
# ---------------------- # ----------------------
# Minimum version: 1.0.0 # Minimum version: 1.0.0
@ -7972,7 +8462,8 @@ main() {
exit(m0 == 0 || r0 == 0 || c0 == 0 ? 0 : 1); exit(m0 == 0 || r0 == 0 || c0 == 0 ? 0 : 1);
}], }],
[MALLOC_ZERO_RETURNS_NULL=yes], [MALLOC_ZERO_RETURNS_NULL=yes],
[MALLOC_ZERO_RETURNS_NULL=no]) [MALLOC_ZERO_RETURNS_NULL=no],
[MALLOC_ZERO_RETURNS_NULL=yes])
fi fi
AC_MSG_RESULT([$MALLOC_ZERO_RETURNS_NULL]) AC_MSG_RESULT([$MALLOC_ZERO_RETURNS_NULL])
@ -8074,7 +8565,7 @@ AC_REQUIRE([AC_PROG_CC])
if test "x$GCC" = xyes ; then if test "x$GCC" = xyes ; then
CWARNFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes \ CWARNFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes \
-Wmissing-declarations -Wnested-externs -fno-strict-aliasing \ -Wmissing-declarations -Wnested-externs -fno-strict-aliasing \
-Wbad-function-cast" -Wbad-function-cast -Wformat=2"
case `$CC -dumpversion` in case `$CC -dumpversion` in
3.4.* | 4.*) 3.4.* | 4.*)
CWARNFLAGS="$CWARNFLAGS -Wold-style-definition -Wdeclaration-after-statement" CWARNFLAGS="$CWARNFLAGS -Wold-style-definition -Wdeclaration-after-statement"
@ -8087,7 +8578,6 @@ else
fi fi
fi fi
AC_SUBST(CWARNFLAGS) AC_SUBST(CWARNFLAGS)
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
]) # XORG_CWARNFLAGS ]) # XORG_CWARNFLAGS
# XORG_STRICT_OPTION # XORG_STRICT_OPTION
@ -8130,8 +8620,28 @@ XORG_CWARNFLAGS
XORG_STRICT_OPTION XORG_STRICT_OPTION
XORG_RELEASE_VERSION XORG_RELEASE_VERSION
XORG_CHANGELOG XORG_CHANGELOG
XORG_INSTALL
XORG_MANPAGE_SECTIONS XORG_MANPAGE_SECTIONS
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])],
[AC_SUBST([AM_DEFAULT_VERBOSITY], [1])])
]) # XORG_DEFAULT_OPTIONS ]) # XORG_DEFAULT_OPTIONS
# XORG_INSTALL()
# ----------------
# Minimum version: 1.4.0
#
# Defines the variable INSTALL_CMD as the command to copy
# INSTALL from $prefix/share/util-macros.
#
AC_DEFUN([XORG_INSTALL], [
AC_REQUIRE([PKG_PROG_PKG_CONFIG])
macros_datadir=`$PKG_CONFIG --print-errors --variable=pkgdatadir xorg-macros`
INSTALL_CMD="(cp -f "$macros_datadir/INSTALL" \$(top_srcdir)/.INSTALL.tmp && \
mv \$(top_srcdir)/.INSTALL.tmp \$(top_srcdir)/INSTALL) \
|| (rm -f \$(top_srcdir)/.INSTALL.tmp; touch \$(top_srcdir)/INSTALL; \
echo 'util-macros \"pkgdatadir\" from xorg-macros.pc not found: installing possibly empty INSTALL.' >&2)"
AC_SUBST([INSTALL_CMD])
]) # XORG_INSTALL
dnl Copyright 2005 Red Hat, Inc dnl Copyright 2005 Red Hat, Inc
dnl dnl
dnl Permission to use, copy, modify, distribute, and sell this software and its dnl Permission to use, copy, modify, distribute, and sell this software and its
@ -8201,14 +8711,13 @@ AC_DEFUN([XORG_RELEASE_VERSION],[
# Defines the variable CHANGELOG_CMD as the command to generate # Defines the variable CHANGELOG_CMD as the command to generate
# ChangeLog from git. # ChangeLog from git.
# #
# Arrange that distcleancheck ignores ChangeLog left over by distclean.
# #
AC_DEFUN([XORG_CHANGELOG], [ AC_DEFUN([XORG_CHANGELOG], [
CHANGELOG_CMD="(GIT_DIR=\$(top_srcdir)/.git git log > .changelog.tmp && \ CHANGELOG_CMD="(GIT_DIR=\$(top_srcdir)/.git git log > \$(top_srcdir)/.changelog.tmp && \
mv .changelog.tmp ChangeLog) || (rm -f .changelog.tmp; touch ChangeLog; \ mv \$(top_srcdir)/.changelog.tmp \$(top_srcdir)/ChangeLog) \
|| (rm -f \$(top_srcdir)/.changelog.tmp; touch \$(top_srcdir)/ChangeLog; \
echo 'git directory not found: installing possibly empty changelog.' >&2)" echo 'git directory not found: installing possibly empty changelog.' >&2)"
AC_SUBST([CHANGELOG_CMD]) AC_SUBST([CHANGELOG_CMD])
AC_SUBST([distcleancheck_listfiles], ['find . -type f ! -name ChangeLog -print'])
]) # XORG_CHANGELOG ]) # XORG_CHANGELOG
dnl Copyright 2005 Red Hat, Inc dnl Copyright 2005 Red Hat, Inc

View File

@ -53,6 +53,7 @@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@ AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@ AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_DIR = @APP_MAN_DIR@
APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
AR = @AR@ AR = @AR@
@ -68,6 +69,7 @@ CFLAGS = @CFLAGS@
CHANGELOG_CMD = @CHANGELOG_CMD@ CHANGELOG_CMD = @CHANGELOG_CMD@
CPP = @CPP@ CPP = @CPP@
CPPFLAGS = @CPPFLAGS@ CPPFLAGS = @CPPFLAGS@
CWARNFLAGS = @CWARNFLAGS@
CXX = @CXX@ CXX = @CXX@
CXXCPP = @CXXCPP@ CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@ CXXDEPMODE = @CXXDEPMODE@
@ -92,6 +94,7 @@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
GREP = @GREP@ GREP = @GREP@
HAVE_XEXTPROTO_71_FALSE = @HAVE_XEXTPROTO_71_FALSE@ HAVE_XEXTPROTO_71_FALSE = @HAVE_XEXTPROTO_71_FALSE@
HAVE_XEXTPROTO_71_TRUE = @HAVE_XEXTPROTO_71_TRUE@ HAVE_XEXTPROTO_71_TRUE = @HAVE_XEXTPROTO_71_TRUE@
INSTALL_CMD = @INSTALL_CMD@
INSTALL_DATA = @INSTALL_DATA@ INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
@ -153,7 +156,6 @@ build_os = @build_os@
build_vendor = @build_vendor@ build_vendor = @build_vendor@
datadir = @datadir@ datadir = @datadir@
datarootdir = @datarootdir@ datarootdir = @datarootdir@
distcleancheck_listfiles = @distcleancheck_listfiles@
docdir = @docdir@ docdir = @docdir@
dvidir = @dvidir@ dvidir = @dvidir@
exec_prefix = @exec_prefix@ exec_prefix = @exec_prefix@
@ -213,9 +215,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \ exit 1;; \
esac; \ esac; \
done; \ done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu compat/Makefile'; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign compat/Makefile'; \
cd $(top_srcdir) && \ cd $(top_srcdir) && \
$(AUTOMAKE) --gnu compat/Makefile $(AUTOMAKE) --foreign compat/Makefile
.PRECIOUS: Makefile .PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \ @case '$?' in \

View File

@ -354,7 +354,7 @@ xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotati
} }
/* Only upload when needed, to avoid unneeded delays. */ /* Only upload when needed, to avoid unneeded delays. */
if (!crtc->active) if (!crtc->active && crtc->funcs->gamma_set)
crtc->funcs->gamma_set(crtc, crtc->gamma_red, crtc->gamma_green, crtc->funcs->gamma_set(crtc, crtc->gamma_red, crtc->gamma_green,
crtc->gamma_blue, crtc->gamma_size); crtc->gamma_blue, crtc->gamma_size);
@ -384,7 +384,9 @@ done:
crtc->transformPresent = saved_transform_present; crtc->transformPresent = saved_transform_present;
} }
free(adjusted_mode); if (adjusted_mode->name)
xfree(adjusted_mode->name);
xfree(adjusted_mode);
if (didLock) if (didLock)
crtc->funcs->unlock (crtc); crtc->funcs->unlock (crtc);
@ -803,6 +805,9 @@ xf86CrtcScreenInit (ScreenPtr screen)
config->CloseScreen = screen->CloseScreen; config->CloseScreen = screen->CloseScreen;
screen->CloseScreen = xf86CrtcCloseScreen; screen->CloseScreen = xf86CrtcCloseScreen;
#ifdef XFreeXDGA
_xf86_di_dga_init_internal(screen);
#endif
#ifdef RANDR_13_INTERFACE #ifdef RANDR_13_INTERFACE
return RANDR_INTERFACE_VERSION; return RANDR_INTERFACE_VERSION;
#else #else
@ -1372,34 +1377,6 @@ xf86InitialPanning (ScrnInfoPtr scrn)
} }
} }
/*
* XXX walk the monitor mode list and prune out duplicates that
* are inserted by xf86DDCMonitorSet. In an ideal world, that
* function would do this work by itself.
*/
static void
xf86PruneDuplicateMonitorModes (MonPtr Monitor)
{
DisplayModePtr master, clone, next;
for (master = Monitor->Modes;
master && master != Monitor->Last;
master = master->next)
{
for (clone = master->next; clone && clone != Monitor->Modes; clone = next)
{
next = clone->next;
if (xf86ModesEqual (master, clone))
{
if (Monitor->Last == clone)
Monitor->Last = clone->prev;
xf86DeleteMode (&Monitor->Modes, clone);
}
}
}
}
/** Return - 0 + if a should be earlier, same or later than b in list /** Return - 0 + if a should be earlier, same or later than b in list
*/ */
static int static int
@ -1518,6 +1495,46 @@ GuessRangeFromModes(MonPtr mon, DisplayModePtr mode)
mon->vrefresh[0].lo = 58.0; mon->vrefresh[0].lo = 58.0;
} }
enum det_monrec_source {
sync_config, sync_edid, sync_default
};
struct det_monrec_parameter {
MonRec *mon_rec;
int *max_clock;
Bool set_hsync;
Bool set_vrefresh;
enum det_monrec_source *sync_source;
};
static void handle_detailed_monrec(struct detailed_monitor_section *det_mon,
void *data)
{
enum { sync_config, sync_edid, sync_default };
struct det_monrec_parameter *p;
p = (struct det_monrec_parameter *)data;
if (det_mon->type == DS_RANGES) {
struct monitor_ranges *ranges = &det_mon->section.ranges;
if (p->set_hsync && ranges->max_h) {
p->mon_rec->hsync[p->mon_rec->nHsync].lo = ranges->min_h;
p->mon_rec->hsync[p->mon_rec->nHsync].hi = ranges->max_h;
p->mon_rec->nHsync++;
if (*p->sync_source == sync_default)
*p->sync_source = sync_edid;
}
if (p->set_vrefresh && ranges->max_v) {
p->mon_rec->vrefresh[p->mon_rec->nVrefresh].lo = ranges->min_v;
p->mon_rec->vrefresh[p->mon_rec->nVrefresh].hi = ranges->max_v;
p->mon_rec->nVrefresh++;
if (*p->sync_source == sync_default)
*p->sync_source = sync_edid;
}
if (ranges->max_clock * 1000 > *p->max_clock)
*p->max_clock = ranges->max_clock * 1000;
}
}
void void
xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY) xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
{ {
@ -1534,9 +1551,6 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
maxY = config->maxHeight; maxY = config->maxHeight;
} }
/* Elide duplicate modes before defaulting code uses them */
xf86PruneDuplicateMonitorModes (scrn->monitor);
/* Probe the list of modes for each output. */ /* Probe the list of modes for each output. */
for (o = 0; o < config->num_output; o++) for (o = 0; o < config->num_output; o++)
{ {
@ -1551,7 +1565,9 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
int max_clock = 0; int max_clock = 0;
double clock; double clock;
Bool add_default_modes = TRUE; Bool add_default_modes = TRUE;
enum { sync_config, sync_edid, sync_default } sync_source = sync_default; Bool debug_modes = config->debug_modes ||
xf86Initialising;
enum det_monrec_source sync_source = sync_default;
while (output->probed_modes != NULL) while (output->probed_modes != NULL)
xf86DeleteMode(&output->probed_modes, output->probed_modes); xf86DeleteMode(&output->probed_modes, output->probed_modes);
@ -1561,7 +1577,8 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
*/ */
output->status = (*output->funcs->detect)(output); output->status = (*output->funcs->detect)(output);
if (output->status == XF86OutputStatusDisconnected) if (output->status == XF86OutputStatusDisconnected &&
!xf86ReturnOptValBool(output->options, OPTION_ENABLE, FALSE))
{ {
xf86OutputSetEDID (output, NULL); xf86OutputSetEDID (output, NULL);
continue; continue;
@ -1596,42 +1613,24 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
edid_monitor = output->MonInfo; edid_monitor = output->MonInfo;
if (edid_monitor) if (edid_monitor)
{ {
int i; struct det_monrec_parameter p;
Bool set_hsync = mon_rec.nHsync == 0; struct disp_features *features = &edid_monitor->features;
Bool set_vrefresh = mon_rec.nVrefresh == 0;
struct disp_features *features = &edid_monitor->features;
/* if display is not continuous-frequency, don't add default modes */ /* if display is not continuous-frequency, don't add default modes */
if (!GTF_SUPPORTED(features->msc)) if (!GTF_SUPPORTED(features->msc))
add_default_modes = FALSE; add_default_modes = FALSE;
for (i = 0; i < sizeof (edid_monitor->det_mon) / sizeof (edid_monitor->det_mon[0]); i++) p.mon_rec = &mon_rec;
{ p.max_clock = &max_clock;
if (edid_monitor->det_mon[i].type == DS_RANGES) p.set_hsync = mon_rec.nHsync == 0;
{ p.set_vrefresh = mon_rec.nVrefresh == 0;
struct monitor_ranges *ranges = &edid_monitor->det_mon[i].section.ranges; p.sync_source = &sync_source;
if (set_hsync && ranges->max_h)
{ xf86ForEachDetailedBlock(edid_monitor,
mon_rec.hsync[mon_rec.nHsync].lo = ranges->min_h; handle_detailed_monrec,
mon_rec.hsync[mon_rec.nHsync].hi = ranges->max_h; &p);
mon_rec.nHsync++;
if (sync_source == sync_default)
sync_source = sync_edid;
}
if (set_vrefresh && ranges->max_v)
{
mon_rec.vrefresh[mon_rec.nVrefresh].lo = ranges->min_v;
mon_rec.vrefresh[mon_rec.nVrefresh].hi = ranges->max_v;
mon_rec.nVrefresh++;
if (sync_source == sync_default)
sync_source = sync_edid;
}
if (ranges->max_clock * 1000 > max_clock)
max_clock = ranges->max_clock * 1000;
}
}
} }
if (xf86GetOptValFreq (output->options, OPTION_MIN_CLOCK, if (xf86GetOptValFreq (output->options, OPTION_MIN_CLOCK,
@ -1720,8 +1719,7 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
if (mode->status == MODE_OK) if (mode->status == MODE_OK)
mode->status = (*output->funcs->mode_valid)(output, mode); mode->status = (*output->funcs->mode_valid)(output, mode);
xf86PruneInvalidModes(scrn, &output->probed_modes, xf86PruneInvalidModes(scrn, &output->probed_modes, debug_modes);
config->debug_modes);
output->probed_modes = xf86SortModes (output->probed_modes); output->probed_modes = xf86SortModes (output->probed_modes);
@ -1753,7 +1751,7 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
output->initial_rotation = xf86OutputInitialRotation (output); output->initial_rotation = xf86OutputInitialRotation (output);
if (config->debug_modes) { if (debug_modes) {
if (output->probed_modes != NULL) { if (output->probed_modes != NULL) {
xf86DrvMsg(scrn->scrnIndex, X_INFO, xf86DrvMsg(scrn->scrnIndex, X_INFO,
"Printing probed modes for output %s\n", "Printing probed modes for output %s\n",
@ -1772,7 +1770,7 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
mode->VRefresh = xf86ModeVRefresh(mode); mode->VRefresh = xf86ModeVRefresh(mode);
xf86SetModeCrtc(mode, INTERLACE_HALVE_V); xf86SetModeCrtc(mode, INTERLACE_HALVE_V);
if (config->debug_modes) if (debug_modes)
xf86PrintModeline(scrn->scrnIndex, mode); xf86PrintModeline(scrn->scrnIndex, mode);
} }
} }
@ -1921,6 +1919,10 @@ xf86SetScrnInfoModes (ScrnInfoPtr scrn)
} }
} }
scrn->currentMode = scrn->modes; scrn->currentMode = scrn->modes;
#ifdef XFreeXDGA
if (scrn->pScreen)
_xf86_di_dga_reinit_internal(scrn->pScreen);
#endif
} }
static void static void
@ -2593,8 +2595,8 @@ xf86SetDesiredModes (ScrnInfoPtr scrn)
if (!crtc->enabled) if (!crtc->enabled)
continue; continue;
if (config->output[config->compat_output]->crtc == crtc) if (xf86CompatOutput(scrn) && xf86CompatCrtc(scrn) == crtc)
output = config->output[config->compat_output]; output = xf86CompatOutput(scrn);
else else
{ {
for (o = 0; o < config->num_output; o++) for (o = 0; o < config->num_output; o++)
@ -2714,14 +2716,16 @@ xf86SetSingleMode (ScrnInfoPtr pScrn, DisplayModePtr desired, Rotation rotation)
{ {
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn); xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
Bool ok = TRUE; Bool ok = TRUE;
xf86OutputPtr compat_output = config->output[config->compat_output]; xf86OutputPtr compat_output;
DisplayModePtr compat_mode; DisplayModePtr compat_mode = NULL;
int c; int c;
/* /*
* Let the compat output drive the final mode selection * Let the compat output drive the final mode selection
*/ */
compat_mode = xf86OutputFindClosestMode (compat_output, desired); compat_output = xf86CompatOutput(pScrn);
if (compat_output)
compat_mode = xf86OutputFindClosestMode (compat_output, desired);
if (compat_mode) if (compat_mode)
desired = compat_mode; desired = compat_mode;
@ -2891,6 +2895,35 @@ xf86OutputSetEDIDProperty (xf86OutputPtr output, void *data, int data_len)
#endif #endif
/* Pull out a phyiscal size from a detailed timing if available. */
struct det_phySize_parameter {
xf86OutputPtr output;
ddc_quirk_t quirks;
Bool ret;
};
static void handle_detailed_physical_size(struct detailed_monitor_section
*det_mon, void *data)
{
struct det_phySize_parameter *p;
p = (struct det_phySize_parameter *)data;
if (p->ret == TRUE )
return ;
xf86DetTimingApplyQuirks(det_mon, p->quirks,
p->output->MonInfo->features.hsize,
p->output->MonInfo->features.vsize);
if (det_mon->type == DT &&
det_mon->section.d_timings.h_size != 0 &&
det_mon->section.d_timings.v_size != 0) {
p->output->mm_width = det_mon->section.d_timings.h_size;
p->output->mm_height = det_mon->section.d_timings.v_size;
p->ret = TRUE;
}
}
/** /**
* Set the EDID information for the specified output * Set the EDID information for the specified output
*/ */
@ -2899,7 +2932,7 @@ xf86OutputSetEDID (xf86OutputPtr output, xf86MonPtr edid_mon)
{ {
ScrnInfoPtr scrn = output->scrn; ScrnInfoPtr scrn = output->scrn;
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn); xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn);
int i; Bool debug_modes = config->debug_modes || xf86Initialising;
#ifdef RANDR_12_INTERFACE #ifdef RANDR_12_INTERFACE
int size; int size;
#endif #endif
@ -2909,14 +2942,14 @@ xf86OutputSetEDID (xf86OutputPtr output, xf86MonPtr edid_mon)
output->MonInfo = edid_mon; output->MonInfo = edid_mon;
if (config->debug_modes) { if (debug_modes) {
xf86DrvMsg(scrn->scrnIndex, X_INFO, "EDID for output %s\n", xf86DrvMsg(scrn->scrnIndex, X_INFO, "EDID for output %s\n",
output->name); output->name);
xf86PrintEDID(edid_mon); xf86PrintEDID(edid_mon);
} }
/* Set the DDC properties for the 'compat' output */ /* Set the DDC properties for the 'compat' output */
if (output == config->output[config->compat_output]) if (output == xf86CompatOutput(scrn))
xf86SetDDCproperties(scrn, edid_mon); xf86SetDDCproperties(scrn, edid_mon);
#ifdef RANDR_12_INTERFACE #ifdef RANDR_12_INTERFACE
@ -2934,20 +2967,15 @@ xf86OutputSetEDID (xf86OutputPtr output, xf86MonPtr edid_mon)
xf86OutputSetEDIDProperty (output, edid_mon ? edid_mon->rawData : NULL, size); xf86OutputSetEDIDProperty (output, edid_mon ? edid_mon->rawData : NULL, size);
#endif #endif
if (edid_mon) if (edid_mon) {
{
/* Pull out a phyiscal size from a detailed timing if available. */ struct det_phySize_parameter p;
for (i = 0; i < 4; i++) { p.output = output;
if (edid_mon->det_mon[i].type == DT && p.quirks = xf86DDCDetectQuirks(scrn->scrnIndex,edid_mon, FALSE);
edid_mon->det_mon[i].section.d_timings.h_size != 0 && p.ret = FALSE;
edid_mon->det_mon[i].section.d_timings.v_size != 0) xf86ForEachDetailedBlock(edid_mon,
{ handle_detailed_physical_size, &p);
output->mm_width = edid_mon->det_mon[i].section.d_timings.h_size;
output->mm_height = edid_mon->det_mon[i].section.d_timings.v_size;
break;
}
}
/* if no mm size is available from a detailed timing, check the max size field */ /* if no mm size is available from a detailed timing, check the max size field */
if ((!output->mm_width || !output->mm_height) && if ((!output->mm_width || !output->mm_height) &&
(edid_mon->features.hsize && edid_mon->features.vsize)) (edid_mon->features.hsize && edid_mon->features.vsize))

View File

@ -689,6 +689,32 @@ extern _X_EXPORT int xf86CrtcConfigPrivateIndex;
#define XF86_CRTC_CONFIG_PTR(p) ((xf86CrtcConfigPtr) ((p)->privates[xf86CrtcConfigPrivateIndex].ptr)) #define XF86_CRTC_CONFIG_PTR(p) ((xf86CrtcConfigPtr) ((p)->privates[xf86CrtcConfigPrivateIndex].ptr))
static _X_INLINE xf86OutputPtr
xf86CompatOutput(ScrnInfoPtr pScrn)
{
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
return config->output[config->compat_output];
}
static _X_INLINE xf86CrtcPtr
xf86CompatCrtc(ScrnInfoPtr pScrn)
{
xf86OutputPtr compat_output = xf86CompatOutput(pScrn);
if (!compat_output)
return NULL;
return compat_output->crtc;
}
static _X_INLINE RRCrtcPtr
xf86CompatRRCrtc(ScrnInfoPtr pScrn)
{
xf86CrtcPtr compat_crtc = xf86CompatCrtc(pScrn);
if (!compat_crtc)
return NULL;
return compat_crtc->randr_crtc;
}
/* /*
* Initialize xf86CrtcConfig structure * Initialize xf86CrtcConfig structure
*/ */
@ -833,6 +859,10 @@ xf86OutputGetEDID (xf86OutputPtr output, I2CBusPtr pDDCBus);
extern _X_EXPORT Bool extern _X_EXPORT Bool
xf86DiDGAInit (ScreenPtr pScreen, unsigned long dga_address); xf86DiDGAInit (ScreenPtr pScreen, unsigned long dga_address);
/* this is the real function, used only internally */
_X_INTERNAL Bool
_xf86_di_dga_init_internal (ScreenPtr pScreen);
/** /**
* Re-initialize dga for this screen (as when the set of modes changes) * Re-initialize dga for this screen (as when the set of modes changes)
*/ */
@ -841,6 +871,10 @@ extern _X_EXPORT Bool
xf86DiDGAReInit (ScreenPtr pScreen); xf86DiDGAReInit (ScreenPtr pScreen);
#endif #endif
/* This is the real function, used only internally */
_X_INTERNAL Bool
_xf86_di_dga_reinit_internal (ScreenPtr pScreen);
/* /*
* Set the subpixel order reported for the screen using * Set the subpixel order reported for the screen using
* the information from the outputs * the information from the outputs

View File

@ -480,10 +480,10 @@ xf86_use_hw_cursor_argb (ScreenPtr screen, CursorPtr cursor)
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
xf86CursorInfoPtr cursor_info = xf86_config->cursor_info; xf86CursorInfoPtr cursor_info = xf86_config->cursor_info;
++cursor->refcnt;
if (xf86_config->cursor) if (xf86_config->cursor)
FreeCursor (xf86_config->cursor, None); FreeCursor (xf86_config->cursor, None);
xf86_config->cursor = cursor; xf86_config->cursor = cursor;
++cursor->refcnt;
/* Make sure ARGB support is available */ /* Make sure ARGB support is available */
if ((cursor_info->Flags & HARDWARE_CURSOR_ARGB) == 0) if ((cursor_info->Flags & HARDWARE_CURSOR_ARGB) == 0)

View File

@ -72,8 +72,7 @@ xf86_dga_get_modes (ScreenPtr pScreen)
mode = modes + num++; mode = modes + num++;
mode->mode = display_mode; mode->mode = display_mode;
mode->flags = DGA_CONCURRENT_ACCESS | DGA_PIXMAP_AVAILABLE; mode->flags = DGA_CONCURRENT_ACCESS;
mode->flags |= DGA_FILL_RECT | DGA_BLIT_RECT;
if (display_mode->Flags & V_DBLSCAN) if (display_mode->Flags & V_DBLSCAN)
mode->flags |= DGA_DOUBLESCAN; mode->flags |= DGA_DOUBLESCAN;
if (display_mode->Flags & V_INTERLACE) if (display_mode->Flags & V_INTERLACE)
@ -91,14 +90,14 @@ xf86_dga_get_modes (ScreenPtr pScreen)
mode->yViewportStep = 1; mode->yViewportStep = 1;
mode->viewportFlags = DGA_FLIP_RETRACE; mode->viewportFlags = DGA_FLIP_RETRACE;
mode->offset = 0; mode->offset = 0;
mode->address = (unsigned char *) xf86_config->dga_address; mode->address = 0;
mode->bytesPerScanline = xf86_config->dga_stride; mode->imageWidth = mode->viewportWidth;
mode->imageWidth = xf86_config->dga_width; mode->imageHeight = mode->viewportHeight;
mode->imageHeight = xf86_config->dga_height; mode->bytesPerScanline = (mode->imageWidth * scrn->bitsPerPixel) >> 3;
mode->pixmapWidth = mode->imageWidth; mode->pixmapWidth = mode->imageWidth;
mode->pixmapHeight = mode->imageHeight; mode->pixmapHeight = mode->imageHeight;
mode->maxViewportX = mode->imageWidth - mode->viewportWidth; mode->maxViewportX = 0;
mode->maxViewportY = mode->imageHeight - mode->viewportHeight; mode->maxViewportY = 0;
display_mode = display_mode->next; display_mode = display_mode->next;
if (display_mode == scrn->modes) if (display_mode == scrn->modes)
@ -148,94 +147,12 @@ xf86_dga_set_viewport(ScrnInfoPtr scrn, int x, int y, int flags)
scrn->AdjustFrame(scrn->pScreen->myNum, x, y, flags); scrn->AdjustFrame(scrn->pScreen->myNum, x, y, flags);
} }
static Bool
xf86_dga_get_drawable_and_gc (ScrnInfoPtr scrn, DrawablePtr *ppDrawable, GCPtr *ppGC)
{
ScreenPtr pScreen = scrn->pScreen;
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
PixmapPtr pPixmap;
GCPtr pGC;
pPixmap = GetScratchPixmapHeader (pScreen, xf86_config->dga_width, xf86_config->dga_height,
scrn->depth, scrn->bitsPerPixel, xf86_config->dga_stride,
(char *) scrn->memPhysBase + scrn->fbOffset);
if (!pPixmap)
return FALSE;
pGC = GetScratchGC (scrn->depth, pScreen);
if (!pGC)
{
FreeScratchPixmapHeader (pPixmap);
return FALSE;
}
*ppDrawable = &pPixmap->drawable;
*ppGC = pGC;
return TRUE;
}
static void
xf86_dga_release_drawable_and_gc (ScrnInfoPtr scrn, DrawablePtr pDrawable, GCPtr pGC)
{
FreeScratchGC (pGC);
FreeScratchPixmapHeader ((PixmapPtr) pDrawable);
}
static void
xf86_dga_fill_rect(ScrnInfoPtr scrn, int x, int y, int w, int h, unsigned long color)
{
GCPtr pGC;
DrawablePtr pDrawable;
XID vals[1];
xRectangle r;
if (!xf86_dga_get_drawable_and_gc (scrn, &pDrawable, &pGC))
return;
vals[0] = color;
ChangeGC (pGC, GCForeground, vals);
ValidateGC (pDrawable, pGC);
r.x = x;
r.y = y;
r.width = w;
r.height = h;
pGC->ops->PolyFillRect (pDrawable, pGC, 1, &r);
xf86_dga_release_drawable_and_gc (scrn, pDrawable, pGC);
}
static void
xf86_dga_sync(ScrnInfoPtr scrn)
{
ScreenPtr pScreen = scrn->pScreen;
WindowPtr pRoot = WindowTable [pScreen->myNum];
char buffer[4];
pScreen->GetImage (&pRoot->drawable, 0, 0, 1, 1, ZPixmap, ~0L, buffer);
}
static void
xf86_dga_blit_rect(ScrnInfoPtr scrn, int srcx, int srcy, int w, int h, int dstx, int dsty)
{
DrawablePtr pDrawable;
GCPtr pGC;
if (!xf86_dga_get_drawable_and_gc (scrn, &pDrawable, &pGC))
return;
ValidateGC (pDrawable, pGC);
pGC->ops->CopyArea (pDrawable, pDrawable, pGC, srcx, srcy, w, h, dstx, dsty);
xf86_dga_release_drawable_and_gc (scrn, pDrawable, pGC);
}
static Bool static Bool
xf86_dga_open_framebuffer(ScrnInfoPtr scrn, xf86_dga_open_framebuffer(ScrnInfoPtr scrn,
char **name, char **name,
unsigned char **mem, int *size, int *offset, int *flags) unsigned char **mem, int *size, int *offset, int *flags)
{ {
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); return FALSE;
*size = xf86_config->dga_stride * xf86_config->dga_height;
*mem = (unsigned char *) (xf86_config->dga_address);
*offset = 0;
*flags = DGA_NEED_ROOT;
return TRUE;
} }
static void static void
@ -249,18 +166,27 @@ static DGAFunctionRec xf86_dga_funcs = {
xf86_dga_set_mode, xf86_dga_set_mode,
xf86_dga_set_viewport, xf86_dga_set_viewport,
xf86_dga_get_viewport, xf86_dga_get_viewport,
xf86_dga_sync, NULL,
xf86_dga_fill_rect, NULL,
xf86_dga_blit_rect, NULL,
NULL NULL
}; };
Bool Bool
xf86DiDGAReInit (ScreenPtr pScreen) xf86DiDGAReInit (ScreenPtr pScreen)
{
return TRUE;
}
Bool
_xf86_di_dga_reinit_internal (ScreenPtr pScreen)
{ {
ScrnInfoPtr scrn = xf86Screens[pScreen->myNum]; ScrnInfoPtr scrn = xf86Screens[pScreen->myNum];
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
if (!DGAAvailable(pScreen->myNum))
return TRUE;
if (!xf86_dga_get_modes (pScreen)) if (!xf86_dga_get_modes (pScreen))
return FALSE; return FALSE;
@ -269,15 +195,21 @@ xf86DiDGAReInit (ScreenPtr pScreen)
Bool Bool
xf86DiDGAInit (ScreenPtr pScreen, unsigned long dga_address) xf86DiDGAInit (ScreenPtr pScreen, unsigned long dga_address)
{
return TRUE;
}
Bool
_xf86_di_dga_init_internal (ScreenPtr pScreen)
{ {
ScrnInfoPtr scrn = xf86Screens[pScreen->myNum]; ScrnInfoPtr scrn = xf86Screens[pScreen->myNum];
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
xf86_config->dga_flags = 0; xf86_config->dga_flags = 0;
xf86_config->dga_address = dga_address; xf86_config->dga_address = 0;
xf86_config->dga_width = scrn->virtualX; xf86_config->dga_width = 0;
xf86_config->dga_height = scrn->virtualY; xf86_config->dga_height = 0;
xf86_config->dga_stride = scrn->displayWidth * scrn->bitsPerPixel >> 3; xf86_config->dga_stride = 0;
if (!xf86_dga_get_modes (pScreen)) if (!xf86_dga_get_modes (pScreen))
return FALSE; return FALSE;

View File

@ -45,20 +45,23 @@
#include <string.h> #include <string.h>
#include <math.h> #include <math.h>
static void handle_detailed_rblank(struct detailed_monitor_section *det_mon,
void *data)
{
if (det_mon->type == DS_RANGES)
if (det_mon->section.ranges.supported_blanking & CVT_REDUCED)
*(Bool*)data = TRUE;
}
static Bool static Bool
xf86MonitorSupportsReducedBlanking(xf86MonPtr DDC) xf86MonitorSupportsReducedBlanking(xf86MonPtr DDC)
{ {
/* EDID 1.4 explicitly defines RB support */ /* EDID 1.4 explicitly defines RB support */
if (DDC->ver.revision >= 4) { if (DDC->ver.revision >= 4) {
int i; Bool ret = FALSE;
for (i = 0; i < DET_TIMINGS; i++) {
struct detailed_monitor_section *det_mon = &DDC->det_mon[i]; xf86ForEachDetailedBlock(DDC, handle_detailed_rblank, &ret);
if (det_mon->type == DS_RANGES) return ret;
if (det_mon->section.ranges.supported_blanking & CVT_REDUCED)
return TRUE;
}
return FALSE;
} }
/* For anything older, assume digital means RB support. Boo. */ /* For anything older, assume digital means RB support. Boo. */
@ -68,34 +71,6 @@ xf86MonitorSupportsReducedBlanking(xf86MonPtr DDC)
return FALSE; return FALSE;
} }
/*
* Quirks to work around broken EDID data from various monitors.
*/
typedef enum {
DDC_QUIRK_NONE = 0,
/* First detailed mode is bogus, prefer largest mode at 60hz */
DDC_QUIRK_PREFER_LARGE_60 = 1 << 0,
/* 135MHz clock is too high, drop a bit */
DDC_QUIRK_135_CLOCK_TOO_HIGH = 1 << 1,
/* Prefer the largest mode at 75 Hz */
DDC_QUIRK_PREFER_LARGE_75 = 1 << 2,
/* Convert detailed timing's horizontal from units of cm to mm */
DDC_QUIRK_DETAILED_H_IN_CM = 1 << 3,
/* Convert detailed timing's vertical from units of cm to mm */
DDC_QUIRK_DETAILED_V_IN_CM = 1 << 4,
/* Detailed timing descriptors have bogus size values, so just take the
* maximum size and use that.
*/
DDC_QUIRK_DETAILED_USE_MAXIMUM_SIZE = 1 << 5,
/* Monitor forgot to set the first detailed is preferred bit. */
DDC_QUIRK_FIRST_DETAILED_PREFERRED = 1 << 6,
/* use +hsync +vsync for detailed mode */
DDC_QUIRK_DETAILED_SYNC_PP = 1 << 7,
/* Force single-link DVI bandwidth limit */
DDC_QUIRK_DVI_SINGLE_LINK = 1 << 8,
} ddc_quirk_t;
static Bool quirk_prefer_large_60 (int scrnIndex, xf86MonPtr DDC) static Bool quirk_prefer_large_60 (int scrnIndex, xf86MonPtr DDC)
{ {
/* Belinea 10 15 55 */ /* Belinea 10 15 55 */
@ -160,6 +135,16 @@ static Bool quirk_detailed_v_in_cm (int scrnIndex, xf86MonPtr DDC)
DDC->vendor.prod_id == 47360) DDC->vendor.prod_id == 47360)
return TRUE; return TRUE;
/* Bug #10304: LGPhilipsLCD LP154W01-A5 */
if (memcmp(DDC->vendor.name, "LPL", 4) == 0 &&
DDC->vendor.prod_id == 0)
return TRUE;
/* Bug #24482: LGPhilipsLCD LP154W01-TLA1 */
if (memcmp(DDC->vendor.name, "LPL", 4) == 0 &&
DDC->vendor.prod_id == 0x2a00)
return TRUE;
/* Bug #21750: Samsung Syncmaster 2333HD */ /* Bug #21750: Samsung Syncmaster 2333HD */
if (memcmp (DDC->vendor.name, "SAM", 4) == 0 && if (memcmp (DDC->vendor.name, "SAM", 4) == 0 &&
DDC->vendor.prod_id == 1157) DDC->vendor.prod_id == 1157)
@ -170,11 +155,6 @@ static Bool quirk_detailed_v_in_cm (int scrnIndex, xf86MonPtr DDC)
static Bool quirk_detailed_use_maximum_size (int scrnIndex, xf86MonPtr DDC) static Bool quirk_detailed_use_maximum_size (int scrnIndex, xf86MonPtr DDC)
{ {
/* Bug #10304: LGPhilipsLCD LP154W01-A5 */
if (memcmp (DDC->vendor.name, "LPL", 4) == 0 &&
(DDC->vendor.prod_id == 0 || DDC->vendor.prod_id == 0x2a00))
return TRUE;
/* Bug #21324: Iiyama Vision Master 450 */ /* Bug #21324: Iiyama Vision Master 450 */
if (memcmp (DDC->vendor.name, "IVM", 4) == 0 && if (memcmp (DDC->vendor.name, "IVM", 4) == 0 &&
DDC->vendor.prod_id == 6400) DDC->vendor.prod_id == 6400)
@ -266,7 +246,7 @@ static const ddc_quirk_map_t ddc_quirks[] = {
}, },
{ {
quirk_detailed_use_maximum_size, DDC_QUIRK_DETAILED_USE_MAXIMUM_SIZE, quirk_detailed_use_maximum_size, DDC_QUIRK_DETAILED_USE_MAXIMUM_SIZE,
"Detailed timings give sizes in cm." "Use maximum size instead of detailed timing sizes."
}, },
{ {
quirk_first_detailed_preferred, DDC_QUIRK_FIRST_DETAILED_PREFERRED, quirk_first_detailed_preferred, DDC_QUIRK_FIRST_DETAILED_PREFERRED,
@ -498,8 +478,10 @@ DDCModesFromStandardTiming(struct std_timings *timing, ddc_quirk_t quirks,
vsize = timing[i].vsize; vsize = timing[i].vsize;
refresh = timing[i].refresh; refresh = timing[i].refresh;
/* HDTV hack. Hooray. */ /* HDTV hack, because you can't say 1366 */
if (hsize == 1360 && vsize == 765 && refresh == 60) { if (refresh == 60 &&
((hsize == 1360 && vsize == 765) ||
(hsize == 1368 && vsize == 769))) {
Mode = xf86CVTMode(1366, 768, 60, FALSE, FALSE); Mode = xf86CVTMode(1366, 768, 60, FALSE, FALSE);
Mode->HDisplay = 1366; Mode->HDisplay = 1366;
Mode->VSyncStart--; Mode->VSyncStart--;
@ -527,6 +509,45 @@ DDCModesFromStandardTiming(struct std_timings *timing, ddc_quirk_t quirks,
return Modes; return Modes;
} }
static void
DDCModeDoInterlaceQuirks(DisplayModePtr mode)
{
/*
* EDID is delightfully ambiguous about how interlaced modes are to be
* encoded. X's internal representation is of frame height, but some
* HDTV detailed timings are encoded as field height.
*
* The format list here is from CEA, in frame size. Technically we
* should be checking refresh rate too. Whatever.
*/
static const struct {
int w, h;
} cea_interlaced[] = {
{ 1920, 1080 },
{ 720, 480 },
{ 1440, 480 },
{ 2880, 480 },
{ 720, 576 },
{ 1440, 576 },
{ 2880, 576 },
};
static const int n_modes = sizeof(cea_interlaced)/sizeof(cea_interlaced[0]);
int i;
for (i = 0; i < n_modes; i++) {
if ((mode->HDisplay == cea_interlaced[i].w) &&
(mode->VDisplay == cea_interlaced[i].h / 2)) {
mode->VDisplay *= 2;
mode->VSyncStart *= 2;
mode->VSyncEnd *= 2;
mode->VTotal *= 2;
mode->VTotal |= 1;
}
}
mode->Flags |= V_INTERLACE;
}
/* /*
* *
*/ */
@ -591,12 +612,10 @@ DDCModeFromDetailedTiming(int scrnIndex, struct detailed_timings *timing,
return NULL; return NULL;
} }
xf86SetModeDefaultName(Mode);
/* We ignore h/v_size and h/v_border for now. */ /* We ignore h/v_size and h/v_border for now. */
if (timing->interlaced) if (timing->interlaced)
Mode->Flags |= V_INTERLACE; DDCModeDoInterlaceQuirks(Mode);
if (quirks & DDC_QUIRK_DETAILED_SYNC_PP) if (quirks & DDC_QUIRK_DETAILED_SYNC_PP)
Mode->Flags |= V_PVSYNC | V_PHSYNC; Mode->Flags |= V_PVSYNC | V_PHSYNC;
@ -612,6 +631,8 @@ DDCModeFromDetailedTiming(int scrnIndex, struct detailed_timings *timing,
Mode->Flags |= V_NHSYNC; Mode->Flags |= V_NHSYNC;
} }
xf86SetModeDefaultName(Mode);
return Mode; return Mode;
} }
@ -774,7 +795,7 @@ DDCGuessRangesFromModes(int scrnIndex, MonPtr Monitor, DisplayModePtr Modes)
} }
} }
static ddc_quirk_t ddc_quirk_t
xf86DDCDetectQuirks(int scrnIndex, xf86MonPtr DDC, Bool verbose) xf86DDCDetectQuirks(int scrnIndex, xf86MonPtr DDC, Bool verbose)
{ {
ddc_quirk_t quirks; ddc_quirk_t quirks;
@ -794,6 +815,25 @@ xf86DDCDetectQuirks(int scrnIndex, xf86MonPtr DDC, Bool verbose)
return quirks; return quirks;
} }
void xf86DetTimingApplyQuirks(struct detailed_monitor_section *det_mon,
ddc_quirk_t quirks,
int hsize, int vsize)
{
if (det_mon->type != DT)
return;
if (quirks & DDC_QUIRK_DETAILED_H_IN_CM)
det_mon->section.d_timings.h_size *= 10;
if (quirks & DDC_QUIRK_DETAILED_V_IN_CM)
det_mon->section.d_timings.v_size *= 10;
if (quirks & DDC_QUIRK_DETAILED_USE_MAXIMUM_SIZE) {
det_mon->section.d_timings.h_size = 10 * hsize;
det_mon->section.d_timings.v_size = 10 * vsize;
}
}
/** /**
* Applies monitor-specific quirks to the decoded EDID information. * Applies monitor-specific quirks to the decoded EDID information.
* *
@ -807,21 +847,9 @@ xf86DDCApplyQuirks(int scrnIndex, xf86MonPtr DDC)
int i; int i;
for (i = 0; i < DET_TIMINGS; i++) { for (i = 0; i < DET_TIMINGS; i++) {
struct detailed_monitor_section *det_mon = &DDC->det_mon[i]; xf86DetTimingApplyQuirks(DDC->det_mon + i, quirks,
DDC->features.hsize,
if (det_mon->type != DT) DDC->features.vsize);
continue;
if (quirks & DDC_QUIRK_DETAILED_H_IN_CM)
det_mon->section.d_timings.h_size *= 10;
if (quirks & DDC_QUIRK_DETAILED_V_IN_CM)
det_mon->section.d_timings.v_size *= 10;
if (quirks & DDC_QUIRK_DETAILED_USE_MAXIMUM_SIZE) {
det_mon->section.d_timings.h_size = 10 * DDC->features.hsize;
det_mon->section.d_timings.v_size = 10 * DDC->features.vsize;
}
} }
} }
@ -866,14 +894,156 @@ xf86DDCSetPreferredRefresh(int scrnIndex, DisplayModePtr modes,
best->type |= M_T_PREFERRED; best->type |= M_T_PREFERRED;
} }
#define CEA_VIDEO_MODES_NUM 64
static const DisplayModeRec CEAVideoModes[CEA_VIDEO_MODES_NUM] = {
{ MODEPREFIX, 25175, 640, 656, 752, 800, 0, 480, 490, 492, 525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 1:640x480@60Hz */
{ MODEPREFIX, 27000, 720, 736, 798, 858, 0, 480, 489, 495, 525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 2:720x480@60Hz */
{ MODEPREFIX, 27000, 720, 736, 798, 858, 0, 480, 489, 495, 525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 3:720x480@60Hz */
{ MODEPREFIX, 74250, 1280, 1390, 1430, 1650, 0, 720, 725, 730, 750, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 4: 1280x720@60Hz */
{ MODEPREFIX, 74250, 1920, 2008, 2052, 2200, 0, 1080, 1084, 1094, 1125, 0, V_PHSYNC | V_PVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 5:1920x1080i@60Hz */
{ MODEPREFIX, 27000, 1440, 1478, 1602, 1716, 0, 480, 488, 494, 525, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 6:1440x480i@60Hz */
{ MODEPREFIX, 27000, 1440, 1478, 1602, 1716, 0, 480, 488, 494, 525, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 7:1440x480i@60Hz */
{ MODEPREFIX, 27000, 1440, 1478, 1602, 1716, 0, 240, 244, 247, 262, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 8:1440x240@60Hz */
{ MODEPREFIX, 27000, 1440, 1478, 1602, 1716, 0, 240, 244, 247, 262, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 9:1440x240@60Hz */
{ MODEPREFIX, 54000, 2880, 2956, 3204, 3432, 0, 480, 488, 494, 525, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 10:2880x480i@60Hz */
{ MODEPREFIX, 54000, 2880, 2956, 3204, 3432, 0, 480, 488, 494, 525, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 11:2880x480i@60Hz */
{ MODEPREFIX, 54000, 2880, 2956, 3204, 3432, 0, 240, 244, 247, 262, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 12:2880x240@60Hz */
{ MODEPREFIX, 54000, 2880, 2956, 3204, 3432, 0, 240, 244, 247, 262, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 13:2880x240@60Hz */
{ MODEPREFIX, 54000, 1440, 1472, 1596, 1716, 0, 480, 489, 495, 525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 14:1440x480@60Hz */
{ MODEPREFIX, 54000, 1440, 1472, 1596, 1716, 0, 480, 489, 495, 525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 15:1440x480@60Hz */
{ MODEPREFIX, 148500, 1920, 2008, 2052, 2200, 0, 1080, 1084, 1089, 1125, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 16:1920x1080@60Hz */
{ MODEPREFIX, 27000, 720, 732, 796, 864, 0, 576, 581, 586, 625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 17:720x576@50Hz */
{ MODEPREFIX, 27000, 720, 732, 796, 864, 0, 576, 581, 586, 625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 18:720x576@50Hz */
{ MODEPREFIX, 74250, 1280, 1720, 1760, 1980, 0, 720, 725, 730, 750, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 19: 1280x720@50Hz */
{ MODEPREFIX, 74250, 1920, 2448, 2492, 2640, 0, 1080, 1084, 1094, 1125, 0, V_PHSYNC | V_PVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 20:1920x1080i@50Hz */
{ MODEPREFIX, 27000, 1440, 1464, 1590, 1728, 0, 576, 580, 586, 625, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 21:1440x576i@50Hz */
{ MODEPREFIX, 27000, 1440, 1464, 1590, 1728, 0, 576, 580, 586, 625, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 22:1440x576i@50Hz */
{ MODEPREFIX, 27000, 1440, 1464, 1590, 1728, 0, 288, 290, 293, 312, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 23:1440x288@50Hz */
{ MODEPREFIX, 27000, 1440, 1464, 1590, 1728, 0, 288, 290, 293, 312, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 24:1440x288@50Hz */
{ MODEPREFIX, 54000, 2880, 2928, 3180, 3456, 0, 576, 580, 586, 625, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 25:2880x576i@50Hz */
{ MODEPREFIX, 54000, 2880, 2928, 3180, 3456, 0, 576, 580, 586, 625, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 26:2880x576i@50Hz */
{ MODEPREFIX, 54000, 2880, 2928, 3180, 3456, 0, 288, 290, 293, 312, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 27:2880x288@50Hz */
{ MODEPREFIX, 54000, 2880, 2928, 3180, 3456, 0, 288, 290, 293, 312, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 28:2880x288@50Hz */
{ MODEPREFIX, 54000, 1440, 1464, 1592, 1728, 0, 576, 581, 586, 625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 29:1440x576@50Hz */
{ MODEPREFIX, 54000, 1440, 1464, 1592, 1728, 0, 576, 581, 586, 625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 30:1440x576@50Hz */
{ MODEPREFIX, 148500, 1920, 2448, 2492, 2640, 0, 1080, 1084, 1089, 1125, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 31:1920x1080@50Hz */
{ MODEPREFIX, 74250, 1920, 2558, 2602, 2750, 0, 1080, 1084, 1089, 1125, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 32:1920x1080@24Hz */
{ MODEPREFIX, 74250, 1920, 2448, 2492, 2640, 0, 1080, 1084, 1089, 1125, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 33:1920x1080@25Hz */
{ MODEPREFIX, 74250, 1920, 2008, 2052, 2200, 0, 1080, 1084, 1089, 1125, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 34:1920x1080@30Hz */
{ MODEPREFIX, 108000, 2880, 2944, 3192, 3432, 0, 480, 489, 495, 525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 35:2880x480@60Hz */
{ MODEPREFIX, 108000, 2880, 2944, 3192, 3432, 0, 480, 489, 495, 525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 36:2880x480@60Hz */
{ MODEPREFIX, 108000, 2880, 2928, 3184, 3456, 0, 576, 581, 586, 625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 37:2880x576@50Hz */
{ MODEPREFIX, 108000, 2880, 2928, 3184, 3456, 0, 576, 581, 586, 625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 38:2880x576@50Hz */
{ MODEPREFIX, 72000, 1920, 1952, 2120, 2304, 0, 1080, 1126, 1136, 1250, 0, V_PHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 39:1920x1080i@50Hz */
{ MODEPREFIX, 148500, 1920, 2448, 2492, 2640, 0, 1080, 1084, 1094, 1125, 0, V_PHSYNC | V_PVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 40:1920x1080i@100Hz */
{ MODEPREFIX, 148500, 1280, 1720, 1760, 1980, 0, 720, 725, 730, 750, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 41:1280x720@100Hz */
{ MODEPREFIX, 54000, 720, 732, 796, 864, 0, 576, 581, 586, 625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 42:720x576@100Hz */
{ MODEPREFIX, 54000, 720, 732, 796, 864, 0, 576, 581, 586, 625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 43:720x576@100Hz */
{ MODEPREFIX, 54000, 1440, 1464, 1590, 1728, 0, 576, 580, 586, 625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 44:1440x576i@100Hz */
{ MODEPREFIX, 54000, 1440, 1464, 1590, 1728, 0, 576, 580, 586, 625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 45:1440x576i@100Hz */
{ MODEPREFIX, 148500, 1920, 2008, 2052, 2200, 0, 1080, 1084, 1094, 1125, 0, V_PHSYNC | V_PVSYNC | V_INTERLACE, MODESUFFIX }, /* VIC 46:1920x1080i@120Hz */
{ MODEPREFIX, 148500, 1280, 1390, 1430, 1650, 0, 720, 725, 730, 750, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 47:1280x720@120Hz */
{ MODEPREFIX, 54000, 720, 736, 798, 858, 0, 480, 489, 495, 525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 48:720x480@120Hz */
{ MODEPREFIX, 54000, 720, 736, 798, 858, 0, 480, 489, 495, 525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 49:720x480@120Hz */
{ MODEPREFIX, 54000, 1440, 1478, 1602, 1716, 0, 480, 488, 494, 525, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX },/* VIC 50:1440x480i@120Hz */
{ MODEPREFIX, 54000, 1440, 1478, 1602, 1716, 0, 480, 488, 494, 525, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX },/* VIC 51:1440x480i@120Hz */
{ MODEPREFIX, 108000, 720, 732, 796, 864, 0, 576, 581, 586, 625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 52:720x576@200Hz */
{ MODEPREFIX, 108000, 720, 732, 796, 864, 0, 576, 581, 586, 625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 53:720x576@200Hz */
{ MODEPREFIX, 108000, 1440, 1464, 1590, 1728, 0, 576, 580, 586, 625, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX },/* VIC 54:1440x576i@200Hz */
{ MODEPREFIX, 108000, 1440, 1464, 1590, 1728, 0, 576, 580, 586, 625, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX },/* VIC 55:1440x576i@200Hz */
{ MODEPREFIX, 108000, 720, 736, 798, 858, 0, 480, 489, 495, 525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 56:720x480@240Hz */
{ MODEPREFIX, 108000, 720, 736, 798, 858, 0, 480, 489, 495, 525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* VIC 57:720x480@240Hz */
{ MODEPREFIX, 108000, 1440, 1478, 1602, 1716, 0, 480, 488, 494, 525, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX },/* VIC 58:1440x480i@240 */
{ MODEPREFIX, 108000, 1440, 1478, 1602, 1716, 0, 480, 488, 494, 525, 0, V_NHSYNC | V_NVSYNC | V_INTERLACE, MODESUFFIX },/* VIC 59:1440x480i@240 */
{ MODEPREFIX, 59400, 1280, 3040, 3080, 3300, 0, 720, 725, 730, 750, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 60: 1280x720@24Hz */
{ MODEPREFIX, 74250, 3700, 3740, 1430, 3960, 0, 720, 725, 730, 750, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 61: 1280x720@25Hz */
{ MODEPREFIX, 74250, 1280, 3040, 3080, 3300, 0, 720, 725, 730, 750, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 62: 1280x720@30Hz */
{ MODEPREFIX, 297000, 1920, 2008, 2052, 2200, 0, 1080, 1084, 1089, 1125, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 63: 1920x1080@120Hz */
{ MODEPREFIX, 297000, 1920, 2448, 2492, 2640, 0, 1080, 1084, 1094, 1125, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* VIC 64:1920x1080@100Hz */
};
/* chose mode line by cea short video descriptor*/
static void handle_cea_svd(struct cea_video_block *video, void *data)
{
DisplayModePtr Mode;
DisplayModePtr *Modes = (DisplayModePtr *) data;
int vid;
vid = video ->video_code & 0x7f;
if (vid < CEA_VIDEO_MODES_NUM) {
Mode = xf86DuplicateMode(CEAVideoModes + vid);
*Modes = xf86ModesAdd(*Modes, Mode);
}
}
static DisplayModePtr
DDCModesFromCEAExtension(int scrnIndex, xf86MonPtr MonPtr)
{
DisplayModePtr Modes = NULL;
xf86ForEachVideoBlock(MonPtr,
handle_cea_svd,
&Modes);
return Modes;
}
struct det_modes_parameter {
xf86MonPtr DDC;
ddc_quirk_t quirks;
DisplayModePtr Modes;
Bool rb;
Bool preferred;
int timing_level;
};
static void handle_detailed_modes(struct detailed_monitor_section *det_mon,
void *data)
{
DisplayModePtr Mode;
struct det_modes_parameter *p = (struct det_modes_parameter *)data;
xf86DetTimingApplyQuirks(det_mon,p->quirks,
p->DDC->features.hsize,
p->DDC->features.vsize);
switch (det_mon->type) {
case DT:
Mode = DDCModeFromDetailedTiming(p->DDC->scrnIndex,
&det_mon->section.d_timings,
p->preferred,
p->quirks);
p->preferred = FALSE;
p->Modes = xf86ModesAdd(p->Modes, Mode);
break;
case DS_STD_TIMINGS:
Mode = DDCModesFromStandardTiming(det_mon->section.std_t,
p->quirks, p->timing_level,p->rb);
p->Modes = xf86ModesAdd(p->Modes, Mode);
break;
#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(7,0,0,0,0)
case DS_CVT:
Mode = DDCModesFromCVT(p->DDC->scrnIndex, det_mon->section.cvt);
p->Modes = xf86ModesAdd(p->Modes, Mode);
break;
#endif
case DS_EST_III:
Mode = DDCModesFromEstIII(det_mon->section.est_iii);
p->Modes = xf86ModesAdd(p->Modes, Mode);
break;
default:
break;
}
}
DisplayModePtr DisplayModePtr
xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC) xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC)
{ {
int i;
DisplayModePtr Modes = NULL, Mode; DisplayModePtr Modes = NULL, Mode;
ddc_quirk_t quirks; ddc_quirk_t quirks;
Bool preferred, rb; Bool preferred, rb;
int timing_level; int timing_level;
struct det_modes_parameter p;
xf86DrvMsg (scrnIndex, X_INFO, "EDID vendor \"%s\", prod id %d\n", xf86DrvMsg (scrnIndex, X_INFO, "EDID vendor \"%s\", prod id %d\n",
DDC->vendor.name, DDC->vendor.prod_id); DDC->vendor.name, DDC->vendor.prod_id);
@ -892,35 +1062,14 @@ xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC)
timing_level = MonitorStandardTimingLevel(DDC); timing_level = MonitorStandardTimingLevel(DDC);
for (i = 0; i < DET_TIMINGS; i++) { p.quirks = quirks;
struct detailed_monitor_section *det_mon = &DDC->det_mon[i]; p.DDC = DDC;
p.Modes = Modes;
Mode = NULL; p.rb = rb;
switch (det_mon->type) { p.preferred = preferred;
case DT: p.timing_level = timing_level;
Mode = DDCModeFromDetailedTiming(scrnIndex, xf86ForEachDetailedBlock(DDC, handle_detailed_modes, &p);
&det_mon->section.d_timings, Modes = p.Modes;
preferred,
quirks);
preferred = FALSE;
break;
case DS_STD_TIMINGS:
Mode = DDCModesFromStandardTiming(det_mon->section.std_t,
quirks, timing_level, rb);
break;
#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(7,0,0,0,0)
case DS_CVT:
Mode = DDCModesFromCVT(scrnIndex, det_mon->section.cvt);
break;
#endif
case DS_EST_III:
Mode = DDCModesFromEstIII(det_mon->section.est_iii);
break;
default:
break;
}
Modes = xf86ModesAdd(Modes, Mode);
}
/* Add established timings */ /* Add established timings */
Mode = DDCModesFromEstablished(scrnIndex, &DDC->timings1, quirks); Mode = DDCModesFromEstablished(scrnIndex, &DDC->timings1, quirks);
@ -930,15 +1079,78 @@ xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC)
Mode = DDCModesFromStandardTiming(DDC->timings2, quirks, timing_level, rb); Mode = DDCModesFromStandardTiming(DDC->timings2, quirks, timing_level, rb);
Modes = xf86ModesAdd(Modes, Mode); Modes = xf86ModesAdd(Modes, Mode);
/* Add cea-extension mode timings */
Mode = DDCModesFromCEAExtension(scrnIndex,DDC);
Modes = xf86ModesAdd(Modes, Mode);
if (quirks & DDC_QUIRK_PREFER_LARGE_60) if (quirks & DDC_QUIRK_PREFER_LARGE_60)
xf86DDCSetPreferredRefresh(scrnIndex, Modes, 60); xf86DDCSetPreferredRefresh(scrnIndex, Modes, 60);
if (quirks & DDC_QUIRK_PREFER_LARGE_75) if (quirks & DDC_QUIRK_PREFER_LARGE_75)
xf86DDCSetPreferredRefresh(scrnIndex, Modes, 75); xf86DDCSetPreferredRefresh(scrnIndex, Modes, 75);
Modes = xf86PruneDuplicateModes(Modes);
return Modes; return Modes;
} }
struct det_mon_parameter {
MonPtr Monitor;
ddc_quirk_t quirks;
Bool have_hsync;
Bool have_vrefresh;
Bool have_maxpixclock;
};
static void handle_detailed_monset(struct detailed_monitor_section *det_mon,
void *data)
{
int clock;
struct det_mon_parameter *p = (struct det_mon_parameter *)data;
int scrnIndex = ((xf86MonPtr)(p->Monitor->DDC))->scrnIndex;
switch (det_mon->type) {
case DS_RANGES:
if (!p->have_hsync) {
if (!p->Monitor->nHsync)
xf86DrvMsg(scrnIndex, X_INFO,
"Using EDID range info for horizontal sync\n");
p->Monitor->hsync[p->Monitor->nHsync].lo =
det_mon->section.ranges.min_h;
p->Monitor->hsync[p->Monitor->nHsync].hi =
det_mon->section.ranges.max_h;
p->Monitor->nHsync++;
} else {
xf86DrvMsg(scrnIndex, X_INFO,
"Using hsync ranges from config file\n");
}
if (!p->have_vrefresh) {
if (!p->Monitor->nVrefresh)
xf86DrvMsg(scrnIndex, X_INFO,
"Using EDID range info for vertical refresh\n");
p->Monitor->vrefresh[p->Monitor->nVrefresh].lo =
det_mon->section.ranges.min_v;
p->Monitor->vrefresh[p->Monitor->nVrefresh].hi =
det_mon->section.ranges.max_v;
p->Monitor->nVrefresh++;
} else {
xf86DrvMsg(scrnIndex, X_INFO,
"Using vrefresh ranges from config file\n");
}
clock = det_mon->section.ranges.max_clock * 1000;
if (p->quirks & DDC_QUIRK_DVI_SINGLE_LINK)
clock = min(clock, 165000);
if (!p->have_maxpixclock && clock > p->Monitor->maxPixClock)
p->Monitor->maxPixClock = clock;
break;
default:
break;
}
}
/* /*
* Fill out MonPtr with xf86MonPtr information. * Fill out MonPtr with xf86MonPtr information.
*/ */
@ -946,18 +1158,14 @@ void
xf86EdidMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC) xf86EdidMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC)
{ {
DisplayModePtr Modes = NULL, Mode; DisplayModePtr Modes = NULL, Mode;
int i, clock; struct det_mon_parameter p;
Bool have_hsync = FALSE, have_vrefresh = FALSE, have_maxpixclock = FALSE;
ddc_quirk_t quirks;
if (!Monitor || !DDC) if (!Monitor || !DDC)
return; return;
Monitor->DDC = DDC; Monitor->DDC = DDC;
quirks = xf86DDCDetectQuirks(scrnIndex, DDC, FALSE); if (Monitor->widthmm <= 0 || Monitor->heightmm <= 0) {
if (Monitor->widthmm <= 0 && Monitor->heightmm <= 0) {
Monitor->widthmm = 10 * DDC->features.hsize; Monitor->widthmm = 10 * DDC->features.hsize;
Monitor->heightmm = 10 * DDC->features.vsize; Monitor->heightmm = 10 * DDC->features.vsize;
} }
@ -966,54 +1174,13 @@ xf86EdidMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC)
Modes = xf86DDCGetModes(scrnIndex, DDC); Modes = xf86DDCGetModes(scrnIndex, DDC);
/* Skip EDID ranges if they were specified in the config file */
have_hsync = (Monitor->nHsync != 0);
have_vrefresh = (Monitor->nVrefresh != 0);
have_maxpixclock = (Monitor->maxPixClock != 0);
/* Go through the detailed monitor sections */ /* Go through the detailed monitor sections */
for (i = 0; i < DET_TIMINGS; i++) { p.Monitor = Monitor;
switch (DDC->det_mon[i].type) { p.quirks = xf86DDCDetectQuirks(scrnIndex, Monitor->DDC, FALSE);
case DS_RANGES: p.have_hsync = (Monitor->nHsync != 0);
if (!have_hsync) { p.have_vrefresh = (Monitor->nVrefresh != 0);
if (!Monitor->nHsync) p.have_maxpixclock = (Monitor->maxPixClock != 0);
xf86DrvMsg(scrnIndex, X_INFO, xf86ForEachDetailedBlock(DDC, handle_detailed_monset, &p);
"Using EDID range info for horizontal sync\n");
Monitor->hsync[Monitor->nHsync].lo =
DDC->det_mon[i].section.ranges.min_h;
Monitor->hsync[Monitor->nHsync].hi =
DDC->det_mon[i].section.ranges.max_h;
Monitor->nHsync++;
} else {
xf86DrvMsg(scrnIndex, X_INFO,
"Using hsync ranges from config file\n");
}
if (!have_vrefresh) {
if (!Monitor->nVrefresh)
xf86DrvMsg(scrnIndex, X_INFO,
"Using EDID range info for vertical refresh\n");
Monitor->vrefresh[Monitor->nVrefresh].lo =
DDC->det_mon[i].section.ranges.min_v;
Monitor->vrefresh[Monitor->nVrefresh].hi =
DDC->det_mon[i].section.ranges.max_v;
Monitor->nVrefresh++;
} else {
xf86DrvMsg(scrnIndex, X_INFO,
"Using vrefresh ranges from config file\n");
}
clock = DDC->det_mon[i].section.ranges.max_clock * 1000;
if (quirks & DDC_QUIRK_DVI_SINGLE_LINK)
clock = min(clock, 165000);
if (!have_maxpixclock && clock > Monitor->maxPixClock)
Monitor->maxPixClock = clock;
break;
default:
break;
}
}
if (Modes) { if (Modes) {
/* Print Modes */ /* Print Modes */

View File

@ -136,10 +136,12 @@ xf86ModeBandwidth(DisplayModePtr mode, int depth)
void void
xf86SetModeDefaultName(DisplayModePtr mode) xf86SetModeDefaultName(DisplayModePtr mode)
{ {
if (mode->name != NULL) Bool interlaced = !!(mode->Flags & V_INTERLACE);
xfree(mode->name);
mode->name = XNFprintf("%dx%d", mode->HDisplay, mode->VDisplay); xfree(mode->name);
mode->name = XNFprintf("%dx%d%s", mode->HDisplay, mode->VDisplay,
interlaced ? "i" : "");
} }
/* /*
@ -689,3 +691,37 @@ xf86GetDefaultModes (void)
} }
return head; return head;
} }
/*
* Walk a mode list and prune out duplicates. Will preserve the preferred
* mode of an otherwise-duplicate pair.
*
* Probably best to call this on lists that are all of a single class
* (driver, default, user, etc.), otherwise, which mode gets deleted is
* not especially well defined.
*
* Returns the new list.
*/
DisplayModePtr
xf86PruneDuplicateModes(DisplayModePtr modes)
{
DisplayModePtr m, n, o;
top:
for (m = modes; m; m = m->next) {
for (n = m->next; n; n = o) {
o = n->next;
if (xf86ModesEqual(m, n)) {
if (n->type & M_T_PREFERRED) {
xf86DeleteMode(&modes, m);
goto top;
}
else
xf86DeleteMode(&modes, n);
}
}
}
return modes;
}

View File

@ -95,6 +95,9 @@ extern _X_EXPORT void
xf86PruneInvalidModes(ScrnInfoPtr pScrn, DisplayModePtr *modeList, xf86PruneInvalidModes(ScrnInfoPtr pScrn, DisplayModePtr *modeList,
Bool verbose); Bool verbose);
extern _X_EXPORT DisplayModePtr
xf86PruneDuplicateModes(DisplayModePtr modes);
extern _X_EXPORT void extern _X_EXPORT void
xf86ValidateModesFlags(ScrnInfoPtr pScrn, DisplayModePtr modeList, xf86ValidateModesFlags(ScrnInfoPtr pScrn, DisplayModePtr modeList,
int flags); int flags);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc. * Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
* *
* Permission to use, copy, modify, distribute, and sell this software and its * Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that * documentation for any purpose is hereby granted without fee, provided that
@ -467,9 +467,6 @@ xf86RandR12GetInfo (ScreenPtr pScreen, Rotation *rotations)
{ {
xf86ProbeOutputModes (scrp, 0, 0); xf86ProbeOutputModes (scrp, 0, 0);
xf86SetScrnInfoModes (scrp); xf86SetScrnInfoModes (scrp);
#ifdef XFreeXDGA
xf86DiDGAReInit (pScreen);
#endif
} }
for (mode = scrp->modes; ; mode = mode->next) for (mode = scrp->modes; ; mode = mode->next)
@ -808,9 +805,10 @@ xf86RandR12CreateScreenResources (ScreenPtr pScreen)
} }
else else
{ {
xf86OutputPtr output = config->output[config->compat_output]; xf86OutputPtr output = xf86CompatOutput(pScrn);
if (output->conf_monitor && if (output &&
output->conf_monitor &&
(output->conf_monitor->mon_width > 0 && (output->conf_monitor->mon_width > 0 &&
output->conf_monitor->mon_height > 0)) output->conf_monitor->mon_height > 0))
{ {
@ -874,7 +872,12 @@ xf86RandR12Init (ScreenPtr pScreen)
#ifdef PANORAMIX #ifdef PANORAMIX
/* XXX disable RandR when using Xinerama */ /* XXX disable RandR when using Xinerama */
if (!noPanoramiXExtension) if (!noPanoramiXExtension)
return TRUE; {
if (xf86NumScreens == 1)
noPanoramiXExtension = TRUE;
else
return TRUE;
}
#endif #endif
if (xf86RandR12Generation != serverGeneration) if (xf86RandR12Generation != serverGeneration)
@ -1528,9 +1531,6 @@ xf86RandR12GetInfo12 (ScreenPtr pScreen, Rotation *rotations)
return TRUE; return TRUE;
xf86ProbeOutputModes (pScrn, 0, 0); xf86ProbeOutputModes (pScrn, 0, 0);
xf86SetScrnInfoModes (pScrn); xf86SetScrnInfoModes (pScrn);
#ifdef XFreeXDGA
xf86DiDGAReInit (pScreen);
#endif
return xf86RandR12SetInfo12 (pScreen); return xf86RandR12SetInfo12 (pScreen);
} }
@ -1720,10 +1720,13 @@ xf86RandR12ChangeGamma(int scrnIndex, Gamma gamma)
{ {
CARD16 *points, *red, *green, *blue; CARD16 *points, *red, *green, *blue;
ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn); RRCrtcPtr crtc = xf86CompatRRCrtc(pScrn);
RRCrtcPtr crtc = config->output[config->compat_output]->crtc->randr_crtc; int size;
int size = max(0, crtc->gammaSize);
if (!crtc)
return Success;
size = max(0, crtc->gammaSize);
if (!size) if (!size)
return Success; return Success;

View File

@ -268,13 +268,9 @@ xf86RotateBlockHandler(int screenNum, pointer blockData,
rotation_active = xf86RotateRedisplay(pScreen); rotation_active = xf86RotateRedisplay(pScreen);
pScreen->BlockHandler = xf86_config->BlockHandler; pScreen->BlockHandler = xf86_config->BlockHandler;
(*pScreen->BlockHandler) (screenNum, blockData, pTimeout, pReadmask); (*pScreen->BlockHandler) (screenNum, blockData, pTimeout, pReadmask);
if (rotation_active) { /* cannot avoid re-wrapping until all wrapping is audited */
/* Re-wrap if rotation is still happening */ xf86_config->BlockHandler = pScreen->BlockHandler;
xf86_config->BlockHandler = pScreen->BlockHandler; pScreen->BlockHandler = xf86RotateBlockHandler;
pScreen->BlockHandler = xf86RotateBlockHandler;
} else {
xf86_config->BlockHandler = NULL;
}
} }
void void

View File

@ -64,6 +64,7 @@
#ifndef _xf86Parser_h_ #ifndef _xf86Parser_h_
#define _xf86Parser_h_ #define _xf86Parser_h_
#include <X11/Xdefs.h>
#include "xf86Optrec.h" #include "xf86Optrec.h"
#define HAVE_PARSER_DECLS #define HAVE_PARSER_DECLS
@ -330,6 +331,33 @@ typedef struct
} }
XF86ConfInputrefRec, *XF86ConfInputrefPtr; XF86ConfInputrefRec, *XF86ConfInputrefPtr;
typedef struct
{
Bool set;
Bool val;
}
xf86TriState;
typedef struct
{
GenericListRec list;
char *identifier;
char *driver;
char **match_product;
char **match_vendor;
char **match_device;
char **match_tag;
xf86TriState is_keyboard;
xf86TriState is_pointer;
xf86TriState is_joystick;
xf86TriState is_tablet;
xf86TriState is_touchpad;
xf86TriState is_touchscreen;
XF86OptionPtr option_lst;
char *comment;
}
XF86ConfInputClassRec, *XF86ConfInputClassPtr;
/* Values for adj_where */ /* Values for adj_where */
#define CONF_ADJ_OBSOLETE -1 #define CONF_ADJ_OBSOLETE -1
#define CONF_ADJ_ABSOLUTE 0 #define CONF_ADJ_ABSOLUTE 0
@ -438,6 +466,7 @@ typedef struct
XF86ConfDevicePtr conf_device_lst; XF86ConfDevicePtr conf_device_lst;
XF86ConfScreenPtr conf_screen_lst; XF86ConfScreenPtr conf_screen_lst;
XF86ConfInputPtr conf_input_lst; XF86ConfInputPtr conf_input_lst;
XF86ConfInputClassPtr conf_inputclass_lst;
XF86ConfLayoutPtr conf_layout_lst; XF86ConfLayoutPtr conf_layout_lst;
XF86ConfVendorPtr conf_vendor_lst; XF86ConfVendorPtr conf_vendor_lst;
XF86ConfDRIPtr conf_dri; XF86ConfDRIPtr conf_dri;
@ -456,13 +485,16 @@ xf86ConfigSymTabRec, *xf86ConfigSymTabPtr;
/* /*
* prototypes for public functions * prototypes for public functions
*/ */
extern _X_EXPORT const char *xf86openConfigFile (const char *, const char *, extern void xf86initConfigFiles(void);
const char *); extern const char *xf86openConfigFile(const char *path, const char *cmdline,
extern _X_EXPORT void xf86setBuiltinConfig(const char *config[]); const char *projroot);
extern _X_EXPORT XF86ConfigPtr xf86readConfigFile (void); extern const char *xf86openConfigDirFiles(const char *path, const char *cmdline,
extern _X_EXPORT void xf86closeConfigFile (void); const char *projroot);
extern _X_EXPORT void xf86freeConfig (XF86ConfigPtr p); extern void xf86setBuiltinConfig(const char *config[]);
extern _X_EXPORT int xf86writeConfigFile (const char *, XF86ConfigPtr); extern XF86ConfigPtr xf86readConfigFile(void);
extern void xf86closeConfigFile(void);
extern void xf86freeConfig(XF86ConfigPtr p);
extern int xf86writeConfigFile(const char *, XF86ConfigPtr);
extern _X_EXPORT XF86ConfDevicePtr xf86findDevice(const char *ident, XF86ConfDevicePtr p); extern _X_EXPORT XF86ConfDevicePtr xf86findDevice(const char *ident, XF86ConfDevicePtr p);
extern _X_EXPORT XF86ConfLayoutPtr xf86findLayout(const char *name, XF86ConfLayoutPtr list); extern _X_EXPORT XF86ConfLayoutPtr xf86findLayout(const char *name, XF86ConfLayoutPtr list);
extern _X_EXPORT XF86ConfMonitorPtr xf86findMonitor(const char *ident, XF86ConfMonitorPtr p); extern _X_EXPORT XF86ConfMonitorPtr xf86findMonitor(const char *ident, XF86ConfMonitorPtr p);
@ -473,6 +505,7 @@ extern _X_EXPORT XF86ConfInputPtr xf86findInput(const char *ident, XF86ConfInput
extern _X_EXPORT XF86ConfInputPtr xf86findInputByDriver(const char *driver, XF86ConfInputPtr p); extern _X_EXPORT XF86ConfInputPtr xf86findInputByDriver(const char *driver, XF86ConfInputPtr p);
extern _X_EXPORT XF86ConfVideoAdaptorPtr xf86findVideoAdaptor(const char *ident, extern _X_EXPORT XF86ConfVideoAdaptorPtr xf86findVideoAdaptor(const char *ident,
XF86ConfVideoAdaptorPtr p); XF86ConfVideoAdaptorPtr p);
extern int xf86layoutAddInputDevices(XF86ConfigPtr config, XF86ConfLayoutPtr layout);
extern _X_EXPORT GenericListPtr xf86addListItem(GenericListPtr head, GenericListPtr c_new); extern _X_EXPORT GenericListPtr xf86addListItem(GenericListPtr head, GenericListPtr c_new);
extern _X_EXPORT int xf86itemNotSublist(GenericListPtr list_1, GenericListPtr list_2); extern _X_EXPORT int xf86itemNotSublist(GenericListPtr list_1, GenericListPtr list_2);
@ -480,5 +513,6 @@ extern _X_EXPORT int xf86itemNotSublist(GenericListPtr list_1, GenericListPtr li
extern _X_EXPORT int xf86pathIsAbsolute(const char *path); extern _X_EXPORT int xf86pathIsAbsolute(const char *path);
extern _X_EXPORT int xf86pathIsSafe(const char *path); extern _X_EXPORT int xf86pathIsSafe(const char *path);
extern _X_EXPORT char *xf86addComment(char *cur, char *add); extern _X_EXPORT char *xf86addComment(char *cur, char *add);
extern _X_EXPORT Bool xf86getBoolValue(Bool *val, const char *str);
#endif /* _xf86Parser_h_ */ #endif /* _xf86Parser_h_ */

File diff suppressed because it is too large Load Diff

View File

@ -22,20 +22,22 @@
AC_PREREQ(2.57) AC_PREREQ(2.57)
AC_INIT([xf86-video-nv], AC_INIT([xf86-video-nv],
2.1.15, 2.1.17,
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
xf86-video-nv) xf86-video-nv)
AC_CONFIG_SRCDIR([Makefile.am]) AC_CONFIG_SRCDIR([Makefile.am])
AM_CONFIG_HEADER([config.h]) AM_CONFIG_HEADER([config.h])
# Require xorg-macros: XORG_RELEASE_VERSION XORG_CHANGELOG # Require xorg-macros: XORG_DEFAULT_OPTIONS
m4_ifndef([XORG_MACROS_VERSION], [AC_FATAL([must install xorg-macros 1.2 or later before running autoconf/autogen])]) m4_ifndef([XORG_MACROS_VERSION],
XORG_MACROS_VERSION(1.2) [m4_fatal([must install xorg-macros 1.3 or later before running autoconf/autogen])])
XORG_MACROS_VERSION(1.3)
XORG_DEFAULT_OPTIONS
AC_CONFIG_AUX_DIR(.) AC_CONFIG_AUX_DIR(.)
AM_INIT_AUTOMAKE([dist-bzip2]) AM_INIT_AUTOMAKE([foreign dist-bzip2])
AM_MAINTAINER_MODE AM_MAINTAINER_MODE
@ -70,7 +72,6 @@ PKG_CHECK_MODULES(XEXT, [xextproto >= 7.0.99.1],
HAVE_XEXTPROTO_71="yes"; AC_DEFINE(HAVE_XEXTPROTO_71, 1, [xextproto 7.1 available]), HAVE_XEXTPROTO_71="yes"; AC_DEFINE(HAVE_XEXTPROTO_71, 1, [xextproto 7.1 available]),
HAVE_XEXTPROTO_71="no") HAVE_XEXTPROTO_71="no")
AM_CONDITIONAL(HAVE_XEXTPROTO_71, [ test "$HAVE_XEXTPROTO_71" = "yes" ]) AM_CONDITIONAL(HAVE_XEXTPROTO_71, [ test "$HAVE_XEXTPROTO_71" = "yes" ])
sdkdir=$(pkg-config --variable=sdkdir xorg-server)
# Checks for libraries. # Checks for libraries.
@ -136,10 +137,6 @@ AC_SUBST([moduledir])
DRIVER_NAME=nv DRIVER_NAME=nv
AC_SUBST([DRIVER_NAME]) AC_SUBST([DRIVER_NAME])
XORG_MANPAGE_SECTIONS
XORG_RELEASE_VERSION
XORG_CHANGELOG
AC_OUTPUT([ AC_OUTPUT([
Makefile Makefile
src/Makefile src/Makefile

View File

@ -2127,17 +2127,6 @@ EOF
;; ;;
esac esac
for pass in $passes; do for pass in $passes; do
# The preopen pass in lib mode reverses $deplibs; put it back here
# so that -L comes before libs that need it for instance...
if test "$linkmode,$pass" = "lib,link"; then
## FIXME: Find the place where the list is rebuilt in the wrong
## order, and fix it there properly
tmp_deplibs=
for deplib in $deplibs; do
tmp_deplibs="$deplib $tmp_deplibs"
done
deplibs="$tmp_deplibs"
fi
if test "$linkmode,$pass" = "lib,link" || if test "$linkmode,$pass" = "lib,link" ||
test "$linkmode,$pass" = "prog,scan"; then test "$linkmode,$pass" = "prog,scan"; then
libs="$deplibs" libs="$deplibs"

View File

@ -1,27 +1,24 @@
# #
# Copyright 2005 Sun Microsystems, Inc. All rights reserved. # Copyright 2005 Sun Microsystems, Inc. All rights reserved.
# #
# Permission to use, copy, modify, distribute, and sell this software and its # Permission is hereby granted, free of charge, to any person obtaining a
# documentation for any purpose is hereby granted without fee, provided that # copy of this software and associated documentation files (the "Software"),
# the above copyright notice appear in all copies and that both that # to deal in the Software without restriction, including without limitation
# copyright notice and this permission notice appear in supporting # the rights to use, copy, modify, merge, publish, distribute, sublicense,
# documentation. # and/or sell copies of the Software, and to permit persons to whom the
# # Software is furnished to do so, subject to the following conditions:
# The above copyright notice and this permission notice shall be included #
# in all copies or substantial portions of the Software. # The above copyright notice and this permission notice (including the next
# # paragraph) shall be included in all copies or substantial portions of the
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS # Software.
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF #
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# OTHER DEALINGS IN THE SOFTWARE. # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# Except as contained in this notice, the name of the copyright holders shall # DEALINGS IN THE SOFTWARE.
# not be used in advertising or otherwise to promote the sale, use or
# other dealings in this Software without prior written authorization
# from the copyright holders.
# #
drivermandir = $(DRIVER_MAN_DIR) drivermandir = $(DRIVER_MAN_DIR)

View File

@ -16,28 +16,25 @@
# #
# Copyright 2005 Sun Microsystems, Inc. All rights reserved. # Copyright 2005 Sun Microsystems, Inc. All rights reserved.
# #
# Permission to use, copy, modify, distribute, and sell this software and its # Permission is hereby granted, free of charge, to any person obtaining a
# documentation for any purpose is hereby granted without fee, provided that # copy of this software and associated documentation files (the "Software"),
# the above copyright notice appear in all copies and that both that # to deal in the Software without restriction, including without limitation
# copyright notice and this permission notice appear in supporting # the rights to use, copy, modify, merge, publish, distribute, sublicense,
# documentation. # and/or sell copies of the Software, and to permit persons to whom the
# # Software is furnished to do so, subject to the following conditions:
# The above copyright notice and this permission notice shall be included #
# in all copies or substantial portions of the Software. # The above copyright notice and this permission notice (including the next
# # paragraph) shall be included in all copies or substantial portions of the
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS # Software.
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF #
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# OTHER DEALINGS IN THE SOFTWARE. # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# Except as contained in this notice, the name of the copyright holders shall # DEALINGS IN THE SOFTWARE.
# not be used in advertising or otherwise to promote the sale, use or
# other dealings in this Software without prior written authorization
# from the copyright holders.
# #
srcdir = @srcdir@ srcdir = @srcdir@
@ -89,6 +86,7 @@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@ AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@ AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_DIR = @APP_MAN_DIR@
APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
AR = @AR@ AR = @AR@
@ -104,6 +102,7 @@ CFLAGS = @CFLAGS@
CHANGELOG_CMD = @CHANGELOG_CMD@ CHANGELOG_CMD = @CHANGELOG_CMD@
CPP = @CPP@ CPP = @CPP@
CPPFLAGS = @CPPFLAGS@ CPPFLAGS = @CPPFLAGS@
CWARNFLAGS = @CWARNFLAGS@
CXX = @CXX@ CXX = @CXX@
CXXCPP = @CXXCPP@ CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@ CXXDEPMODE = @CXXDEPMODE@
@ -128,6 +127,7 @@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
GREP = @GREP@ GREP = @GREP@
HAVE_XEXTPROTO_71_FALSE = @HAVE_XEXTPROTO_71_FALSE@ HAVE_XEXTPROTO_71_FALSE = @HAVE_XEXTPROTO_71_FALSE@
HAVE_XEXTPROTO_71_TRUE = @HAVE_XEXTPROTO_71_TRUE@ HAVE_XEXTPROTO_71_TRUE = @HAVE_XEXTPROTO_71_TRUE@
INSTALL_CMD = @INSTALL_CMD@
INSTALL_DATA = @INSTALL_DATA@ INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
@ -189,7 +189,6 @@ build_os = @build_os@
build_vendor = @build_vendor@ build_vendor = @build_vendor@
datadir = @datadir@ datadir = @datadir@
datarootdir = @datarootdir@ datarootdir = @datarootdir@
distcleancheck_listfiles = @distcleancheck_listfiles@
docdir = @docdir@ docdir = @docdir@
dvidir = @dvidir@ dvidir = @dvidir@
exec_prefix = @exec_prefix@ exec_prefix = @exec_prefix@
@ -255,9 +254,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \ exit 1;; \
esac; \ esac; \
done; \ done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/Makefile'; \
cd $(top_srcdir) && \ cd $(top_srcdir) && \
$(AUTOMAKE) --gnu man/Makefile $(AUTOMAKE) --foreign man/Makefile
.PRECIOUS: Makefile .PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \ @case '$?' in \

View File

@ -59,8 +59,8 @@ NV40, NV41, NV43, NV44, NV45, C51
.B GeForce 7XXX .B GeForce 7XXX
G70, G71, G72, G73 G70, G71, G72, G73
.TP 22 .TP 22
.B GeForce 8XXX, GeForce 9XXX .B GeForce 8XXX, GeForce 9XXX, nForce 7, GeForce G, ION
G80, G84, G86, G92, G94, G96, G98 G8x, G9x, GT21x, MCP7x
.TP 22 .TP 22
.B GeForce GTX .B GeForce GTX
GT200 GT200
@ -197,7 +197,7 @@ Authors include: David McKay, Jarno Paananen, Chas Inman, Dave Schmenk,
Mark Vojkovich, Aaron Plattner Mark Vojkovich, Aaron Plattner
.SH COPYRIGHT .SH COPYRIGHT
.LP .LP
Copyright (c) 2003 - 2008 NVIDIA, Corporation Copyright (c) 2003-2008,2010 NVIDIA Corporation
.LP .LP
Permission is hereby granted, free of charge, to any person obtaining a Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the copy of this software and associated documentation files (the

View File

@ -114,6 +114,7 @@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@ AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@ AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_DIR = @APP_MAN_DIR@
APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
AR = @AR@ AR = @AR@
@ -129,6 +130,7 @@ CFLAGS = @CFLAGS@
CHANGELOG_CMD = @CHANGELOG_CMD@ CHANGELOG_CMD = @CHANGELOG_CMD@
CPP = @CPP@ CPP = @CPP@
CPPFLAGS = @CPPFLAGS@ CPPFLAGS = @CPPFLAGS@
CWARNFLAGS = @CWARNFLAGS@
CXX = @CXX@ CXX = @CXX@
CXXCPP = @CXXCPP@ CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@ CXXDEPMODE = @CXXDEPMODE@
@ -153,6 +155,7 @@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
GREP = @GREP@ GREP = @GREP@
HAVE_XEXTPROTO_71_FALSE = @HAVE_XEXTPROTO_71_FALSE@ HAVE_XEXTPROTO_71_FALSE = @HAVE_XEXTPROTO_71_FALSE@
HAVE_XEXTPROTO_71_TRUE = @HAVE_XEXTPROTO_71_TRUE@ HAVE_XEXTPROTO_71_TRUE = @HAVE_XEXTPROTO_71_TRUE@
INSTALL_CMD = @INSTALL_CMD@
INSTALL_DATA = @INSTALL_DATA@ INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
@ -214,7 +217,6 @@ build_os = @build_os@
build_vendor = @build_vendor@ build_vendor = @build_vendor@
datadir = @datadir@ datadir = @datadir@
datarootdir = @datarootdir@ datarootdir = @datarootdir@
distcleancheck_listfiles = @distcleancheck_listfiles@
docdir = @docdir@ docdir = @docdir@
dvidir = @dvidir@ dvidir = @dvidir@
exec_prefix = @exec_prefix@ exec_prefix = @exec_prefix@
@ -340,9 +342,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \ exit 1;; \
esac; \ esac; \
done; \ done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
cd $(top_srcdir) && \ cd $(top_srcdir) && \
$(AUTOMAKE) --gnu src/Makefile $(AUTOMAKE) --foreign src/Makefile
.PRECIOUS: Makefile .PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \ @case '$?' in \

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007 NVIDIA, Corporation * Copyright (c) 2007,2010 NVIDIA Corporation
* *
* Permission is hereby granted, free of charge, to any person obtaining a * Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the * copy of this software and associated documentation files (the
@ -42,6 +42,8 @@ typedef struct G80CrtcPrivRec {
Bool cursorVisible; Bool cursorVisible;
Bool skipModeFixup; Bool skipModeFixup;
Bool dither; Bool dither;
/* Look-up table values to be set when the CRTC is enabled */
uint16_t lut_r[256], lut_g[256], lut_b[256];
} G80CrtcPrivRec, *G80CrtcPrivPtr; } G80CrtcPrivRec, *G80CrtcPrivPtr;
static void G80CrtcShowHideCursor(xf86CrtcPtr crtc, Bool show, Bool update); static void G80CrtcShowHideCursor(xf86CrtcPtr crtc, Bool show, Bool update);
@ -488,7 +490,7 @@ G80CrtcBlankScreen(xf86CrtcPtr crtc, Bool blank)
if(pPriv->cursorVisible) if(pPriv->cursorVisible)
G80CrtcShowHideCursor(crtc, TRUE, FALSE); G80CrtcShowHideCursor(crtc, TRUE, FALSE);
C(0x00000840 + headOff, pScrn->depth == 8 ? 0x80000000 : 0xc0000000); C(0x00000840 + headOff, pScrn->depth == 8 ? 0x80000000 : 0xc0000000);
C(0x00000844 + headOff, (pNv->videoRam * 1024 - 0x5000) >> 8); C(0x00000844 + headOff, (pNv->videoRam * 1024 - 0x5000 - 0x1000 * pPriv->head) >> 8);
if(pNv->architecture != 0x50) if(pNv->architecture != 0x50)
C(0x0000085C + headOff, 1); C(0x0000085C + headOff, 1);
C(0x00000874 + headOff, 1); C(0x00000874 + headOff, 1);
@ -645,6 +647,101 @@ G80CrtcCommit(xf86CrtcPtr crtc)
C(0x00000080, 0); C(0x00000080, 0);
} }
static void
G80CrtcGammaSet(xf86CrtcPtr crtc, CARD16 *red, CARD16 *green, CARD16 *blue,
int size)
{
ScrnInfoPtr pScrn = crtc->scrn;
G80Ptr pNv = G80PTR(pScrn);
G80CrtcPrivPtr pPriv = crtc->driver_private;
int i;
volatile struct {
uint16_t red, green, blue, unused;
} *lut = (void*)&pNv->mem[pNv->videoRam * 1024 - 0x5000 - 0x1000 * pPriv->head];
assert(size == 256);
for(i = 0; i < size; i++) {
pPriv->lut_r[i] = lut[i].red = red[i] >> 2;
pPriv->lut_g[i] = lut[i].green = green[i] >> 2;
pPriv->lut_b[i] = lut[i].blue = blue[i] >> 2;
}
lut[256] = lut[255];
}
void
G80LoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices, LOCO *colors,
VisualPtr pVisual)
{
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
int i, j, index;
int p;
uint16_t lut_r[256], lut_g[256], lut_b[256];
for(p = 0; p < xf86_config->num_crtc; p++) {
xf86CrtcPtr crtc = xf86_config->crtc[p];
G80CrtcPrivPtr pPriv = crtc->driver_private;
/* Initialize to the old lookup table values. */
for(i = 0; i < 256; i++) {
lut_r[i] = pPriv->lut_r[i] << 2;
lut_g[i] = pPriv->lut_g[i] << 2;
lut_b[i] = pPriv->lut_b[i] << 2;
}
switch(pScrn->depth) {
case 15:
for(i = 0; i < numColors; i++) {
index = indices[i];
for(j = 0; j < 8; j++) {
lut_r[index * 8 + j] =
colors[index].red << 8;
lut_g[index * 8 + j] =
colors[index].green << 8;
lut_b[index * 8 + j] =
colors[index].blue << 8;
}
}
break;
case 16:
for(i = 0; i < numColors; i++) {
index = indices[i];
if(index <= 31) {
for(j = 0; j < 8; j++) {
lut_r[index * 8 + j] =
colors[index].red << 8;
lut_b[index * 8 + j] =
colors[index].blue << 8;
}
}
for(j = 0; j < 4; j++) {
lut_g[index * 4 + j] =
colors[index].green << 8;
}
}
break;
default:
for(i = 0; i < numColors; i++) {
index = indices[i];
lut_r[index] = colors[index].red << 8;
lut_g[index] = colors[index].green << 8;
lut_b[index] = colors[index].blue << 8;
}
break;
}
/* Make the change through RandR */
#ifdef RANDR_12_INTERFACE
RRCrtcGammaSet(crtc->randr_crtc, lut_r, lut_g, lut_b);
#else
crtc->funcs->gamma_set(crtc, lut_r, lut_g, lut_b, 256);
#endif
}
}
static const xf86CrtcFuncsRec g80_crtc_funcs = { static const xf86CrtcFuncsRec g80_crtc_funcs = {
.dpms = G80CrtcDPMSSet, .dpms = G80CrtcDPMSSet,
.save = NULL, .save = NULL,
@ -654,7 +751,7 @@ static const xf86CrtcFuncsRec g80_crtc_funcs = {
.mode_fixup = G80CrtcModeFixup, .mode_fixup = G80CrtcModeFixup,
.prepare = G80CrtcPrepare, .prepare = G80CrtcPrepare,
.mode_set = G80CrtcModeSet, .mode_set = G80CrtcModeSet,
// .gamma_set = G80DispGammaSet, .gamma_set = G80CrtcGammaSet,
.commit = G80CrtcCommit, .commit = G80CrtcCommit,
.shadow_create = NULL, .shadow_create = NULL,
.shadow_destroy = NULL, .shadow_destroy = NULL,

View File

@ -22,5 +22,6 @@ void G80CrtcSetCursorPosition(xf86CrtcPtr, int x, int y);
void G80CrtcSkipModeFixup(xf86CrtcPtr); void G80CrtcSkipModeFixup(xf86CrtcPtr);
void G80CrtcSetDither(xf86CrtcPtr, Bool dither, Bool update); void G80CrtcSetDither(xf86CrtcPtr, Bool dither, Bool update);
void G80CrtcSetScale(xf86CrtcPtr, DisplayModePtr, enum G80ScaleMode); void G80CrtcSetScale(xf86CrtcPtr, DisplayModePtr, enum G80ScaleMode);
void G80LoadPalette(ScrnInfoPtr, int numColors, int *indices, LOCO *, VisualPtr);
void G80DispCreateCrtcs(ScrnInfoPtr pScrn); void G80DispCreateCrtcs(ScrnInfoPtr pScrn);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2007 NVIDIA, Corporation * Copyright (c) 2007,2010 NVIDIA Corporation
* *
* Permission is hereby granted, free of charge, to any person obtaining a * Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the * copy of this software and associated documentation files (the
@ -57,7 +57,7 @@
#include "g80_xaa.h" #include "g80_xaa.h"
#define G80_REG_SIZE (1024 * 1024 * 16) #define G80_REG_SIZE (1024 * 1024 * 16)
#define G80_RESERVED_VIDMEM 0xd000 #define G80_RESERVED_VIDMEM 0xe000
typedef enum { typedef enum {
OPTION_HW_CURSOR, OPTION_HW_CURSOR,
@ -614,9 +614,20 @@ G80InitHW(ScrnInfoPtr pScrn)
pNv->reg[0x00706454/4] = 0x00010000; pNv->reg[0x00706454/4] = 0x00010000;
pNv->reg[0x00706460/4] = 0x0000502d; pNv->reg[0x00706460/4] = 0x0000502d;
pNv->reg[0x00706474/4] = 0x00010000; pNv->reg[0x00706474/4] = 0x00010000;
pNv->reg[0x00706480/4] = 0x0019003d; if(pNv->architecture == 0xaa || pNv->architecture == 0xac) {
pNv->reg[0x00706484/4] = (pNv->videoRam << 10) - G80_RESERVED_VIDMEM; uint64_t base = (uint64_t)pNv->reg[0x00100E10/4] << 12;
pNv->reg[0x00706494/4] = 0x00010000; size_t size = (uint64_t)pNv->reg[0x00100E14/4] << 12;
uint64_t limit = base + size - G80_RESERVED_VIDMEM;
pNv->reg[0x00706480/4] = 0x1a003d;
pNv->reg[0x00706484/4] = limit;
pNv->reg[0x00706488/4] = base;
pNv->reg[0x0070648c/4] = base >> 32 | ((limit >> 8) & 0xff000000);
} else {
pNv->reg[0x00706480/4] = 0x0019003d;
pNv->reg[0x00706484/4] = (pNv->videoRam << 10) - G80_RESERVED_VIDMEM;
pNv->reg[0x00706494/4] = 0x00010000;
}
pNv->reg[0x007064a0/4] = 0x0019003d; pNv->reg[0x007064a0/4] = 0x0019003d;
pNv->reg[0x007064a4/4] = bar0_pramin + 0x1100f; pNv->reg[0x007064a4/4] = bar0_pramin + 0x1100f;
pNv->reg[0x007064a8/4] = bar0_pramin + 0x11000; pNv->reg[0x007064a8/4] = bar0_pramin + 0x11000;
@ -630,7 +641,7 @@ G80InitHW(ScrnInfoPtr pScrn)
pNv->reg[0x00003224/4] = 0x000f0078; pNv->reg[0x00003224/4] = 0x000f0078;
pNv->reg[0x0000322c/4] = 0x00000644; pNv->reg[0x0000322c/4] = 0x00000644;
pNv->reg[0x00003234/4] = G80_RESERVED_VIDMEM - 0x5001; pNv->reg[0x00003234/4] = G80_RESERVED_VIDMEM - 0x6001;
pNv->reg[0x00003254/4] = 0x00000001; pNv->reg[0x00003254/4] = 0x00000001;
pNv->reg[0x00002210/4] = 0x1c001000; pNv->reg[0x00002210/4] = 0x1c001000;
@ -655,7 +666,7 @@ G80InitHW(ScrnInfoPtr pScrn)
pNv->dmaPut = 0; pNv->dmaPut = 0;
pNv->dmaCurrent = SKIPS; pNv->dmaCurrent = SKIPS;
pNv->dmaMax = (G80_RESERVED_VIDMEM - 0x5000) / 4 - 2; pNv->dmaMax = (G80_RESERVED_VIDMEM - 0x6000) / 4 - 2;
pNv->dmaFree = pNv->dmaMax - pNv->dmaCurrent; pNv->dmaFree = pNv->dmaMax - pNv->dmaCurrent;
G80DmaStart(pNv, 0, 1); G80DmaStart(pNv, 0, 1);
@ -726,48 +737,6 @@ G80InitHW(ScrnInfoPtr pScrn)
pNv->currentRop = ~0; /* Set to something invalid */ pNv->currentRop = ~0; /* Set to something invalid */
} }
#define DEPTH_SHIFT(val, w) ((val << (8 - w)) | (val >> ((w << 1) - 8)))
#define COLOR(c) (unsigned int)(0x3fff * ((c)/255.0))
static void
G80LoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices, LOCO *colors,
VisualPtr pVisual)
{
G80Ptr pNv = G80PTR(pScrn);
int i, index;
volatile struct {
unsigned short red, green, blue, unused;
} *lut = (void*)&pNv->mem[pNv->videoRam * 1024 - 0x5000];
switch(pScrn->depth) {
case 15:
for(i = 0; i < numColors; i++) {
index = indices[i];
lut[DEPTH_SHIFT(index, 5)].red = COLOR(colors[index].red);
lut[DEPTH_SHIFT(index, 5)].green = COLOR(colors[index].green);
lut[DEPTH_SHIFT(index, 5)].blue = COLOR(colors[index].blue);
}
break;
case 16:
for(i = 0; i < numColors; i++) {
index = indices[i];
lut[DEPTH_SHIFT(index, 6)].green = COLOR(colors[index].green);
if(index < 32) {
lut[DEPTH_SHIFT(index, 5)].red = COLOR(colors[index].red);
lut[DEPTH_SHIFT(index, 5)].blue = COLOR(colors[index].blue);
}
}
break;
default:
for(i = 0; i < numColors; i++) {
index = indices[i];
lut[index].red = COLOR(colors[index].red);
lut[index].green = COLOR(colors[index].green);
lut[index].blue = COLOR(colors[index].blue);
}
break;
}
}
static Bool static Bool
G80ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) G80ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
{ {
@ -866,6 +835,9 @@ G80ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
Must precede creation of the default colormap */ Must precede creation of the default colormap */
miDCInitialize(pScreen, xf86GetPointerScreenFuncs()); miDCInitialize(pScreen, xf86GetPointerScreenFuncs());
if(!xf86CrtcScreenInit(pScreen))
return FALSE;
/* Initialize default colormap */ /* Initialize default colormap */
if(!miCreateDefColormap(pScreen)) if(!miCreateDefColormap(pScreen))
return FALSE; return FALSE;
@ -909,9 +881,6 @@ G80ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
pNv->BlockHandler = pScreen->BlockHandler; pNv->BlockHandler = pScreen->BlockHandler;
pScreen->BlockHandler = G80BlockHandler; pScreen->BlockHandler = G80BlockHandler;
if(!xf86CrtcScreenInit(pScreen))
return FALSE;
return TRUE; return TRUE;
} }

View File

@ -106,9 +106,13 @@ static Bool G80ReadPortMapping(int scrnIndex, G80Ptr pNv)
port = (b >> 4) & 0xf; port = (b >> 4) & 0xf;
or = ffs((b >> 24) & 0xf) - 1; or = ffs((b >> 24) & 0xf) - 1;
if(b & 0x300000) if(b & 0x300000) {
/* Can't handle this type of output yet */ /* Can't handle this type of output yet */
xf86DrvMsg(scrnIndex, X_INFO,
"Ignoring unsupported external output type %d at output "
"%d\n", type, or);
continue; continue;
}
if(type == 0xe) break; if(type == 0xe) break;
@ -140,7 +144,8 @@ static Bool G80ReadPortMapping(int scrnIndex, G80Ptr pNv)
pNv->i2cMap[port].dac = or; pNv->i2cMap[port].dac = or;
break; break;
case 1: /* TV */ case 1: /* TV */
/* Ignore TVs */ xf86DrvMsg(scrnIndex, X_INFO,
"Ignoring unsupported TV output %d\n", or);
break; break;
case 2: /* TMDS */ case 2: /* TMDS */
@ -200,7 +205,15 @@ static Bool G80ReadPortMapping(int scrnIndex, G80Ptr pNv)
break; break;
case 6: /* DisplayPort */
xf86DrvMsg(scrnIndex, X_INFO,
"Ignoring unsupported DisplayPort output %d\n", or);
break;
default: default:
xf86DrvMsg(scrnIndex, X_INFO,
"Ignoring unsupported output type %d at port %d\n",
type, or);
break; break;
} }
} }

View File

@ -1,4 +1,5 @@
/* /*
* Copyright 2010 NVIDIA Corporation
* Copyright 1996-1997 David J. McKay * Copyright 1996-1997 David J. McKay
* *
* Permission is hereby granted, free of charge, to any person obtaining a * Permission is hereby granted, free of charge, to any person obtaining a
@ -124,7 +125,7 @@ _X_EXPORT DriverRec NV = {
#endif #endif
}; };
/* Known cards as of 2009/05/15 */ /* Known cards as of 2010/03/08 */
static SymTabRec NVKnownChipsets[] = static SymTabRec NVKnownChipsets[] =
{ {
@ -416,162 +417,122 @@ static SymTabRec NVKnownChipsets[] =
{ 0x10DE042D, "Quadro FX 360M" }, { 0x10DE042D, "Quadro FX 360M" },
{ 0x10DE042E, "GeForce 9300M G" }, { 0x10DE042E, "GeForce 9300M G" },
{ 0x10DE042F, "Quadro NVS 290" }, { 0x10DE042F, "Quadro NVS 290" },
{ 0x10DE05E0, "GeForce GTX 295" },
{ 0x10DE05E1, "GeForce GTX 280" }, { 0x10DE05E1, "GeForce GTX 280" },
{ 0x10DE05E2, "GeForce GTX 260" }, { 0x10DE05E2, "GeForce GTX 260" },
{ 0x10DE05E3, "GeForce GTX 285" },
{ 0x10DE05E6, "GeForce GTX 275" },
{ 0x10DE05EB, "GeForce GTX 295" },
{ 0x10DE05F9, "Quadro CX" },
{ 0x10DE05FD, "Quadro FX 5800" },
{ 0x10DE05FE, "Quadro FX 4800" },
{ 0x10DE05FF, "Quadro FX 3800" },
{ 0x10DE0600, "GeForce 8800 GTS 512" }, { 0x10DE0600, "GeForce 8800 GTS 512" },
{ 0x10DE0601, "GeForce 9800 GT" },
{ 0x10DE0602, "GeForce 8800 GT" }, { 0x10DE0602, "GeForce 8800 GT" },
{ 0x10DE0604, "GeForce 9800 GX2" }, { 0x10DE0604, "GeForce 9800 GX2" },
{ 0x10DE0605, "GeForce 9800 GT" },
{ 0x10DE0606, "GeForce 8800 GS" }, { 0x10DE0606, "GeForce 8800 GS" },
{ 0x10DE0607, "GeForce GTS 240" },
{ 0x10DE0608, "GeForce 9800M GTX" },
{ 0x10DE0609, "GeForce 8800M GTS" }, { 0x10DE0609, "GeForce 8800M GTS" },
{ 0x10DE060A, "GeForce GTX 280M" },
{ 0x10DE060B, "GeForce 9800M GT" },
{ 0x10DE060C, "GeForce 8800M GTX" }, { 0x10DE060C, "GeForce 8800M GTX" },
{ 0x10DE060D, "GeForce 8800 GS" }, { 0x10DE060D, "GeForce 8800 GS" },
{ 0x10DE0610, "GeForce 9600 GSO" }, { 0x10DE0610, "GeForce 9600 GSO" },
{ 0x10DE0611, "GeForce 8800 GT" }, { 0x10DE0611, "GeForce 8800 GT" },
{ 0x10DE0612, "GeForce 9800 GTX" }, { 0x10DE0612, "GeForce 9800 GTX" },
{ 0x10DE0613, "GeForce 9800 GTK+" }, { 0x10DE0613, "GeForce 9800 GTX+" },
{ 0x10DE0614, "GeForce 9800 GT" }, { 0x10DE0614, "GeForce 9800 GT" },
{ 0x10DE0615, "GeForce GTS 250" },
{ 0x10DE0617, "GeForce 9800M GTX" },
{ 0x10DE0618, "GeForce GTX 260M" },
{ 0x10DE061A, "Quadro FX 3700" }, { 0x10DE061A, "Quadro FX 3700" },
{ 0x10DE061C, "Quadro FX 3600M" }, { 0x10DE061C, "Quadro FX 3600M" },
{ 0x10DE061D, "Quadro FX 2800M" },
{ 0x10DE061E, "Quadro FX 3700M" },
{ 0x10DE061F, "Quadro FX 3800M" },
{ 0x10DE0622, "GeForce 9600 GT" }, { 0x10DE0622, "GeForce 9600 GT" },
{ 0x10DE0623, "GeForce 9600 GS" }, { 0x10DE0623, "GeForce 9600 GS" },
{ 0x10DE0625, "GeForce 9600 GSO 512" },
{ 0x10DE0626, "GeForce GT 130" },
{ 0x10DE0627, "GeForce GT 140" },
{ 0x10DE0628, "GeForce 9800M GTS" }, { 0x10DE0628, "GeForce 9800M GTS" },
{ 0x10DE062A, "GeForce 9700M GTS" }, { 0x10DE062A, "GeForce 9700M GTS" },
{ 0x10DE062B, "GeForce 9800M GS" },
{ 0x10DE062C, "GeForce 9800M GTS" }, { 0x10DE062C, "GeForce 9800M GTS" },
{ 0x10DE0638, "Quadro FX 1800" },
{ 0x10DE063A, "Quadro FX 2700M" },
{ 0x10DE0640, "GeForce 9500 GT" }, { 0x10DE0640, "GeForce 9500 GT" },
{ 0x10DE0641, "GeForce 9400 GT" },
{ 0x10DE0643, "GeForce 9500 GT" },
{ 0x10DE0644, "GeForce 9500 GS" },
{ 0x10DE0646, "GeForce GT 120" },
{ 0x10DE0647, "GeForce 9600M GT" }, { 0x10DE0647, "GeForce 9600M GT" },
{ 0x10DE0648, "GeForce 9600M GS" }, { 0x10DE0648, "GeForce 9600M GS" },
{ 0x10DE0649, "GeForce 9600M GT" }, { 0x10DE0649, "GeForce 9600M GT" },
{ 0x10DE064A, "GeForce 9700M GT" },
{ 0x10DE064B, "GeForce 9500M G" }, { 0x10DE064B, "GeForce 9500M G" },
{ 0x10DE064C, "GeForce 9650M GT" },
{ 0x10DE0652, "GeForce GT 130M" },
{ 0x10DE0656, "GeForce 9500 GT" },
{ 0x10DE0658, "Quadro FX 380" },
{ 0x10DE0659, "Quadro FX 580" },
{ 0x10DE065A, "Quadro FX 1700M" },
{ 0x10DE065C, "Quadro FX 770M" },
{ 0x10DE06E0, "GeForce 9300 GE" }, { 0x10DE06E0, "GeForce 9300 GE" },
{ 0x10DE06E1, "GeForce 9300 GS" }, { 0x10DE06E1, "GeForce 9300 GS" },
{ 0x10DE06E4, "GeForce 8400 GS" }, { 0x10DE06E4, "GeForce 8400 GS" },
{ 0x10DE06E5, "GeForce 9300M GS" }, { 0x10DE06E5, "GeForce 9300M GS" },
{ 0x10DE06E6, "GeForce G100" },
{ 0x10DE06E8, "GeForce 9200M GS" }, { 0x10DE06E8, "GeForce 9200M GS" },
{ 0x10DE06E9, "GeForce 9300M GS" }, { 0x10DE06E9, "GeForce 9300M GS" },
{ 0x10DE06EA, "Quadro NVS 150M" }, { 0x10DE06EA, "Quadro NVS 150M" },
{ 0x10DE06EB, "Quadro NVS 160M" }, { 0x10DE06EB, "Quadro NVS 160M" },
{ 0x10DE084B, "GeForce 9300 GE" }, { 0x10DE06EC, "GeForce G 105M" },
{ 0x10DE06EF, "GeForce G 103M" },
{ 0x10DE06F8, "Quadro NVS 420" },
{ 0x10DE06F9, "Quadro FX 370 LP" },
{ 0x10DE06FA, "Quadro NVS 450" },
{ 0x10DE06FD, "Quadro NVS 295" },
{ 0x10DE0847, "GeForce 9100" },
{ 0x10DE0848, "GeForce 8300" },
{ 0x10DE0849, "GeForce 8200" },
{ 0x10DE084A, "nForce 730a" },
{ 0x10DE084B, "GeForce 9200" },
{ 0x10DE084C, "nForce 980a/780a SLI" },
{ 0x10DE084D, "nForce 750a SLI" },
{ 0x10DE084F, "GeForce 8100 / nForce 720a" },
{ 0x10DE0844, "GeForce 9100M G" },
{ 0x10DE0845, "GeForce 8200M G" },
{ 0x10DE0861, "GeForce 9400" },
{ 0x10DE0862, "GeForce 9400M G" },
{ 0x10DE0863, "GeForce 9400M" },
{ 0x10DE086C, "GeForce 9300 / nForce 730i" },
{ 0x10DE0872, "GeForce G102M" },
{ 0x10DE0873, "GeForce G102M" },
{ 0x10DE087A, "GeForce 9400" },
{ 0x10DE087D, "ION" },
{ 0x10DE087F, "ION LE" },
{ 0x10DE0A20, "GeForce GT 220" },
{ 0x10DE0A23, "GeForce 210" },
{ 0x10DE0A2A, "GeForce GT 230M" },
{ 0x10DE0A34, "GeForce GT 240M" },
{ 0x10DE0A60, "GeForce G210" },
{ 0x10DE0A62, "GeForce 205" },
{ 0x10DE0A63, "GeForce 310" },
{ 0x10DE0A65, "GeForce 210" },
{ 0x10DE0A66, "GeForce 310" },
{ 0x10DE0A74, "GeForce G210M" },
{ 0x10DE0A78, "Quadro FX 380 LP" },
{ 0x10DE0CA3, "GeForce GT 240" },
{ 0x10DE0CA8, "GeForce GTS 260M" },
{ 0x10DE0CA9, "GeForce GTS 250M" },
{-1, NULL} {-1, NULL}
}; };
/*
* List of symbols from other modules that this module references. This
* list is used to tell the loader that it is OK for symbols here to be
* unresolved providing that it hasn't been told that they haven't been
* told that they are essential via a call to xf86LoaderReqSymbols() or
* xf86LoaderReqSymLists(). The purpose is this is to avoid warnings about
* unresolved symbols that are not required.
*/
static const char *vgahwSymbols[] = {
"vgaHWUnmapMem",
"vgaHWDPMSSet",
"vgaHWFreeHWRec",
"vgaHWGetHWRec",
"vgaHWGetIndex",
"vgaHWInit",
"vgaHWMapMem",
"vgaHWProtect",
"vgaHWRestore",
"vgaHWSave",
"vgaHWSaveScreen",
NULL
};
static const char *fbSymbols[] = {
"fbPictureInit",
"fbScreenInit",
NULL
};
static const char *xaaSymbols[] = {
"XAACopyROP",
"XAACreateInfoRec",
"XAADestroyInfoRec",
"XAAFallbackOps",
"XAAInit",
"XAAPatternROP",
NULL
};
static const char *ramdacSymbols[] = {
"xf86CreateCursorInfoRec",
"xf86DestroyCursorInfoRec",
"xf86InitCursor",
NULL
};
static const char *ddcSymbols[] = {
"xf86PrintEDID",
"xf86DoEDID_DDC2",
"xf86SetDDCproperties",
NULL
};
#ifdef XFree86LOADER
static const char *vbeSymbols[] = {
"VBEInit",
"vbeFree",
"vbeDoEDID",
NULL
};
static const char *vbeModeSymbols[] = {
"VBEExtendedInit",
"VBEGetVBEInfo",
"VBEGetModePool",
"VBEValidateModes",
"VBESetModeParameters",
"VBEGetVBEMode",
"VBESetVBEMode",
NULL
};
#endif
static const char *i2cSymbols[] = {
"xf86CreateI2CBusRec",
"xf86I2CBusInit",
NULL
};
static const char *shadowSymbols[] = {
"ShadowFBInit",
NULL
};
static const char *fbdevHWSymbols[] = {
"fbdevHWInit",
"fbdevHWUseBuildinMode",
"fbdevHWGetVidmem",
/* colormap */
"fbdevHWLoadPaletteWeak",
/* ScrnInfo hooks */
"fbdevHWAdjustFrameWeak",
"fbdevHWEnterVT",
"fbdevHWLeaveVTWeak",
"fbdevHWModeInit",
"fbdevHWSave",
"fbdevHWSwitchModeWeak",
"fbdevHWValidModeWeak",
"fbdevHWMapMMIO",
"fbdevHWMapVidmem",
NULL
};
static const char *int10Symbols[] = {
"xf86FreeInt10",
"xf86InitInt10",
NULL
};
#ifdef XFree86LOADER #ifdef XFree86LOADER
static MODULESETUPPROTO(nvSetup); static MODULESETUPPROTO(nvSetup);
@ -812,9 +773,16 @@ NVIsG80(int chipType)
case 0x0650: case 0x0650:
case 0x06e0: case 0x06e0:
case 0x06f0: case 0x06f0:
case 0x0840:
case 0x0850:
case 0x0860:
case 0x0870:
case 0x0a20:
case 0x0a30:
case 0x0a60: case 0x0a60:
case 0x0a70: case 0x0a70:
case 0x0ca0: case 0x0ca0:
case 0x0cb0:
return TRUE; return TRUE;
} }