summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Turner <mattst88@gmail.com>2011-07-21 17:21:03 -0400
committerMatt Turner <mattst88@gmail.com>2011-07-21 17:21:03 -0400
commit1ceeee08cd46192b53b226bdea496a852699f040 (patch)
treef66c8ecd5486eb421f9489ec3fb9132f930521d3
parentRemove dev-libs/ppl (diff)
downloadloongson-1ceeee08cd46192b53b226bdea496a852699f040.tar.gz
loongson-1ceeee08cd46192b53b226bdea496a852699f040.tar.bz2
loongson-1ceeee08cd46192b53b226bdea496a852699f040.zip
Remove x11-drivers/xf86-video-ati
There wasn't anything loongson-specific about this. Use a newer version from portage. Signed-off-by: Matt Turner <mattst88@gmail.com>
-rw-r--r--x11-drivers/xf86-video-ati/ChangeLog226
-rw-r--r--x11-drivers/xf86-video-ati/Manifest8
-rw-r--r--x11-drivers/xf86-video-ati/files/ati.xinf39
-rw-r--r--x11-drivers/xf86-video-ati/files/r128.xinf47
-rw-r--r--x11-drivers/xf86-video-ati/files/radeon.xinf197
-rw-r--r--x11-drivers/xf86-video-ati/files/xf86-video-ati-6.6.3-loongson.patch4764
-rw-r--r--x11-drivers/xf86-video-ati/metadata.xml5
-rw-r--r--x11-drivers/xf86-video-ati/xf86-video-ati-6.6.3.ebuild42
8 files changed, 0 insertions, 5328 deletions
diff --git a/x11-drivers/xf86-video-ati/ChangeLog b/x11-drivers/xf86-video-ati/ChangeLog
deleted file mode 100644
index d5d361a..0000000
--- a/x11-drivers/xf86-video-ati/ChangeLog
+++ /dev/null
@@ -1,226 +0,0 @@
-# ChangeLog for x11-drivers/xf86-video-ati
-# Copyright 1999-2007 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/x11-drivers/xf86-video-ati/ChangeLog,v 1.46 2007/01/24 06:56:51 dberkholz Exp $
-
- 24 Jan 2007; Donnie Berkholz <dberkholz@gentoo.org>;
- -xf86-video-ati-6.5.8.0.ebuild:
- Stop supporting Xorg 7.0.
-
- 21 Oct 2006; Emanuele Giaquinta <exg@gentoo.org>
- xf86-video-ati-6.6.3.ebuild:
- Stable on ppc.
-
- 18 Oct 2006; Aron Griffis <agriffis@gentoo.org>
- xf86-video-ati-6.6.3.ebuild:
- Mark 6.6.3 stable on alpha. #144549
-
- 17 Oct 2006; Gustavo Zacarias <gustavoz@gentoo.org>
- xf86-video-ati-6.6.3.ebuild:
- Stable on sparc
-
- 16 Oct 2006; Markus Rothe <corsair@gentoo.org>
- xf86-video-ati-6.6.3.ebuild:
- Stable on ppc64
-
- 14 Oct 2006; Aron Griffis <agriffis@gentoo.org>
- xf86-video-ati-6.6.3.ebuild:
- Mark 6.6.3 stable on ia64. #144549
-
- 13 Oct 2006; Joshua Baergen <joshuabaergen@gentoo.org>
- xf86-video-ati-6.6.3.ebuild:
- AMD64/x86 stable for bug #144549 (X7.1).
-
- 11 Oct 2006; Donnie Berkholz <dberkholz@gentoo.org>;
- xf86-video-ati-6.5.8.0.ebuild, xf86-video-ati-6.6.1.ebuild,
- xf86-video-ati-6.6.3.ebuild:
- Update description to be less generic.
-
- 05 Oct 2006; Joshua Baergen <joshuabaergen@gentoo.org>
- xf86-video-ati-6.5.8.0.ebuild, xf86-video-ati-6.6.1.ebuild,
- xf86-video-ati-6.6.3.ebuild:
- Add dependency on x11-proto/glproto when dri is enabled. (Diego Pettenò, bug
- #150035)
-
- 04 Oct 2006; Donnie Berkholz <dberkholz@gentoo.org>;
- -files/xf86-video-ati-6.5.7.3-hangup-ppc.patch,
- -xf86-video-ati-6.5.7.3.ebuild, -xf86-video-ati-6.6.0.ebuild,
- -xf86-video-ati-6.6.2.ebuild:
- Clean up.
-
-*xf86-video-ati-6.6.3 (04 Oct 2006)
-
- 04 Oct 2006; Donnie Berkholz <dberkholz@gentoo.org>;
- +xf86-video-ati-6.6.3.ebuild:
- Bump, fixes rn50/M6/M7 and some other misc stuff.
-
- 05 Sep 2006; Donnie Berkholz <dberkholz@gentoo.org>; +files/ati.xinf,
- +files/r128.xinf, +files/radeon.xinf:
- Add hwdata files for system-config-display.
-
-*xf86-video-ati-6.6.2 (25 Aug 2006)
-
- 25 Aug 2006; Joshua Baergen <joshuabaergen@gentoo.org>
- +xf86-video-ati-6.6.2.ebuild:
- Version bump. Lots of fixes, especially for r300 stability.
-
- 10 Jul 2006; Aron Griffis <agriffis@gentoo.org>
- xf86-video-ati-6.6.1.ebuild:
- Mark 6.6.1 stable on ia64
-
- 01 Jul 2006; Donnie Berkholz <spyderous@gentoo.org>;
- xf86-video-ati-6.6.1.ebuild:
- stable on ppc sparc alpha arm sh
-
- 30 Jun 2006; Markus Rothe <corsair@gentoo.org>
- xf86-video-ati-6.6.1.ebuild:
- Stable on ppc64
-
- 30 Jun 2006; Chris Gianelloni <wolf31o2@gentoo.org>
- xf86-video-ati-6.5.8.0.ebuild:
- Stable on amd64.
-
- 30 Jun 2006; Markus Rothe <corsair@gentoo.org>
- xf86-video-ati-6.5.8.0.ebuild:
- Stable on ppc64
-
- 30 Jun 2006; Donnie Berkholz <spyderous@gentoo.org>;
- xf86-video-ati-6.5.8.0.ebuild:
- x86 stable.
-
-*xf86-video-ati-6.6.1 (16 Jun 2006)
-
- 16 Jun 2006; Donnie Berkholz <spyderous@gentoo.org>;
- +xf86-video-ati-6.6.1.ebuild:
- Bump. Fixes PCIE suspend/resume, lots of EXA fixes, interrupt handling, and
- more.
-
- 05 Jun 2006; Diego Pettenò <flameeyes@gentoo.org>
- xf86-video-ati-6.6.0.ebuild:
- Add ~x86-fbsd keyword.
-
-*xf86-video-ati-6.5.8.0 (29 Apr 2006)
-
- 29 Apr 2006; Joshua Baergen <joshuabaergen@gentoo.org>
- +xf86-video-ati-6.5.8.0.ebuild:
- Version bump. Includes the memory map fixes that are in the 6.6 series.
-
- 16 Apr 2006; Diego Pettenò <flameeyes@gentoo.org>
- xf86-video-ati-6.5.7.3.ebuild:
- Add ~x86-fbsd keyword.
-
-*xf86-video-ati-6.6.0 (14 Apr 2006)
-
- 14 Apr 2006; Joshua Baergen <joshuabaergen@gentoo.org>
- +xf86-video-ati-6.6.0.ebuild:
- Bump for 7.1 RC1.
-
- 21 Mar 2006; Luca Barbato <lu_zero@gentoo.org>
- +files/xf86-video-ati-6.5.7.3-hangup-ppc.patch,
- xf86-video-ati-6.5.7.3.ebuild:
- Fixed hangup on new Apple PowerBook (rev 5,6 and 5,8), thanks to the people
- in #mklinux for pointing it (and the ubuntu's mantainer)
-
- 23 Feb 2006; Stefaan De Roeck <stefaan@gentoo.org>
- xf86-video-ati-6.5.7.3.ebuild:
- Marked ~alpha (bug #122726)
-
- 14 Feb 2006; Markus Rothe <corsair@gentoo.org>
- xf86-video-ati-6.5.7.3.ebuild:
- Added ~ppc64
-
- 26 Dec 2005; Joshua Baergen <joshuabaergen@gentoo.org>
- -xf86-video-ati-6.5.7.1.ebuild, -xf86-video-ati-6.5.7.2.ebuild:
- Pull old versions.
-
-*xf86-video-ati-6.5.7.3 (23 Dec 2005)
-
- 23 Dec 2005; Joshua Baergen <joshuabaergen@gentoo.org>
- +xf86-video-ati-6.5.7.3.ebuild:
- Bump for 7.0.
-
-*xf86-video-ati-6.5.7.2 (18 Dec 2005)
-
- 18 Dec 2005; Joshua Baergen <joshuabaergen@gentoo.org>
- +xf86-video-ati-6.5.7.2.ebuild:
- Bump for 7.0RC4.
-
- 09 Dec 2005; Joshua Baergen <joshuabaergen@gentoo.org>
- files/digest-xf86-video-ati-6.5.7.1, Manifest:
- Update digest to match patch introduced by x-modular.eclass changes.
-
- 09 Dec 2005; Donnie Berkholz <spyderous@gentoo.org>;
- -xf86-video-ati-6.5.6.1.ebuild, -xf86-video-ati-6.5.7.ebuild:
- Pull old versions.
-
- 04 Dec 2005; Joshua Baergen <joshuabaergen@gentoo.org>
- xf86-video-ati-6.5.7.1.ebuild:
- Repoman fix.
-
-*xf86-video-ati-6.5.7.1 (04 Dec 2005)
-
- 04 Dec 2005; Joshua Baergen <joshuabaergen@gentoo.org>
- +xf86-video-ati-6.5.7.1.ebuild:
- Bump for 7.0RC3.
-
-*xf86-video-ati-6.5.7 (11 Nov 2005)
-
- 11 Nov 2005; Joshua Baergen <joshuabaergen@gentoo.org>
- +xf86-video-ati-6.5.7.ebuild:
- Bump for 7.0RC2.
-
- 31 Oct 2005; Donnie Berkholz <spyderous@gentoo.org>;
- -xf86-video-ati-6.5.6_p20050903.ebuild:
- Pull old versions.
-
-*xf86-video-ati-6.5.6.1 (20 Oct 2005)
-
- 20 Oct 2005; Joshua Baergen <joshuabaergen@gentoo.org>
- +xf86-video-ati-6.5.6.1.ebuild:
- Bump for 7.0 RC1.
-
- 14 Oct 2005; <dang@gentoo.org> xf86-video-ati-6.5.6_p20050903.ebuild:
- Marked ~amd64
-
- 09 Sep 2005; Donnie Berkholz <spyderous@gentoo.org>; +metadata.xml:
- Add metadata.
-
- 08 Sep 2005; Joshua Baergen <joshuabaergen@gentoo.org> ChangeLog:
- Fixed changelog entry.
-
-*xf86-video-ati-6.5.6_p20050903 (08 Sep 2005)
-
- 08 Sep 2005; Joshua Baergen <joshuabaergen@gentoo.org>
- -xf86-video-ati-6.5.6-r2.ebuild, +xf86-video-ati-6.5.6_p20050903.ebuild:
- Fixed package name to properly reflect snapshot taken.
-
-*xf86-video-ati-6.5.6-r2 (03 Sep 2005)
-
- 03 Sep 2005; Joshua Baergen <joshuabaergen@gentoo.org>
- -files/detect-dga-cpio-etc-per-platform.patch,
- -xf86-video-ati-6.5.6.ebuild, -xf86-video-ati-6.5.6-r1.ebuild,
- +xf86-video-ati-6.5.6-r2.ebuild:
- New CVS snapshot of driver which includes previous patch. Old versions
- removed.
-
- 20 Aug 2005; Luca Barbato <lu_zero@gentoo.org>
- xf86-video-ati-6.5.6.ebuild, xf86-video-ati-6.5.6-r1.ebuild:
- Marked ~ppc
-
-*xf86-video-ati-6.5.6-r1 (16 Aug 2005)
-
- 16 Aug 2005; Donnie Berkholz <spyderous@gentoo.org>;
- +files/detect-dga-cpio-etc-per-platform.patch,
- +xf86-video-ati-6.5.6-r1.ebuild:
- Add detect-dga-cpio-etc-per-platform.patch, which should make things work
- for ppc.
-
- 08 Aug 2005; Ferris McCormick <fmccor@gentoo.org>
- xf86-video-ati-6.5.6.ebuild:
- Add ~sparc keyword (X modular testing).
-
-*xf86-video-ati-6.5.6 (08 Aug 2005)
-
- 08 Aug 2005; Donnie Berkholz <spyderous@gentoo.org>;
- +xf86-video-ati-6.5.6.ebuild:
- Initial commit for modular X.
-
diff --git a/x11-drivers/xf86-video-ati/Manifest b/x11-drivers/xf86-video-ati/Manifest
deleted file mode 100644
index f8d33df..0000000
--- a/x11-drivers/xf86-video-ati/Manifest
+++ /dev/null
@@ -1,8 +0,0 @@
-AUX ati.xinf 2028 RMD160 0f57c7452bbf9d2d8d0a96f6f480b98e8a5c6d5f SHA1 51dc48aba9d3e2613d230837d369ebcab86b4c5c SHA256 79540e91ab1baf462ded22a5ef0f3cff0d95bef22db4ec13ea7101dbff29aa74
-AUX r128.xinf 2491 RMD160 02f5ae030596643bdc2ce4982ee47fdbdf656f95 SHA1 cee72fd687711845f4fc435cac00b715fc19b1d3 SHA256 d8f50f12b291d526353aa5d76c95137dafbff22bf47cbb751b686252d104279b
-AUX radeon.xinf 12504 RMD160 48b32c2d4acc1edff0e814a173ecce1b6026ba7c SHA1 1f4d98536d013d3ac6999781578d381bbd94023f SHA256 f23555826bfce07dfaafba60957e347e36fdb694c71bc3ad39d172e3863e7c96
-AUX xf86-video-ati-6.6.3-loongson.patch 135098 RMD160 c1c1b8c6550aba12c5f5a988feee1b67aa1ef213 SHA1 73e824c929c7b6dbd8677f2e55bf4cf95e524885 SHA256 ec8fe6bf23fa1b9dbd24578f535b49413bc67f9b1085998cce35598a0ffb79fb
-DIST xf86-video-ati-6.6.3.tar.bz2 723083 RMD160 a1c24c13ea88fa38f34e3f0540b53082ab2ae129 SHA1 b911df1f4b41ad37028c708e2c95e5a729a32ede SHA256 d08a429e1fb1620ae81839181a4dc6cd579d52fc440d44d7bba36d19be355780
-EBUILD xf86-video-ati-6.6.3.ebuild 1006 RMD160 b618894f109f7aac682534334dc97a9043158c94 SHA1 65a0803eec49f78d02c234b88140fdec7ad200e9 SHA256 392134dc74e3aa575e2af93f4003ccd9c4725ddaaa84a4a4af6ca741b1e2a48c
-MISC ChangeLog 7054 RMD160 649c4a01d9a8ad41a0e0c623f081c56cf922bf27 SHA1 71c5d66e2f7c53a6a96f1308f240ec6dce0a9d2c SHA256 e8a95443d757f21f0e62a6075ff0881d8cd9b3a7e5aaad838ae57d99e4825708
-MISC metadata.xml 156 RMD160 c1274bdccf57603d580de0075ba07a35b7509560 SHA1 6f78f604e3d079d39189b40aaaa1ddb06182ad91 SHA256 5101ab0d4cc8c7125eea733c44e86962769bd77acaf53b69223b9cadcdd29055
diff --git a/x11-drivers/xf86-video-ati/files/ati.xinf b/x11-drivers/xf86-video-ati/files/ati.xinf
deleted file mode 100644
index b089297..0000000
--- a/x11-drivers/xf86-video-ati/files/ati.xinf
+++ /dev/null
@@ -1,39 +0,0 @@
-alias pcivideo:v00001002d00004158sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004354sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004358sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004554sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004654sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004742sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004744sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004747sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004749sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d0000474Csv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d0000474Dsv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d0000474Esv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d0000474Fsv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004750sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004751sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004752sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004753sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004754sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004755sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004756sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004757sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004758sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004759sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d0000475Asv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004C42sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004C44sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004C47sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004C49sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004C4Dsv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004C4Esv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004C50sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004C51sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004C52sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004C53sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00004C54sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00005354sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00005654sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00005655sv*sd*bc*sc*i* ati
-alias pcivideo:v00001002d00005656sv*sd*bc*sc*i* ati
diff --git a/x11-drivers/xf86-video-ati/files/r128.xinf b/x11-drivers/xf86-video-ati/files/r128.xinf
deleted file mode 100644
index 7101783..0000000
--- a/x11-drivers/xf86-video-ati/files/r128.xinf
+++ /dev/null
@@ -1,47 +0,0 @@
-alias pcivideo:v00001002d00004C45sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00004C46sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00004D46sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00004D4Csv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005041sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005042sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005043sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005044sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005045sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005046sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005047sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005048sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005049sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d0000504Asv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d0000504Bsv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d0000504Csv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d0000504Dsv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d0000504Esv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d0000504Fsv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005050sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005051sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005052sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005053sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005054sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005055sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005056sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005057sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005058sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005245sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005246sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005247sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d0000524Bsv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d0000524Csv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005345sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005346sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005347sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005348sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d0000534Bsv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d0000534Csv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d0000534Dsv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d0000534Esv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005446sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d0000544Csv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005452sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005453sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005454sv*sd*bc*sc*i* r128
-alias pcivideo:v00001002d00005455sv*sd*bc*sc*i* r128
diff --git a/x11-drivers/xf86-video-ati/files/radeon.xinf b/x11-drivers/xf86-video-ati/files/radeon.xinf
deleted file mode 100644
index 1eaf4e1..0000000
--- a/x11-drivers/xf86-video-ati/files/radeon.xinf
+++ /dev/null
@@ -1,197 +0,0 @@
-# Secret decoder ring:
-# R100: Original radeon through 7500 (rv200 counts as R100)
-# R200: 8500 through 9250
-# R300: 9500 through X600
-# R400: X700 through X850
-# R500: X1xxx
-#
-# TODO: add mobility series info
-#
-# There are lots of "secondary" PCI IDs for that other OS; we don't list
-# them here and the driver ignores them anyway.
-
-alias pcivideo:v00001002d00003150sv*sd*bc*sc*i* radeon # M24
-alias pcivideo:v00001002d00003151sv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d00003152sv*sd*bc*sc*i* radeon # M22
-alias pcivideo:v00001002d00003153sv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d00003154sv*sd*bc*sc*i* radeon # M24
-alias pcivideo:v00001002d00003156sv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d00003E50sv*sd*bc*sc*i* radeon # rv380
-alias pcivideo:v00001002d00003E51sv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d00003E52sv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d00003E53sv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d00003E54sv*sd*bc*sc*i* radeon # rv380
-alias pcivideo:v00001002d00003E56sv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d00004136sv*sd*bc*sc*i* radeon # IGP 320M
-alias pcivideo:v00001002d00004137sv*sd*bc*sc*i* radeon # IGP 3[345]0
-alias pcivideo:v00001002d00004144sv*sd*bc*sc*i* radeon # R300 AD
-alias pcivideo:v00001002d00004145sv*sd*bc*sc*i* radeon # R300 AE
-alias pcivideo:v00001002d00004146sv*sd*bc*sc*i* radeon # R300 AF
-alias pcivideo:v00001002d00004147sv*sd*bc*sc*i* radeon # R300 AG
-alias pcivideo:v00001002d00004148sv*sd*bc*sc*i* radeon # R350 AH
-alias pcivideo:v00001002d00004149sv*sd*bc*sc*i* radeon # R350 AI
-alias pcivideo:v00001002d0000414Asv*sd*bc*sc*i* radeon # R350 AJ
-alias pcivideo:v00001002d0000414Bsv*sd*bc*sc*i* radeon # R350 AK
-alias pcivideo:v00001002d00004150sv*sd*bc*sc*i* radeon # RV350 AP
-alias pcivideo:v00001002d00004151sv*sd*bc*sc*i* radeon # RV350 AQ
-alias pcivideo:v00001002d00004152sv*sd*bc*sc*i* radeon # RV350 AR
-alias pcivideo:v00001002d00004153sv*sd*bc*sc*i* radeon # RV350 AS
-alias pcivideo:v00001002d00004154sv*sd*bc*sc*i* radeon # RV350 AT
-alias pcivideo:v00001002d00004155sv*sd*bc*sc*i* radeon # RV350 AU
-alias pcivideo:v00001002d00004156sv*sd*bc*sc*i* radeon # RV350 AV
-alias pcivideo:v00001002d00004157sv*sd*bc*sc*i* radeon # RV350 AW
-alias pcivideo:v00001002d00004237sv*sd*bc*sc*i* radeon # 7000 IGP
-alias pcivideo:v00001002d00004242sv*sd*bc*sc*i* radeon # R200 BB
-alias pcivideo:v00001002d00004243sv*sd*bc*sc*i* radeon # R200 DC
-alias pcivideo:v00001002d00004336sv*sd*bc*sc*i* radeon # Mobility U1
-alias pcivideo:v00001002d00004337sv*sd*bc*sc*i* radeon # IGP 3[345]0M
-alias pcivideo:v00001002d00004437sv*sd*bc*sc*i* radeon # Mobility 7000 IGP
-alias pcivideo:v00001002d00004964sv*sd*bc*sc*i* radeon # RV250 Id
-alias pcivideo:v00001002d00004965sv*sd*bc*sc*i* radeon # RV250 Ie
-alias pcivideo:v00001002d00004966sv*sd*bc*sc*i* radeon # RV250 If
-alias pcivideo:v00001002d00004967sv*sd*bc*sc*i* radeon # RV250 Ig
-alias pcivideo:v00001002d00004A48sv*sd*bc*sc*i* radeon # R420 JH
-alias pcivideo:v00001002d00004A49sv*sd*bc*sc*i* radeon # R420 JI
-alias pcivideo:v00001002d00004A4Asv*sd*bc*sc*i* radeon # R420 JJ
-alias pcivideo:v00001002d00004A4Bsv*sd*bc*sc*i* radeon # R420 JK
-alias pcivideo:v00001002d00004A4Csv*sd*bc*sc*i* radeon # R420 JL
-alias pcivideo:v00001002d00004A4Dsv*sd*bc*sc*i* radeon # R420 JM
-alias pcivideo:v00001002d00004A4Esv*sd*bc*sc*i* radeon # M18 JN
-alias pcivideo:v00001002d00004A50sv*sd*bc*sc*i* radeon # R420 JP
-alias pcivideo:v00001002d00004A54sv*sd*bc*sc*i* radeon # R420 JT
-alias pcivideo:v00001002d00004B49sv*sd*bc*sc*i* radeon # R480
-alias pcivideo:v00001002d00004B4Asv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d00004B4Bsv*sd*bc*sc*i* radeon # R480
-alias pcivideo:v00001002d00004B4Csv*sd*bc*sc*i* radeon # R481
-alias pcivideo:v00001002d00004C57sv*sd*bc*sc*i* radeon # M7 LW
-alias pcivideo:v00001002d00004C58sv*sd*bc*sc*i* radeon # M7 LX
-alias pcivideo:v00001002d00004C59sv*sd*bc*sc*i* radeon # M6 LY
-alias pcivideo:v00001002d00004C5Asv*sd*bc*sc*i* radeon # M6 LZ
-alias pcivideo:v00001002d00004C64sv*sd*bc*sc*i* radeon # M9 Ld
-alias pcivideo:v00001002d00004C65sv*sd*bc*sc*i* radeon # M9 Le
-alias pcivideo:v00001002d00004C66sv*sd*bc*sc*i* radeon # R250 Lf
-alias pcivideo:v00001002d00004C67sv*sd*bc*sc*i* radeon # R250 Lg
-# alias pcivideo:v00001002d00004C6Esv*sd*bc*sc*i* radeon # secondary
-alias pcivideo:v00001002d00004E44sv*sd*bc*sc*i* radeon # R300 ND
-alias pcivideo:v00001002d00004E45sv*sd*bc*sc*i* radeon # R300 NE
-alias pcivideo:v00001002d00004E46sv*sd*bc*sc*i* radeon # RV350 NF
-alias pcivideo:v00001002d00004E47sv*sd*bc*sc*i* radeon # R300 NG
-alias pcivideo:v00001002d00004E48sv*sd*bc*sc*i* radeon # R350 NH
-alias pcivideo:v00001002d00004E49sv*sd*bc*sc*i* radeon # R350 NI
-alias pcivideo:v00001002d00004E4Asv*sd*bc*sc*i* radeon # RV350 NJ
-alias pcivideo:v00001002d00004E4Bsv*sd*bc*sc*i* radeon # R350 NK
-alias pcivideo:v00001002d00004E50sv*sd*bc*sc*i* radeon # RV350 NP
-alias pcivideo:v00001002d00004E51sv*sd*bc*sc*i* radeon # M10 NQ
-alias pcivideo:v00001002d00004E52sv*sd*bc*sc*i* radeon # RV350 NR
-alias pcivideo:v00001002d00004E53sv*sd*bc*sc*i* radeon # M10 NS
-alias pcivideo:v00001002d00004E54sv*sd*bc*sc*i* radeon # M10 NT
-alias pcivideo:v00001002d00004E56sv*sd*bc*sc*i* radeon # M10 NV
-# 4F72? seems unlikely, in a secondary range.
-alias pcivideo:v00001002d00005144sv*sd*bc*sc*i* radeon # R100 QD
-alias pcivideo:v00001002d00005145sv*sd*bc*sc*i* radeon # R100 QE
-alias pcivideo:v00001002d00005146sv*sd*bc*sc*i* radeon # R100 QF
-alias pcivideo:v00001002d00005147sv*sd*bc*sc*i* radeon # R100 QG
-# old school method of doing magic names for subdevices
-# alias pcivideo:v00001002d00005148sv00001002sd0000010Abc*sc*i* radeon
-# alias pcivideo:v00001002d00005148sv00001002sd00000152bc*sc*i* radeon
-# alias pcivideo:v00001002d00005148sv00001002sd00000162bc*sc*i* radeon
-# alias pcivideo:v00001002d00005148sv00001002sd00000172bc*sc*i* radeon
-alias pcivideo:v00001002d00005148sv*sd*bc*sc*i* radeon # R200 QH
-alias pcivideo:v00001002d00005149sv*sd*bc*sc*i* radeon # R200 QI
-alias pcivideo:v00001002d0000514Asv*sd*bc*sc*i* radeon # R200 QJ
-alias pcivideo:v00001002d0000514Bsv*sd*bc*sc*i* radeon # R200 QK
-alias pcivideo:v00001002d0000514Csv*sd*bc*sc*i* radeon # R200 QL
-alias pcivideo:v00001002d0000514Dsv*sd*bc*sc*i* radeon # R200 QM
-alias pcivideo:v00001002d0000514Esv*sd*bc*sc*i* radeon # R200 QN
-alias pcivideo:v00001002d0000514Fsv*sd*bc*sc*i* radeon # R200 QO
-alias pcivideo:v00001002d00005154sv*sd*bc*sc*i* radeon # R200 QT
-alias pcivideo:v00001002d00005155sv*sd*bc*sc*i* radeon # R200 QU
-alias pcivideo:v00001002d00005157sv*sd*bc*sc*i* radeon # RV200 QW
-alias pcivideo:v00001002d00005158sv*sd*bc*sc*i* radeon # RV200 QX
-# alias pcivideo:v00001002d00005159sv00001002sd0000000Bbc*sc*i* radeon
-# alias pcivideo:v00001002d00005159sv00001002sd0000013Abc*sc*i* radeon
-alias pcivideo:v00001002d00005159sv*sd*bc*sc*i* radeon # RV200 QY
-alias pcivideo:v00001002d0000515Asv*sd*bc*sc*i* radeon # RV200 QZ
-alias pcivideo:v00001002d0000515Esv*sd*bc*sc*i* radeon # ES1000
-alias pcivideo:v00001002d0000515Fsv*sd*bc*sc*i* radeon # ES1000 (?)
-alias pcivideo:v00001002d00005168sv*sd*bc*sc*i* radeon # R200 Qh
-alias pcivideo:v00001002d00005169sv*sd*bc*sc*i* radeon # R200 Qi
-alias pcivideo:v00001002d0000516Asv*sd*bc*sc*i* radeon # R200 Qj
-alias pcivideo:v00001002d0000516Bsv*sd*bc*sc*i* radeon # R200 Qk
-alias pcivideo:v00001002d0000516Csv*sd*bc*sc*i* radeon # R200 Ql
-alias pcivideo:v00001002d00005460sv*sd*bc*sc*i* radeon # M22
-alias pcivideo:v00001002d00005461sv*sd*bc*sc*i* radeon # M24
-alias pcivideo:v00001002d00005462sv*sd*bc*sc*i* radeon # M22
-alias pcivideo:v00001002d00005463sv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d00005464sv*sd*bc*sc*i* radeon # M22
-alias pcivideo:v00001002d00005465sv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d00005466sv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d00005467sv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d00005548sv*sd*bc*sc*i* radeon # R423 UH
-alias pcivideo:v00001002d00005549sv*sd*bc*sc*i* radeon # R423 UI
-alias pcivideo:v00001002d0000554Asv*sd*bc*sc*i* radeon # R423 UJ
-alias pcivideo:v00001002d0000554Bsv*sd*bc*sc*i* radeon # R423 UK
-alias pcivideo:v00001002d0000554Csv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d0000554Dsv*sd*bc*sc*i* radeon # R430 UM
-alias pcivideo:v00001002d0000554Esv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d0000554Fsv*sd*bc*sc*i* radeon # R430 UO
-alias pcivideo:v00001002d00005550sv*sd*bc*sc*i* radeon # R423 UP
-alias pcivideo:v00001002d00005551sv*sd*bc*sc*i* radeon # R423 UQ
-alias pcivideo:v00001002d00005552sv*sd*bc*sc*i* radeon # R423 UR
-alias pcivideo:v00001002d00005554sv*sd*bc*sc*i* radeon # R423 UT
-alias pcivideo:v00001002d0000564Asv*sd*bc*sc*i* radeon # M26
-alias pcivideo:v00001002d0000564Bsv*sd*bc*sc*i* radeon # M26
-alias pcivideo:v00001002d0000564Fsv*sd*bc*sc*i* radeon # M26
-alias pcivideo:v00001002d00005652sv*sd*bc*sc*i* radeon # M26
-alias pcivideo:v00001002d00005653sv*sd*bc*sc*i* radeon # M26
-alias pcivideo:v00001002d00005834sv*sd*bc*sc*i* radeon # RS300M
-alias pcivideo:v00001002d00005835sv*sd*bc*sc*i* radeon # RS300M
-alias pcivideo:v00001002d00005836sv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d00005837sv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d00005944sv*sd*bc*sc*i* radeon # RV280
-alias pcivideo:v00001002d00005954sv*sd*bc*sc*i* radeon # RS480
-alias pcivideo:v00001002d00005955sv*sd*bc*sc*i* radeon # RS482
-alias pcivideo:v00001002d00005960sv*sd*bc*sc*i* radeon # RV280
-alias pcivideo:v00001002d00005961sv*sd*bc*sc*i* radeon # RV280
-alias pcivideo:v00001002d00005962sv*sd*bc*sc*i* radeon # RV280
-alias pcivideo:v00001002d00005964sv*sd*bc*sc*i* radeon # RV280
-alias pcivideo:v00001002d00005965sv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d00005969sv*sd*bc*sc*i* radeon # ES1000
-alias pcivideo:v00001002d00005974sv*sd*bc*sc*i* radeon # RS482
-alias pcivideo:v00001002d00005975sv*sd*bc*sc*i* radeon # RS482
-alias pcivideo:v00001002d00005A41sv*sd*bc*sc*i* radeon # RS400
-alias pcivideo:v00001002d00005A42sv*sd*bc*sc*i* radeon # RS400
-alias pcivideo:v00001002d00005A61sv*sd*bc*sc*i* radeon # RC410
-alias pcivideo:v00001002d00005A62sv*sd*bc*sc*i* radeon # RC410
-alias pcivideo:v00001002d00005B60sv*sd*bc*sc*i* radeon # RV370
-alias pcivideo:v00001002d00005B61sv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d00005B62sv*sd*bc*sc*i* radeon # RV380
-alias pcivideo:v00001002d00005B63sv*sd*bc*sc*i* radeon # RV370
-alias pcivideo:v00001002d00005B64sv*sd*bc*sc*i* radeon # RV370
-alias pcivideo:v00001002d00005B65sv*sd*bc*sc*i* radeon # RV370
-alias pcivideo:v00001002d00005B66sv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d00005B67sv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d00005B70sv*sd*bc*sc*i* radeon # RV370
-alias pcivideo:v00001002d00005B72sv*sd*bc*sc*i* radeon # RV380
-alias pcivideo:v00001002d00005C61sv*sd*bc*sc*i* radeon # M9+
-alias pcivideo:v00001002d00005C63sv*sd*bc*sc*i* radeon # M9+
-alias pcivideo:v00001002d00005D48sv*sd*bc*sc*i* radeon # M28
-alias pcivideo:v00001002d00005D49sv*sd*bc*sc*i* radeon # M28
-alias pcivideo:v00001002d00005D4Asv*sd*bc*sc*i* radeon # M28
-alias pcivideo:v00001002d00005D4Csv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d00005D4Dsv*sd*bc*sc*i* radeon # R480
-alias pcivideo:v00001002d00005D4Esv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d00005D4Fsv*sd*bc*sc*i* radeon # R480
-alias pcivideo:v00001002d00005D50sv*sd*bc*sc*i* radeon # XXX not in pci.ids
-alias pcivideo:v00001002d00005D52sv*sd*bc*sc*i* radeon # R480
-alias pcivideo:v00001002d00005D57sv*sd*bc*sc*i* radeon # R423
-alias pcivideo:v00001002d00005E48sv*sd*bc*sc*i* radeon # RV410
-alias pcivideo:v00001002d00005E49sv*sd*bc*sc*i* radeon # RV410
-alias pcivideo:v00001002d00005E4Asv*sd*bc*sc*i* radeon # RV410
-alias pcivideo:v00001002d00005E4Bsv*sd*bc*sc*i* radeon # RV410
-alias pcivideo:v00001002d00005E4Csv*sd*bc*sc*i* radeon # RV410
-alias pcivideo:v00001002d00005E4Dsv*sd*bc*sc*i* radeon # RV410
-alias pcivideo:v00001002d00005F57sv*sd*bc*sc*i* radeon # R423
-alias pcivideo:v00001002d00007834sv*sd*bc*sc*i* radeon # 9100 IGP
-alias pcivideo:v00001002d00007835sv*sd*bc*sc*i* radeon # 9200 IGP
-alias pcivideo:v00001002d00007C37sv*sd*bc*sc*i* radeon # RV350
diff --git a/x11-drivers/xf86-video-ati/files/xf86-video-ati-6.6.3-loongson.patch b/x11-drivers/xf86-video-ati/files/xf86-video-ati-6.6.3-loongson.patch
deleted file mode 100644
index e5be904..0000000
--- a/x11-drivers/xf86-video-ati/files/xf86-video-ati-6.6.3-loongson.patch
+++ /dev/null
@@ -1,4764 +0,0 @@
-diff -urN -X /home/zhangle/exec/dontdiff xserver-xorg-video-ati-6.6.3.orig/README.tvout xserver-xorg-video-ati-6.6.3/README.tvout
---- xserver-xorg-video-ati-6.6.3.orig/README.tvout 1970-01-01 08:00:00.000000000 +0800
-+++ xserver-xorg-video-ati-6.6.3/README.tvout 2007-01-08 12:48:05.000000000 +0800
-@@ -0,0 +1,237 @@
-+
-+
-+ *******************************************************
-+ ** XFree86 driver for TV output on ATI Radeon cards **
-+ *******************************************************
-+
-+Copyright (c) 2003-2004, by Federico Ulivi <fulivi@lycos.com>
-+Released under the GNU General Public License, version 2.
-+
-+1. About this driver
-+--------------------
-+
-+This driver was developped as a part of ati.2 project. Its purpose
-+is to enable the TV output of ATI Radeon cards when running the
-+XFree86 graphical environment.
-+
-+2. Status of the driver
-+-----------------------
-+
-+The driver is in early development stage. It currently works with
-+those cards having a Rage Theater chip for TV output or with cards
-+having the tv module inside the Radeon chip (ERT, Embedded Rage
-+Theater, is my name for the latter).
-+The driver was successfully tested on these cards:
-+- Radeon 7200 / European model (TV out hw: RT 100)
-+- Radeon 9000 (TV out hw: ERT)
-+- Radeon 9200SE (TV out hw: ERT)
-+- Radeon 7000 (TV out hw: ERT)
-+
-+3. Making it work
-+-----------------
-+
-+The driver is always loaded by the Radeon driver. If you need to
-+disable this auto-loading mechanism, just set the "TVOutput" option
-+(see below) to "NOLOAD".
-+In principle the driver should coexist with video grabbing functions,
-+especially on those AIW cards where TV output is done by ERT
-+inside Radeon.
-+
-+Principle of operation of the driver is very simple. Driver enables
-+tv output whenever the current screen resolution and tv standard match
-+one of a set of pre-computed combinations. In all other cases tv output
-+is simply kept disabled.
-+The driver currently works in the so-called "clone" mode only. This means
-+that the image on the TV screen is exactly the same as the one on the
-+monitor.
-+
-+The driver is enabled by adding a "TVOutput" line in the "device"
-+section of XF86Config-4 file (this file is usually located in /etc/X11
-+directory). Syntax of this option is very simple:
-+
-+Section "Device"
-+ ..
-+ ..
-+ Option "TVOuput" "<name of tv standard>"
-+EndSection
-+
-+Names of recognized TV standards are:
-+"NTSC"
-+"NTSC-J"
-+"PAL"
-+"PAL-CN"
-+"PAL-M"
-+"PAL-N"
-+"PAL-60"
-+
-+If "TVOutput" is not present or its value is invalid, TV output is kept disabled.
-+
-+In the current version of the driver these are the recognized TV standard &
-+resolution combinations:
-+
-+PAL 800x600
-+NTSC 800x600
-+
-+More combinations will be added in future releases.
-+
-+4. XV Interface
-+---------------
-+
-+The driver has an external interface through some Xv attributes.
-+You can change the value of these attributes by using the tvo_set utility
-+(see below).
-+
-+XV_TVO_STANDARD Settable/Gettable
-+ This is the tv standard in use by the driver. Its value is encoded
-+ according to this table:
-+
-+ 0 NTSC
-+ 1 PAL
-+ 2 PAL-M
-+ 3 PAL-60
-+ 4 NTSC-J
-+ 5 PAL-CN
-+ 6 PAL-N
-+ 7 Keep TV off
-+
-+XV_TVO_MODE_COMPAT Gettable
-+ This attribute is set to 1 whenever TV output is enabled, i.e.
-+ whenever the current resolution & tv standard combination is
-+ recognized by the driver.
-+
-+XV_TVO_HPOS Settable/Gettable
-+5].
-+ This attribute defines the horizontal position of the TV image.
-+ Higher values shift the image to the right, lower values to the left.
-+
-+XV_TVO_VPOS Settable/Gettable
-+5].
-+ This attribute defines the vertical position of the TV image.
-+ Higher values shift the image upward, lower values downward.
-+
-+XV_TVO_HSIZE Settable/Gettable
-+5].
-+ This attribute is used to set the horizontal size of TV image.
-+ Higher values enlarge TV lines, lower values reduce them.
-+
-+Default value for XV_TVO_HPOS, XV_TVO_VPOS & XV_TVO_HSIZE just after
-+X Window start is 0.
-+
-+You might ask where a vertical size attribute has gone. It was not included
-+because it's quite hard to implement (it requires changing many timings in
-+the CRTC). For the moment I'm not planning to work on it.
-+
-+5. tvo_set utility
-+------------------
-+
-+tvo_set is a command line utility that is used to change TV output
-+attributes while X Window is running. It offers a somewhat more
-+friendly interface to XV_TVO_* attributes.
-+
-+This is how to compile tvo_set:
-+- cd to tvo_set directory
-+- xmkmf
-+- make
-+- make install
-+Last step should place the executable (tvo_set) in /usr/X11R6/bin.
-+
-+This is the invocation syntax:
-+tvo_set [-display host:dpy] [<cmd> <attribute> [<value>]]
-+
-+tvo_set is not case sensitive for <cmd>, <attribute> & <value>
-+fields.
-+When no <cmd> is given, tvo_set just dumps the current state of
-+TV attributes.
-+
-+Recognized commands:
-+set <attribute> <value> Set <attribute> to <value>
-+inc <attribute> Increment <attribute> by 1
-+dec <attribute> Decrement <attribute> by 1
-+zero <attribute> Set <attribute> to 0
-+
-+Recognized values for <attribute> field:
-+hpos Horizontal position
-+vpos Vertical position
-+hsize Horizontal size
-+std TV Standard
-+
-+When setting "std" attribute, both the numeric value and the name of the
-+standard are valid, see following table.
-+
-+Table of TV standards:
-+0 NTSC
-+1 PAL
-+2 PAL-M
-+3 PAL-60
-+4 NTSC-J
-+5 PAL-CN
-+6 PAL-N
-+7 OFF
-+
-+Examples:
-+"tvo_set set std ntsc"
-+ Set standard to NTSC
-+
-+"tvo_set set std off"
-+ Turn off TV output
-+
-+"tvo_set set hsize 5"
-+ Set hsize to 5
-+
-+"tvo_set inc hpos"
-+ Shift image a bit to the right (increment hpos by 1)
-+
-+"tvo_set zero vpos"
-+ Restore default value for vpos
-+
-+
-+6. WARNING
-+----------
-+
-+It's important that you are aware of the fact that, when TV output is active,
-+the monitor is driven at the same vertical refresh frequency as that of the
-+TV output. This means 50 or 60 Hz according to the standard you're using.
-+NO CHECK IS DONE IN THE DRIVER ABOUT THE CAPABILITY OF THE MONITOR TO
-+SUSTAIN THESE FREQUENCIES. You should look up in the monitor manual
-+and check that 50/60 Hz is within the limits. IT IS POTENTIALLY HARMFUL
-+TO THE MONITOR TO BE DRIVEN AT A FREQUENCY OUTSIDE ITS OPERATING RANGE.
-+
-+Note, however, that most monitors should accept a 60 Hz vertical frequency,
-+since this is used in standard VGA modes. You should really check for 50 Hz
-+compatibility if you are going to use any related standard (PAL mostly).
-+ATI manuals recommend checking for 50 Hz compatibility (they take
-+60 Hz for granted).
-+
-+One last thing: I did no testing on cards having DVI/LCD outputs
-+so I'm not sure about the driver behaviour with this kind of displays.
-+Be warned.
-+
-+6. Credits
-+----------
-+
-+Vladimir Dergachev For leading the GATOS project, for all the good
-+ advices he gave me about dealing with ATI and for
-+ all his precious technical hints.
-+
-+ATI external developer office
-+ For providing me the Rage Theater documentation.
-+
-+7. Revision history
-+--------------------
-+
-+
-+2003-09-23
-+==========
-+
-+Initial release
-+
-+2003-11-26
-+==========
-+
-+Support for ERT added
-+
-+2004-01-27
-+==========
-+
-+Support for sizing/positioning of TV image added
-+
-diff -urN -X /home/zhangle/exec/dontdiff xserver-xorg-video-ati-6.6.3.orig/src/Makefile.am xserver-xorg-video-ati-6.6.3/src/Makefile.am
---- xserver-xorg-video-ati-6.6.3.orig/src/Makefile.am 2007-03-01 00:15:43.000000000 +0800
-+++ xserver-xorg-video-ati-6.6.3/src/Makefile.am 2007-01-08 12:48:05.000000000 +0800
-@@ -89,6 +89,15 @@
- theatre_detect_drv_la_SOURCES = \
- theatre_detect.c theatre_detect_module.c
-
-+theater_out_drv_la_LTLIBRARIES = theater_out_drv.la
-+theater_out_drv_la_LDFLAGS = -module -avoid-version
-+theater_out_drv_ladir = @moduledir@/multimedia
-+theater_out_drv_la_CFLAGS = \
-+ $(AM_CFLAGS) -DMICROC_DIR=\"$(theater_out_drv_ladir)\"
-+theater_out_drv_la_SOURCES = \
-+ theater_out.c theater_out_module.c
-+
-+
- theatre_drv_la_LTLIBRARIES = theatre_drv.la
- theatre_drv_la_LDFLAGS = -module -avoid-version
- theatre_drv_ladir = @moduledir@/multimedia
-@@ -190,6 +199,7 @@
- radeon_sarea.h \
- radeon_version.h \
- radeon_video.h \
-+ theater_out.h \
- theatre200.h \
- theatre_detect.h \
- theatre.h \
-diff -urN -X /home/zhangle/exec/dontdiff xserver-xorg-video-ati-6.6.3.orig/src/radeon_driver.c xserver-xorg-video-ati-6.6.3/src/radeon_driver.c
---- xserver-xorg-video-ati-6.6.3.orig/src/radeon_driver.c 2007-03-01 00:18:42.000000000 +0800
-+++ xserver-xorg-video-ati-6.6.3/src/radeon_driver.c 2007-01-25 15:15:22.000000000 +0800
-@@ -76,6 +76,7 @@
- #include "radeon_macros.h"
- #include "radeon_probe.h"
- #include "radeon_version.h"
-+#include "theater_out.h"
- #include "radeon_mergedfb.h"
-
- #ifdef XF86DRI
-@@ -196,6 +197,7 @@
- { OPTION_RAGE_THEATRE_COMPOSITE_PORT, "RageTheatreCompositePort", OPTV_INTEGER, {0}, FALSE },
- { OPTION_RAGE_THEATRE_SVIDEO_PORT, "RageTheatreSVideoPort", OPTV_INTEGER, {0}, FALSE },
- { OPTION_TUNER_TYPE, "TunerType", OPTV_INTEGER, {0}, FALSE },
-+ { OPTION_TV_OUTPUT, "TVOutput", OPTV_ANYSTR, {0}, FALSE },
- { OPTION_RAGE_THEATRE_MICROC_PATH, "RageTheatreMicrocPath", OPTV_STRING, {0}, FALSE },
- { OPTION_RAGE_THEATRE_MICROC_TYPE, "RageTheatreMicrocType", OPTV_STRING, {0}, FALSE },
- #endif
-@@ -5707,8 +5709,8 @@
- int hasDRI = 0;
- #ifdef RENDER
- int subPixelOrder = SubPixelUnknown;
-- char* s;
- #endif
-+ char* s;
-
- RADEONTRACE(("RADEONScreenInit %lx %ld\n",
- pScrn->memPhysBase, pScrn->fbOffset));
-@@ -5728,6 +5730,30 @@
-
- info->PaletteSavedOnVT = FALSE;
-
-+ RADEONTRACE(("Allocating VIP interface"));
-+ info->VIP = RADEONAllocateVIP(pScrn);
-+
-+ if ((s = xf86GetOptValString(info->Options , OPTION_TV_OUTPUT)) != NULL && xf86NameCmp(s , "NOLOAD") != 0)
-+ {
-+ RADEONTRACE(("TVOutput opt = %s\n" , s));
-+ if(!xf86LoadSubModule(pScrn , "theater_out"))
-+ {
-+ RADEONTRACE(("Failed to find theater_out module\n"));
-+ xf86DrvMsg(pScrn->scrnIndex , X_ERROR , "Unable to load TV output module\n");
-+ info->theaterOut = NULL;
-+ }
-+ else
-+ {
-+ RADEONTRACE(("Found theater_out module\n"));
-+ xf86LoaderReqSymbols(THEATER_OUT_SYMBOLS , NULL);
-+
-+ info->theaterOut = xf86_detectTheaterOut(pScrn , FALSE,info->VIP);
-+ if (info->theaterOut != NULL)
-+ xf86_initTheaterOut(info->theaterOut , s);
-+ }
-+
-+ }
-+
- RADEONSave(pScrn);
-
- if ((!info->IsSecondary) && info->IsMobility) {
-@@ -6168,7 +6194,8 @@
-
- /* Init Xv */
- RADEONTRACE(("Initializing Xv\n"));
-- RADEONInitVideo(pScreen);
-+// RADEONInitVideo(pScreen);
-+ RADEONInitVideo(pScreen , info->VIP , TRUE);
-
- if(info->MergedFB)
- /* need this here to fix up sarea values */
-@@ -6408,7 +6435,10 @@
- OUTREG(RADEON_OVR_WID_TOP_BOTTOM, restore->ovr_wid_top_bottom);
- OUTREG(RADEON_OV0_SCALE_CNTL, restore->ov0_scale_cntl);
- OUTREG(RADEON_SUBPIC_CNTL, restore->subpic_cntl);
-- OUTREG(RADEON_VIPH_CONTROL, restore->viph_control);
-+// OUTREG(RADEON_VIPH_CONTROL, restore->viph_control);
-+/*
-+ * fulivi: removed. It messes the VIP access up
-+ */
- OUTREG(RADEON_I2C_CNTL_1, restore->i2c_cntl_1);
- OUTREG(RADEON_GEN_INT_CNTL, restore->gen_int_cntl);
- OUTREG(RADEON_CAP0_TRIG_CNTL, restore->cap0_trig_cntl);
-@@ -6494,6 +6524,7 @@
- OUTREG(RADEON_CRTC_OFFSET, restore->crtc_offset);
- OUTREG(RADEON_CRTC_OFFSET_CNTL, restore->crtc_offset_cntl);
- OUTREG(RADEON_CRTC_PITCH, restore->crtc_pitch);
-+ OUTREG(RADEON_DISP_OUTPUT_CNTL, restore->disp_output_cntl),
- OUTREG(RADEON_DISP_MERGE_CNTL, restore->disp_merge_cntl);
- OUTREG(RADEON_CRTC_MORE_CNTL, restore->crtc_more_cntl);
-
-@@ -6676,12 +6707,42 @@
- ~(RADEON_P2PLL_ATOMIC_UPDATE_W));
- }
-
-+static CARD8 RADEONComputePLLGain(CARD16 reference_freq,
-+ CARD16 ref_div,
-+ CARD16 fb_div)
-+{
-+ unsigned vcoFreq;
-+
-+ vcoFreq = ((unsigned)reference_freq * fb_div) / ref_div;
-+
-+ /*
-+ * This is orribly crude: the VCO frequency range is divided into
-+ * 3 parts, each part having a fixed PLL gain value.
-+ */
-+ if (vcoFreq >= 30000)
-+ /*
-+ * [300..max] MHz : 7
-+ */
-+ return 7;
-+ else if (vcoFreq >= 18000)
-+ /*
-+ * [180..300) MHz : 4
-+ */
-+ return 4;
-+ else
-+ /*
-+ * [0..180) MHz : 1
-+ */
-+ return 1;
-+}
-+
- /* Write PLL registers */
- static void RADEONRestorePLLRegisters(ScrnInfoPtr pScrn,
- RADEONSavePtr restore)
- {
- RADEONInfoPtr info = RADEONPTR(pScrn);
- unsigned char *RADEONMMIO = info->MMIO;
-+ CARD8 pllGain;
-
- if (info->IsMobility) {
- /* A temporal workaround for the occational blanking on certain laptop panels.
-@@ -6704,15 +6765,20 @@
- OUTPLLP(pScrn, RADEON_VCLK_ECP_CNTL,
- RADEON_VCLK_SRC_SEL_CPUCLK,
- ~(RADEON_VCLK_SRC_SEL_MASK));
-+ pllGain = RADEONComputePLLGain(info->pll.reference_freq,
-+ restore->ppll_ref_div & RADEON_PPLL_REF_DIV_MASK,
-+ restore->ppll_div_3 & RADEON_PPLL_FB3_DIV_MASK);
-
- OUTPLLP(pScrn,
- RADEON_PPLL_CNTL,
- RADEON_PPLL_RESET
- | RADEON_PPLL_ATOMIC_UPDATE_EN
-- | RADEON_PPLL_VGA_ATOMIC_UPDATE_EN,
-+ | RADEON_PPLL_VGA_ATOMIC_UPDATE_EN
-+ | ((CARD32)pllGain << RADEON_PPLL_PVG_SHIFT),
- ~(RADEON_PPLL_RESET
- | RADEON_PPLL_ATOMIC_UPDATE_EN
-- | RADEON_PPLL_VGA_ATOMIC_UPDATE_EN));
-+ | RADEON_PPLL_VGA_ATOMIC_UPDATE_EN
-+ | RADEON_PPLL_PVG_MASK));
-
- OUTREGP(RADEON_CLOCK_CNTL_INDEX,
- RADEON_PLL_DIV_SEL,
-@@ -6772,9 +6838,8 @@
-
- usleep(50000); /* Let the clock to lock */
-
-- OUTPLLP(pScrn, RADEON_VCLK_ECP_CNTL,
-- RADEON_VCLK_SRC_SEL_PPLLCLK,
-- ~(RADEON_VCLK_SRC_SEL_MASK));
-+ OUTPLL(pScrn, RADEON_VCLK_ECP_CNTL , restore->vclk_ecp_cntl);
-+ RADEONTRACE(("VCLK_ECP_CNTL = %08X\n" , restore->vclk_ecp_cntl));
- }
-
-
-@@ -7197,6 +7262,7 @@
- save->crtc_offset = INREG(RADEON_CRTC_OFFSET);
- save->crtc_offset_cntl = INREG(RADEON_CRTC_OFFSET_CNTL);
- save->crtc_pitch = INREG(RADEON_CRTC_PITCH);
-+ save->disp_output_cntl = INREG(RADEON_DISP_OUTPUT_CNTL);
- save->disp_merge_cntl = INREG(RADEON_DISP_MERGE_CNTL);
- save->crtc_more_cntl = INREG(RADEON_CRTC_MORE_CNTL);
-
-@@ -7266,6 +7332,7 @@
- save->ppll_ref_div = INPLL(pScrn, RADEON_PPLL_REF_DIV);
- save->ppll_div_3 = INPLL(pScrn, RADEON_PPLL_DIV_3);
- save->htotal_cntl = INPLL(pScrn, RADEON_HTOTAL_CNTL);
-+ save->vclk_ecp_cntl= INPLL(pScrn, RADEON_VCLK_ECP_CNTL);
-
- RADEONTRACE(("Read: 0x%08x 0x%08x 0x%08lx\n",
- save->ppll_ref_div,
-@@ -7275,6 +7342,7 @@
- save->ppll_ref_div & RADEON_PPLL_REF_DIV_MASK,
- save->ppll_div_3 & RADEON_PPLL_FB3_DIV_MASK,
- (save->ppll_div_3 & RADEON_PPLL_POST3_DIV_MASK) >> 16));
-+ RADEONTRACE(("Read VCLK_ECP_CNTL = %08x\n" , save->vclk_ecp_cntl));
- }
-
- /* Read PLL registers */
-@@ -7383,6 +7451,12 @@
- RADEONSaveMode(pScrn, save);
- if (!info->IsSecondary)
- RADEONSaveSurfaces(pScrn, save);
-+
-+ /*
-+ * Save initial RT state
-+ */
-+ if(info->theaterOut != NULL)
-+ xf86_theaterOutSave(info->theaterOut , pScrn);
- }
-
- /* Restore the original (text) mode */
-@@ -7424,7 +7498,11 @@
- RADEONRestoreMode(pScrn, restore);
- if (!info->IsSecondary)
- RADEONRestoreSurfaces(pScrn, restore);
--
-+ /*
-+ * Restore RT state
-+ */
-+ if (info->theaterOut != NULL)
-+ xf86_theaterOutRestore(info->theaterOut , pScrn);
- #if 0
- /* Temp fix to "solve" VT switch problems. When switching VTs on
- * some systems, the console can either hang or the fonts can be
-@@ -8175,7 +8253,9 @@
- save->crtc2_gen_cntl = (RADEON_CRTC2_EN | (format << 8));
- save->fp2_h_sync_strt_wid = save->crtc2_h_sync_strt_wid;
- save->fp2_v_sync_strt_wid = save->crtc2_v_sync_strt_wid;
-- save->fp2_gen_cntl = info->SavedReg.fp2_gen_cntl | RADEON_FP2_ON;
-+ save->fp2_gen_cntl = info->SavedReg.fp2_gen_cntl
-+ | RADEON_FP2_SRC_SEL_CRTC2
-+ | RADEON_FP2_ON;
- save->fp2_gen_cntl &= ~(RADEON_FP2_BLANK_EN);
-
- if ((info->ChipFamily == CHIP_FAMILY_R200) ||
-@@ -8521,15 +8601,17 @@
- pll->reference_freq);
- save->post_div = post_div->divider;
-
-- RADEONTRACE(("dc=%ld, of=%ld, fd=%d, pd=%d\n",
-+/* RADEONTRACE(("dc=%ld, of=%ld, fd=%d, pd=%d\n",
- save->dot_clock_freq,
- save->pll_output_freq,
- save->feedback_div,
- save->post_div));
-+*/
-
- save->ppll_ref_div = pll->reference_div;
- save->ppll_div_3 = (save->feedback_div | (post_div->bitvalue << 16));
- save->htotal_cntl = 0;
-+ save->vclk_ecp_cntl = (save->vclk_ecp_cntl & ~RADEON_VCLK_SRC_SEL_MASK) | RADEON_VCLK_SRC_SEL_PPLLCLK;
- }
-
- /* Define PLL2 registers for requested video mode */
-@@ -8583,11 +8665,12 @@
- pll->reference_freq);
- save->post_div_2 = post_div->divider;
-
-- RADEONTRACE(("dc=%ld, of=%ld, fd=%d, pd=%d\n",
-+/* RADEONTRACE(("dc=%ld, of=%ld, fd=%d, pd=%d\n",
- save->dot_clock_freq_2,
- save->pll_output_freq_2,
- save->feedback_div_2,
- save->post_div_2));
-+*/
-
- save->p2pll_ref_div = pll->reference_div;
- save->p2pll_div_0 = (save->feedback_div_2 |
-@@ -8663,6 +8746,12 @@
-
- info->Flags = mode->Flags;
-
-+ /*
-+ * Some registers are initialized from text mode state
-+ */
-+ save->disp_output_cntl = RADEONPTR(pScrn)->SavedReg.disp_output_cntl;
-+ save->vclk_ecp_cntl = RADEONPTR(pScrn)->SavedReg.vclk_ecp_cntl;
-+
- RADEONInitMemMapRegisters(pScrn, save, info);
- RADEONInitCommonRegisters(save, info);
- if (info->IsSecondary) {
-@@ -8730,9 +8819,25 @@
-
- if (!RADEONInit(pScrn, mode, &info->ModeReg)) return FALSE;
-
-+ /*
-+ * Define RT state
-+ */
-+ if (info->theaterOut != NULL)
-+ {
-+ Bool res = xf86_theaterOutInit(info->theaterOut , mode , &info->ModeReg);
-+ RADEONTRACE(("theaterOutInit returns %d\n" , res));
-+ }
-+
- pScrn->vtSema = TRUE;
- RADEONBlank(pScrn);
- RADEONRestoreMode(pScrn, &info->ModeReg);
-+
-+ /*
-+ * Set RT to new mode
-+ */
-+ if (info->theaterOut != NULL)
-+ xf86_theaterOutRestoreMode(info->theaterOut , pScrn);
-+
- RADEONUnblank(pScrn);
-
- info->CurrentLayout.mode = mode;
-@@ -10126,3 +10231,80 @@
- pScrn->FreeScreen = RADEONFreeScreen;
- pScrn->ValidMode = RADEONValidMode;
- }
-+
-+/*
-+ * fulivi: interface functions between RADEONSet/GetPortAttribute (in radeon_video.c) and
-+ * theater_out module.
-+ */
-+static void RADEONRedoSwitchMode(ScrnInfoPtr pScrn)
-+{
-+ int scrnIndex = pScrn->scrnIndex;
-+
-+ /*
-+ * It seems that last parameter (flags) is not used
-+ */
-+ RADEONSwitchMode(scrnIndex , pScrn->currentMode , 0);
-+}
-+
-+void RADEONTheaterOutSetStandard(ScrnInfoPtr pScrn,
-+ TVStd std)
-+{
-+ RADEONInfoPtr info = RADEONPTR(pScrn);
-+
-+ RADEONTRACE(("RADEONTheaterOutSetStandard std = %d" , std));
-+
-+ if (info->theaterOut != NULL && xf86_theaterOutSetStandard(info->theaterOut , std))
-+ RADEONRedoSwitchMode(pScrn);
-+}
-+
-+TVStd RADEONTheaterOutGetStandard(ScrnInfoPtr pScrn)
-+{
-+ RADEONInfoPtr info = RADEONPTR(pScrn);
-+
-+ if (info->theaterOut != NULL)
-+ return xf86_theaterOutGetStandard(info->theaterOut);
-+ else
-+ return TV_STD_KEEP_OFF;
-+}
-+
-+Bool RADEONTheaterOutGetCompatMode(ScrnInfoPtr pScrn)
-+{
-+ RADEONInfoPtr info = RADEONPTR(pScrn);
-+
-+ if (info->theaterOut != NULL)
-+ return xf86_theaterOutGetCompatMode(info->theaterOut);
-+ else
-+ return FALSE;
-+}
-+
-+void RADEONTheaterOutSetAttr(ScrnInfoPtr pScrn,
-+ TheaterOutAttr attr,
-+ int value)
-+{
-+ RADEONInfoPtr info = RADEONPTR(pScrn);
-+
-+ if (info->theaterOut != NULL)
-+ xf86_theaterOutSetAttr(info->theaterOut , attr , value);
-+}
-+
-+int RADEONTheaterOutGetAttr(ScrnInfoPtr pScrn,
-+ TheaterOutAttr attr)
-+{
-+ RADEONInfoPtr info = RADEONPTR(pScrn);
-+
-+ if (info->theaterOut != NULL)
-+ return xf86_theaterOutGetAttr(info->theaterOut , attr);
-+ else
-+ return 0;
-+}
-+
-+void RADEONTheaterOutGetAttrLimits(ScrnInfoPtr pScrn,
-+ TheaterOutAttr attr,
-+ int *maxValue,
-+ int *minValue)
-+{
-+ RADEONInfoPtr info = RADEONPTR(pScrn);
-+
-+ if (info->theaterOut != NULL)
-+ xf86_theaterOutGetAttrLimits(info->theaterOut , attr , maxValue , minValue);
-+}
-diff -urN -X /home/zhangle/exec/dontdiff xserver-xorg-video-ati-6.6.3.orig/src/radeon.h xserver-xorg-video-ati-6.6.3/src/radeon.h
---- xserver-xorg-video-ati-6.6.3.orig/src/radeon.h 2007-03-01 00:15:31.000000000 +0800
-+++ xserver-xorg-video-ati-6.6.3/src/radeon.h 2007-01-08 12:48:04.000000000 +0800
-@@ -41,10 +41,12 @@
- #include <stdlib.h> /* For abs() */
- #include <unistd.h> /* For usleep() */
-
-+#include "radeon_version.h"
- #include "xf86str.h"
- #include "compiler.h"
- #include "xf86fbman.h"
-
-+#include "generic_bus.h"
- /* PCI support */
- #include "xf86Pci.h"
-
-@@ -130,6 +132,7 @@
- OPTION_RAGE_THEATRE_COMPOSITE_PORT,
- OPTION_RAGE_THEATRE_SVIDEO_PORT,
- OPTION_TUNER_TYPE,
-+ OPTION_TV_OUTPUT,
- OPTION_RAGE_THEATRE_MICROC_PATH,
- OPTION_RAGE_THEATRE_MICROC_TYPE,
- #endif
-@@ -292,6 +295,8 @@
- unsigned ppll_div_3;
- CARD32 htotal_cntl;
-
-+ CARD32 vclk_ecp_cntl;
-+
- /* Computed values for PLL2 */
- CARD32 dot_clock_freq_2;
- CARD32 pll_output_freq_2;
-@@ -710,6 +715,8 @@
- char* RageTheatreMicrocPath;
- char* RageTheatreMicrocType;
- Bool MM_TABLE_valid;
-+ GENERIC_BUS_Ptr VIP;
-+ struct TheaterOut *theaterOut;
- struct {
- CARD8 table_revision;
- CARD8 table_size;
-@@ -806,6 +813,8 @@
- info->fifo_slots -= entries; \
- } while (0)
-
-+#include "theater_out.h"
-+
- extern RADEONEntPtr RADEONEntPriv(ScrnInfoPtr pScrn);
- extern void RADEONWaitForFifoFunction(ScrnInfoPtr pScrn, int entries);
- extern void RADEONWaitForIdleMMIO(ScrnInfoPtr pScrn);
-@@ -816,6 +825,13 @@
- extern void RADEONDoAdjustFrame(ScrnInfoPtr pScrn, int x, int y,
- int clone);
-
-+extern void RADEONTheaterOutSetStandard(ScrnInfoPtr, TVStd);
-+extern TVStd RADEONTheaterOutGetStandard(ScrnInfoPtr);
-+extern Bool RADEONTheaterOutGetCompatMode(ScrnInfoPtr);
-+extern void RADEONTheaterOutSetAttr(ScrnInfoPtr, TheaterOutAttr, int);
-+extern int RADEONTheaterOutGetAttr(ScrnInfoPtr, TheaterOutAttr);
-+extern void RADEONTheaterOutGetAttrLimits(ScrnInfoPtr, TheaterOutAttr, int *, int *);
-+
- extern void RADEONEngineReset(ScrnInfoPtr pScrn);
- extern void RADEONEngineFlush(ScrnInfoPtr pScrn);
- extern void RADEONEngineRestore(ScrnInfoPtr pScrn);
-@@ -847,7 +863,10 @@
-
- extern int RADEONMinBits(int val);
-
--extern void RADEONInitVideo(ScreenPtr pScreen);
-+extern GENERIC_BUS_Ptr RADEONAllocateVIP(ScrnInfoPtr pScrn);
-+
-+extern void RADEONInitVideo(ScreenPtr pScreen , GENERIC_BUS_Ptr VIP , Bool loadTheatre);
-+
- extern void RADEONResetVideo(ScrnInfoPtr pScrn);
- extern void R300CGWorkaround(ScrnInfoPtr pScrn);
-
-diff -urN -X /home/zhangle/exec/dontdiff xserver-xorg-video-ati-6.6.3.orig/src/radeon_reg.h xserver-xorg-video-ati-6.6.3/src/radeon_reg.h
---- xserver-xorg-video-ati-6.6.3.orig/src/radeon_reg.h 2007-03-01 00:15:33.000000000 +0800
-+++ xserver-xorg-video-ati-6.6.3/src/radeon_reg.h 2007-01-08 12:48:05.000000000 +0800
-@@ -1223,6 +1223,9 @@
- # define RADEON_PPLL_SLEEP (1 << 1)
- # define RADEON_PPLL_ATOMIC_UPDATE_EN (1 << 16)
- # define RADEON_PPLL_VGA_ATOMIC_UPDATE_EN (1 << 17)
-+# define RADEON_PPLL_PVG_MASK (7 << 11)
-+# define RADEON_PPLL_PVG_SHIFT 11
-+
- # define RADEON_PPLL_ATOMIC_UPDATE_VSYNC (1 << 18)
- #define RADEON_PPLL_DIV_0 0x0004 /* PLL */
- #define RADEON_PPLL_DIV_1 0x0005 /* PLL */
-diff -urN -X /home/zhangle/exec/dontdiff xserver-xorg-video-ati-6.6.3.orig/src/radeon_video.c xserver-xorg-video-ati-6.6.3/src/radeon_video.c
---- xserver-xorg-video-ati-6.6.3.orig/src/radeon_video.c 2007-03-01 00:15:41.000000000 +0800
-+++ xserver-xorg-video-ati-6.6.3/src/radeon_video.c 2007-01-08 12:48:05.000000000 +0800
-@@ -75,7 +75,7 @@
-
- static void RADEONInitOffscreenImages(ScreenPtr);
-
--static XF86VideoAdaptorPtr RADEONSetupImageVideo(ScreenPtr);
-+static XF86VideoAdaptorPtr RADEONSetupImageVideo(ScreenPtr , GENERIC_BUS_Ptr , Bool);
- static int RADEONSetPortAttribute(ScrnInfoPtr, Atom, INT32, pointer);
- static int RADEONGetPortAttribute(ScrnInfoPtr, Atom ,INT32 *, pointer);
- static void RADEONStopVideo(ScrnInfoPtr, pointer, Bool);
-@@ -117,6 +117,23 @@
-
- static Atom xvOvAlpha, xvGrAlpha, xvAlphaMode;
-
-+static Atom xvTvoStandard , xvTvoModeCompat;
-+
-+typedef struct
-+{
-+ char *name;
-+ TheaterOutAttr attr;
-+ Atom atom;
-+} TVOAttr;
-+
-+static
-+TVOAttr theaterOutAttrs[] =
-+{
-+ {"XV_TVO_HPOS" , THEATER_OUT_HPOS , 0 },
-+ {"XV_TVO_VPOS" , THEATER_OUT_VPOS , 0 },
-+ {"XV_TVO_HSIZE" , THEATER_OUT_HSIZE , 0 }
-+};
-+#define N_TVO_ATTRS (sizeof(theaterOutAttrs) / sizeof(theaterOutAttrs[ 0 ]))
-
- #define GET_PORT_PRIVATE(pScrn) \
- (RADEONPortPrivPtr)((RADEONPTR(pScrn))->adaptor->pPortPrivates[0].ptr)
-@@ -135,14 +152,14 @@
- }
- #endif /* USE_EXA */
-
--void RADEONInitVideo(ScreenPtr pScreen)
-+void RADEONInitVideo(ScreenPtr pScreen , GENERIC_BUS_Ptr VIP , Bool loadTheatre)
- {
- ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
- XF86VideoAdaptorPtr *adaptors, *newAdaptors = NULL;
- XF86VideoAdaptorPtr newAdaptor = NULL;
- int num_adaptors;
-
-- newAdaptor = RADEONSetupImageVideo(pScreen);
-+ newAdaptor = RADEONSetupImageVideo(pScreen , VIP , loadTheatre);
- RADEONInitOffscreenImages(pScreen);
- num_adaptors = xf86XVListGenericAdaptors(pScrn, &adaptors);
-
-@@ -235,7 +252,8 @@
-
- #endif
-
--#define NUM_ATTRIBUTES 22
-+//#define NUM_ATTRIBUTES 22
-+#define NUM_ATTRIBUTES 22+5
- #define NUM_DEC_ATTRIBUTES (NUM_ATTRIBUTES+12)
-
- static XF86AttributeRec Attributes[NUM_DEC_ATTRIBUTES+1] =
-@@ -251,6 +269,13 @@
- {XvSettable | XvGettable, 0, 255, "XV_OVERLAY_ALPHA"},
- {XvSettable | XvGettable, 0, 255, "XV_GRAPHICS_ALPHA"},
- {XvSettable | XvGettable, 0, 1, "XV_ALPHA_MODE"},
-+
-+ {XvSettable | XvGettable, 0, TV_STD_N_STANDARDS-1, "XV_TVO_STANDARD"},
-+ { XvGettable, 0, ~0, "XV_TVO_MODE_COMPAT"},
-+ {XvSettable | XvGettable, -1000, 1000, "XV_TVO_HPOS"},
-+ {XvSettable | XvGettable, -1000, 1000, "XV_TVO_VPOS"},
-+ {XvSettable | XvGettable, -1000, 1000, "XV_TVO_HSIZE"},
-+
- {XvSettable | XvGettable, -1000, 1000, "XV_BRIGHTNESS"},
- {XvSettable | XvGettable, -1000, 1000, "XV_CONTRAST"},
- {XvSettable | XvGettable, -1000, 1000, "XV_SATURATION"},
-@@ -1056,6 +1081,7 @@
- RADEONPortPrivPtr pPriv = info->adaptor->pPortPrivates[0].ptr;
- char tmp[200];
-
-+ unsigned i;
- /* this function is called from ScreenInit. pScreen is used
- by XAA internally, but not valid until ScreenInit finishs.
- */
-@@ -1068,6 +1094,18 @@
- xvDeviceID = MAKE_ATOM("XV_DEVICE_ID");
- xvLocationID = MAKE_ATOM("XV_LOCATION_ID");
- xvDumpStatus = MAKE_ATOM("XV_DUMP_STATUS");
-+
-+ xvTvoStandard = MAKE_ATOM("XV_TVO_STANDARD");
-+ xvTvoModeCompat = MAKE_ATOM("XV_TVO_MODE_COMPAT");
-+
-+ for (i = 0; i < N_TVO_ATTRS; i++)
-+ {
-+ char *name;
-+ name = theaterOutAttrs[ i ].name;
-+ theaterOutAttrs[ i ].atom = MakeAtom(name, strlen(name), TRUE);
-+
-+ RADEONTRACE(("RADEONResetVideo,name=%s,atom=%d\n",name,theaterOutAttrs[ i ].atom));
-+ }
-
- xvBrightness = MAKE_ATOM("XV_BRIGHTNESS");
- xvSaturation = MAKE_ATOM("XV_SATURATION");
-@@ -1270,7 +1308,7 @@
- }
-
- static XF86VideoAdaptorPtr
--RADEONAllocAdaptor(ScrnInfoPtr pScrn)
-+RADEONAllocAdaptor(ScrnInfoPtr pScrn, GENERIC_BUS_Ptr VIP)
- {
- XF86VideoAdaptorPtr adapt;
- RADEONInfoPtr info = RADEONPTR(pScrn);
-@@ -1396,7 +1434,9 @@
- #endif
-
- /* Initialize VIP bus */
-- RADEONVIP_init(pScrn, pPriv);
-+// RADEONVIP_init(pScrn, pPriv);
-+ pPriv->VIP = VIP;
-+
- info->adaptor = adapt;
-
- if(!xf86LoadSubModule(pScrn,"theatre_detect"))
-@@ -1478,13 +1518,14 @@
- }
-
- static XF86VideoAdaptorPtr
--RADEONSetupImageVideo(ScreenPtr pScreen)
-+RADEONSetupImageVideo(ScreenPtr pScreen , GENERIC_BUS_Ptr VIP , Bool loadTheatre)
- {
- ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
- RADEONPortPrivPtr pPriv;
- XF86VideoAdaptorPtr adapt;
-+ unsigned i;
-
-- if(!(adapt = RADEONAllocAdaptor(pScrn)))
-+ if(!(adapt = RADEONAllocAdaptor(pScrn, VIP)))
- return NULL;
-
- adapt->type = XvWindowMask | XvInputMask | XvImageMask;
-@@ -1510,6 +1551,26 @@
- adapt->PutImage = RADEONPutImage;
- adapt->QueryImageAttributes = RADEONQueryImageAttributes;
-
-+ /*
-+ * fulivi: set limits of theater_out attributes
-+ */
-+ for (i = 0; i < N_TVO_ATTRS; i++)
-+ {
-+ int maxValue;
-+ int minValue;
-+ unsigned j;
-+
-+ RADEONTheaterOutGetAttrLimits(pScrn , theaterOutAttrs[ i ].attr , &maxValue , &minValue);
-+
-+ for (j = 0; i < NUM_DEC_ATTRIBUTES; j++)
-+ if (strcmp(theaterOutAttrs[ i ].name , Attributes[ j ].name) == 0)
-+ {
-+ Attributes[ j ].min_value = minValue;
-+ Attributes[ j ].max_value = maxValue;
-+ break;
-+ }
-+ }
-+
- pPriv = (RADEONPortPrivPtr)(adapt->pPortPrivates[0].ptr);
- REGION_NULL(pScreen, &(pPriv->clip));
-
-@@ -1812,8 +1873,24 @@
- RADEON_TDA9885_SetEncoding(pPriv);
- }
- }
-- else
-- return BadMatch;
-+ else if (attribute == xvTvoStandard)
-+ {
-+ value = ClipValue(value , 0 , TV_STD_N_STANDARDS-1);
-+ RADEONTheaterOutSetStandard(pScrn , (TVStd)value);
-+ }
-+ else
-+ {
-+ unsigned i;
-+
-+ for (i = 0; i < N_TVO_ATTRS; i++)
-+ if (theaterOutAttrs[ i ].atom == attribute)
-+ {
-+ RADEONTheaterOutSetAttr(pScrn , theaterOutAttrs[ i ].attr , value);
-+ break;
-+ }
-+ if (i == N_TVO_ATTRS)
-+ return BadMatch;
-+ }
-
- if (setTransform)
- {
-@@ -1917,8 +1994,22 @@
- *value = pPriv->instance_id;
- else if(attribute == xvAdjustment)
- *value = pPriv->adjustment;
-- else
-- return BadMatch;
-+ else if(attribute == xvTvoStandard)
-+ *value = (INT32)RADEONTheaterOutGetStandard(pScrn);
-+ else if(attribute == xvTvoModeCompat)
-+ *value = (INT32)RADEONTheaterOutGetCompatMode(pScrn);
-+ else {
-+ unsigned i;
-+
-+ for (i = 0; i < N_TVO_ATTRS; i++) {
-+ if (theaterOutAttrs[ i ].atom == attribute) {
-+ *value = (INT32)RADEONTheaterOutGetAttr(pScrn , theaterOutAttrs[ i].attr);
-+ break;
-+ }
-+ }
-+ if (i == N_TVO_ATTRS)
-+ return BadMatch;
-+ }
-
- return Success;
- }
-diff -urN -X /home/zhangle/exec/dontdiff xserver-xorg-video-ati-6.6.3.orig/src/radeon_video.h xserver-xorg-video-ati-6.6.3/src/radeon_video.h
---- xserver-xorg-video-ati-6.6.3.orig/src/radeon_video.h 2007-03-01 00:15:27.000000000 +0800
-+++ xserver-xorg-video-ati-6.6.3/src/radeon_video.h 2007-01-08 12:48:05.000000000 +0800
-@@ -47,6 +47,8 @@
- GENERIC_BUS_Ptr VIP;
- TheatrePtr theatre;
-
-+/* TheaterOutPtr theaterOut; */
-+
- Bool video_stream_active;
- int encoding;
- CARD32 frequency;
-diff -urN -X /home/zhangle/exec/dontdiff xserver-xorg-video-ati-6.6.3.orig/src/radeon_vip.c xserver-xorg-video-ati-6.6.3/src/radeon_vip.c
---- xserver-xorg-video-ati-6.6.3.orig/src/radeon_vip.c 2007-03-01 00:15:29.000000000 +0800
-+++ xserver-xorg-video-ati-6.6.3/src/radeon_vip.c 2007-01-08 12:48:05.000000000 +0800
-@@ -342,6 +342,7 @@
-
- void RADEONVIP_init(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
- {
-+/*
- pPriv->VIP=xcalloc(1,sizeof(GENERIC_BUS_Rec));
- pPriv->VIP->scrnIndex=pScrn->scrnIndex;
- pPriv->VIP->DriverPrivate.ptr=pPriv;
-@@ -352,4 +353,31 @@
- pPriv->VIP->fifo_write=RADEONVIP_fifo_write;
-
- RADEONVIP_reset(pScrn, pPriv);
-+*/
- }
-+
-+/*
-+ * fulivi: This new function was created because I needed VIP access from radeon_driver module
-+ * (where port private data doesn't exist)
-+ */
-+GENERIC_BUS_Ptr
-+RADEONAllocateVIP(
-+ ScrnInfoPtr pScrn
-+ )
-+{
-+ GENERIC_BUS_Ptr VIP=NULL;
-+
-+ VIP = xcalloc(1 , sizeof(GENERIC_BUS_Rec));
-+ VIP->DriverPrivate.ptr = NULL; /* Nobody seems to use this */
-+ VIP->scrnIndex = pScrn->scrnIndex;
-+ VIP->ioctl = RADEONVIP_ioctl;
-+ VIP->read = RADEONVIP_read;
-+ VIP->write = RADEONVIP_write;
-+ VIP->fifo_read=RADEONVIP_fifo_read;
-+ VIP->fifo_write=RADEONVIP_fifo_write;
-+
-+ RADEONVIP_reset(pScrn,NULL);
-+
-+ return VIP;
-+}
-+
-diff -urN -X /home/zhangle/exec/dontdiff xserver-xorg-video-ati-6.6.3.orig/src/theater_out.c xserver-xorg-video-ati-6.6.3/src/theater_out.c
---- xserver-xorg-video-ati-6.6.3.orig/src/theater_out.c 1970-01-01 08:00:00.000000000 +0800
-+++ xserver-xorg-video-ati-6.6.3/src/theater_out.c 2007-01-08 12:48:05.000000000 +0800
-@@ -0,0 +1,2804 @@
-+/*********************************************************************
-+ *
-+ * $Id: theater_out.c,v 1.1.2.3 2004/01/27 22:50:35 fulivi Exp $
-+ *
-+ * Main file for tv output handling of ATI Rage Theater chip
-+ *
-+ * Copyright (C) 2003 Federico Ulivi
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ * AUTHORS: F.Ulivi
-+ * NOTES:
-+ * $Log: theater_out.c,v $
-+ * Revision 1.1.2.3 2004/01/27 22:50:35 fulivi
-+ * Support for positioning/sizing of image added
-+ *
-+ * Revision 1.1.1.1.2.12 2004/01/18 22:59:29 fede
-+ * hSize handling added
-+ * Functions for get/setting h/v pos/size replaced by
-+ * theaterOutSetAttr/theaterOutGetAttr/theaterOutGetAttrLimits
-+ *
-+ * Revision 1.1.1.1.2.11 2004/01/11 21:29:04 fede
-+ * Fixes in H/V position handling
-+ *
-+ * Revision 1.1.1.1.2.10 2004/01/05 00:08:16 fede
-+ * Functions for setting H/V position added
-+ * Functions for setting/getting on/off attribute removed
-+ *
-+ * Revision 1.1.2.2 2003/11/26 19:50:10 fulivi
-+ * Support for ERT added
-+ *
-+ * Revision 1.1.1.1.2.9 2003/11/25 20:46:44 fede
-+ * "enabled" state removed
-+ * Handling of disabled tv output fixed
-+ *
-+ * Revision 1.1.1.1.2.8 2003/11/23 00:47:28 fede
-+ * Major cleanup of #define names
-+ *
-+ * Revision 1.1.1.1.2.7 2003/11/17 22:26:12 fede
-+ * Support for tv standards added
-+ * Support for NTSC added
-+ *
-+ * Revision 1.1.1.1.2.6 2003/10/14 18:40:34 fede
-+ * Autodetection of ERT moved to front
-+ * Some minor cleanups
-+ *
-+ * Revision 1.1.1.1.2.5 2003/10/11 12:29:50 fede
-+ * Support for ERT added
-+ *
-+ * Revision 1.1 2003/09/28 21:42:37 fulivi
-+ * Theater_out module added
-+ *
-+ * Revision 1.1.1.1.2.4 2003/09/28 15:11:57 fede
-+ * Some minor aesthetic changes
-+ *
-+ * Revision 1.1.1.1.2.2 2003/08/31 13:35:58 fede
-+ * Adapted for XFree86
-+ *
-+ * Revision 1.1.1.1.2.1 2003/08/09 23:20:46 fede
-+ * Switched to memory mapped IO
-+ * Some magic numbers turned into named constants
-+ *
-+ * Revision 1.1.1.1 2003/07/24 15:37:27 fede
-+ * Initial version
-+ *
-+ *
-+ *********************************************************************/
-+
-+#include "xf86.h"
-+#include "generic_bus.h"
-+#include "theatre_reg.h"
-+#include "radeon_reg.h"
-+#include "radeon_macros.h"
-+#include "theater_out.h"
-+#define RADEON_NAME "RADEON"
-+
-+#undef read
-+#undef write
-+#undef ioctl
-+
-+#if RADEON_DEBUG
-+#define RTTRACE(x) \
-+do { \
-+ ErrorF("(**) %s(%d): ", RADEON_NAME, 0); \
-+ ErrorF x; \
-+} while (0);
-+#else
-+#define RTTRACE(x)
-+#endif
-+
-+/**********************************************************************
-+ *
-+ * MASK_N_BIT
-+ *
-+ **********************************************************************/
-+
-+#define MASK_N_BIT(n) (1UL << (n))
-+
-+/**********************************************************************
-+ *
-+ * Constants
-+ *
-+ **********************************************************************/
-+
-+/*
-+ * Reference frequency
-+ * FIXME: This should be extracted from BIOS data
-+ */
-+#define REF_FREQUENCY 27000
-+
-+#define TV_PLL_FINE_INI 0X10000000
-+
-+/*
-+ * VIP_TV_PLL_CNTL
-+ */
-+#define VIP_TV_PLL_CNTL_M_SHIFT 0
-+#define VIP_TV_PLL_CNTL_NLO 0x1ff
-+#define VIP_TV_PLL_CNTL_NLO_SHIFT 8
-+#define VIP_TV_PLL_CNTL_NHI 0x600
-+#define VIP_TV_PLL_CNTL_NHI_SHIFT (21-9)
-+#define VIP_TV_PLL_CNTL_P_SHIFT 24
-+
-+/*
-+ * VIP_CRT_PLL_CNTL
-+ */
-+#define VIP_CRT_PLL_CNTL_M 0xff
-+#define VIP_CRT_PLL_CNTL_M_SHIFT 0
-+#define VIP_CRT_PLL_CNTL_NLO 0x1ff
-+#define VIP_CRT_PLL_CNTL_NLO_SHIFT 8
-+#define VIP_CRT_PLL_CNTL_NHI 0x600
-+#define VIP_CRT_PLL_CNTL_NHI_SHIFT (21-9)
-+#define VIP_CRT_PLL_CNTL_CLKBY2 MASK_N_BIT(25)
-+
-+/*
-+ * Value for VIP_PLL_CNTL0
-+ */
-+#define VIP_PLL_CNTL0_INI 0x00acac18
-+#define VIP_PLL_CNTL0_TVSLEEPB MASK_N_BIT(3)
-+#define VIP_PLL_CNTL0_CRTSLEEPB MASK_N_BIT(4)
-+
-+/*
-+ * Value for VIP_PLL_TEST_CNTL
-+ */
-+#define VIP_PLL_TEST_CNTL_INI 0
-+
-+/*
-+ * VIP_CLOCK_SEL_CNTL
-+ */
-+#define VIP_CLOCK_SEL_CNTL_INI 0x33
-+#define VIP_CLOCK_SEL_CNTL_BYTCLK_SHIFT 2
-+#define VIP_CLOCK_SEL_CNTL_BYTCLK 0xc
-+#define VIP_CLOCK_SEL_CNTL_REGCLK MASK_N_BIT(5)
-+#define VIP_CLOCK_SEL_CNTL_BYTCLKD_SHIFT 8
-+
-+/*
-+ * Value for VIP_CLKOUT_CNTL
-+ */
-+#define VIP_CLKOUT_CNTL_INI 0x29
-+
-+/*
-+ * Value for VIP_SYNC_LOCK_CNTL
-+ */
-+#define VIP_SYNC_LOCK_CNTL_INI 0x01000000
-+
-+/*
-+ * Value for VIP_TVO_SYNC_PAT_EXPECT
-+ */
-+#define VIP_TVO_SYNC_PAT_EXPECT_INI 0x00000001
-+
-+/*
-+ * VIP_RGB_CNTL
-+ */
-+#define VIP_RGB_CNTL_RGB_IS_888_PACK MASK_N_BIT(0)
-+
-+/*
-+ * Value for VIP_VSCALER_CNTL2
-+ */
-+#define VIP_VSCALER_CNTL2_INI 0x10000000
-+
-+/*
-+ * Value for VIP_Y_FALL_CNTL
-+ */
-+/* #define VIP_Y_FALL_CNTL_INI 0x00010200 */
-+#define VIP_Y_FALL_CNTL_INI 0x80030400
-+
-+/*
-+ * VIP_UV_ADR
-+ */
-+#define VIP_UV_ADR_INI 0xc8
-+#define VIP_UV_ADR_HCODE_TABLE_SEL 0x06000000
-+#define VIP_UV_ADR_HCODE_TABLE_SEL_SHIFT 25
-+#define VIP_UV_ADR_VCODE_TABLE_SEL 0x18000000
-+#define VIP_UV_ADR_VCODE_TABLE_SEL_SHIFT 27
-+#define VIP_UV_ADR_MAX_UV_ADR 0x000000ff
-+#define VIP_UV_ADR_MAX_UV_ADR_SHIFT 0
-+#define VIP_UV_ADR_TABLE1_BOT_ADR 0x0000ff00
-+#define VIP_UV_ADR_TABLE1_BOT_ADR_SHIFT 8
-+#define VIP_UV_ADR_TABLE3_TOP_ADR 0x00ff0000
-+#define VIP_UV_ADR_TABLE3_TOP_ADR_SHIFT 16
-+#define MAX_FIFO_ADDR_RT 0x1a7
-+#define MAX_FIFO_ADDR_ERT 0x1ff
-+
-+/*
-+ * VIP_HOST_RD_WT_CNTL
-+ */
-+#define VIP_HOST_RD_WT_CNTL_RD MASK_N_BIT(12)
-+#define VIP_HOST_RD_WT_CNTL_RD_ACK MASK_N_BIT(13)
-+#define VIP_HOST_RD_WT_CNTL_WT MASK_N_BIT(14)
-+#define VIP_HOST_RD_WT_CNTL_WT_ACK MASK_N_BIT(15)
-+
-+/*
-+ * Value for VIP_SYNC_CNTL
-+ */
-+#define VIP_SYNC_CNTL_INI 0x28
-+
-+/*
-+ * VIP_VSCALER_CNTL1
-+ */
-+#define VIP_VSCALER_CNTL1_UV_INC 0xffff
-+#define VIP_VSCALER_CNTL1_UV_INC_SHIFT 0
-+
-+/*
-+ * VIP_TIMING_CNTL
-+ */
-+#define VIP_TIMING_CNTL_UV_OUT_POST_SCALE_SHIFT 24
-+#define VIP_TIMING_CNTL_INI 0x000b0000
-+#define VIP_TIMING_CNTL_H_INC_SHIFT 0
-+#define VIP_TIMING_CNTL_H_INC 0xfff
-+
-+/*
-+ * Value for VIP_PRE_DAC_MUX_CNTL
-+ */
-+#define VIP_PRE_DAC_MUX_CNTL_INI 0x0000000f
-+
-+/*
-+ * VIP_TV_DAC_CNTL
-+ */
-+#define VIP_TV_DAC_CNTL_NBLANK MASK_N_BIT(0)
-+#define VIP_TV_DAC_CNTL_DASLEEP MASK_N_BIT(3)
-+#define VIP_TV_DAC_CNTL_BGSLEEP MASK_N_BIT(6)
-+
-+/*
-+ * Value for VIP_FRAME_LOCK_CNTL
-+ */
-+#define VIP_FRAME_LOCK_CNTL_INI 0x0000000f
-+
-+/*
-+ * Value for VIP_HW_DEBUG
-+ */
-+#define VIP_HW_DEBUG_INI 0x00000200
-+
-+/*
-+ * VIP_MASTER_CNTL
-+ */
-+#define VIP_MASTER_CNTL_TV_ASYNC_RST MASK_N_BIT(0)
-+#define VIP_MASTER_CNTL_CRT_ASYNC_RST MASK_N_BIT(1)
-+#define VIP_MASTER_CNTL_RESTART_PHASE_FIX MASK_N_BIT(3)
-+#define VIP_MASTER_CNTL_TV_FIFO_ASYNC_RST MASK_N_BIT(4)
-+#define VIP_MASTER_CNTL_VIN_ASYNC_RST MASK_N_BIT(5)
-+#define VIP_MASTER_CNTL_AUD_ASYNC_RST MASK_N_BIT(6)
-+#define VIP_MASTER_CNTL_DVS_ASYNC_RST MASK_N_BIT(7)
-+#define VIP_MASTER_CNTL_CRT_FIFO_CE_EN MASK_N_BIT(9)
-+#define VIP_MASTER_CNTL_TV_FIFO_CE_EN MASK_N_BIT(10)
-+#define VIP_MASTER_CNTL_ON_INI (VIP_MASTER_CNTL_RESTART_PHASE_FIX | \
-+ VIP_MASTER_CNTL_VIN_ASYNC_RST | \
-+ VIP_MASTER_CNTL_AUD_ASYNC_RST | \
-+ VIP_MASTER_CNTL_DVS_ASYNC_RST | \
-+ VIP_MASTER_CNTL_CRT_FIFO_CE_EN | \
-+ VIP_MASTER_CNTL_TV_FIFO_CE_EN)
-+#define VIP_MASTER_CNTL_OFF_INI (VIP_MASTER_CNTL_TV_ASYNC_RST | \
-+ VIP_MASTER_CNTL_CRT_ASYNC_RST | \
-+ VIP_MASTER_CNTL_RESTART_PHASE_FIX | \
-+ VIP_MASTER_CNTL_TV_FIFO_ASYNC_RST | \
-+ VIP_MASTER_CNTL_VIN_ASYNC_RST | \
-+ VIP_MASTER_CNTL_AUD_ASYNC_RST | \
-+ VIP_MASTER_CNTL_DVS_ASYNC_RST | \
-+ VIP_MASTER_CNTL_CRT_FIFO_CE_EN | \
-+ VIP_MASTER_CNTL_TV_FIFO_CE_EN)
-+
-+/*
-+ * Value for VIP_LINEAR_GAIN_SETTINGS
-+ */
-+#define VIP_LINEAR_GAIN_SETTINGS_INI 0x01000100
-+
-+/*
-+ * Value for VIP_GAIN_LIMIT_SETTINGS_INI
-+ */
-+#define VIP_GAIN_LIMIT_SETTINGS_INI 0x017f05ff
-+
-+/*
-+ * Value for VIP_UPSAMP_AND_GAIN_CNTL
-+ */
-+#define VIP_UPSAMP_AND_GAIN_CNTL_INI 0x00000005
-+
-+/*
-+ * RADEON_VCLK_ECP_CNTL
-+ */
-+#define RADEON_VCLK_ECP_CNTL_BYTECLK_POSTDIV 0x00030000
-+#define RADEON_VCLK_ECP_CNTL_BYTECLK_NODIV 0x00000000
-+
-+/*
-+ * RADEON_PLL_TEST_CNTL
-+ */
-+#define RADEON_PLL_TEST_CNTL_PLL_MASK_READ_B MASK_N_BIT(9)
-+
-+/*
-+ * RADEON_DAC_CNTL
-+ */
-+#define RADEON_DAC_CNTL_DAC_TVO_EN MASK_N_BIT(10)
-+
-+#define RADEON_PPLL_POST3_DIV_BY_2 0x10000
-+#define RADEON_PPLL_POST3_DIV_BY_3 0x40000
-+#define RADEON_PPLL_FB3_DIV_SHIFT 0
-+#define RADEON_PPLL_POST3_DIV_SHIFT 16
-+
-+/*
-+ * RADEON_DISP_MERGE_CNTL
-+ */
-+//#define RADEON_DISP_MERGE_CNTL 0xd60
-+#define RADEON_DISP_MERGE_CNTL_INI 0xffff0000
-+
-+/*
-+ * RADEON_HTOTAL_CNTL
-+ */
-+#define RADEON_HTOTAL_CNTL_HTOT_PIX_SLIP_SHIFT 0
-+#define RADEON_HTOTAL_CNTL_HTOT_CNTL_VGA_EN MASK_N_BIT(28)
-+
-+/*
-+ * RADEON_DISP_OUTPUT_CNTL
-+ */
-+#define RADEON_DISP_TV_SOURCE MASK_N_BIT(16)
-+#define RADEON_DISP_TV_MODE_MASK (3 << 17)
-+#define RADEON_DISP_TV_MODE_888 (0 << 17)
-+#define RADEON_DISP_TV_MODE_565 (1 << 17)
-+#define RADEON_DISP_TV_YG_DITH_EN MASK_N_BIT(19)
-+#define RADEON_DISP_TV_CBB_CRR_DITH_EN MASK_N_BIT(20)
-+#define RADEON_DISP_TV_BIT_WIDTH MASK_N_BIT(21)
-+#define RADEON_DISP_TV_SYNC_MODE_MASK (3 << 22)
-+#define RADEON_DISP_TV_SYNC_COLOR_MASK (3 << 25)
-+
-+/*
-+ * ERT registers
-+ */
-+#define TV_MASTER_CNTL 0x0800
-+#define TV_MASTER_CNTL_TVCLK_ALWAYS_ON MASK_N_BIT(30)
-+#define TV_MASTER_CNTL_TV_ON MASK_N_BIT(31)
-+#define TV_MASTER_CNTL_ON_INI (VIP_MASTER_CNTL_VIN_ASYNC_RST | \
-+ VIP_MASTER_CNTL_CRT_FIFO_CE_EN | \
-+ VIP_MASTER_CNTL_TV_FIFO_CE_EN | \
-+ TV_MASTER_CNTL_TVCLK_ALWAYS_ON | \
-+ TV_MASTER_CNTL_TV_ON)
-+#define TV_MASTER_CNTL_OFF_INI (VIP_MASTER_CNTL_TV_ASYNC_RST | \
-+ VIP_MASTER_CNTL_CRT_ASYNC_RST | \
-+ VIP_MASTER_CNTL_TV_FIFO_ASYNC_RST | \
-+ VIP_MASTER_CNTL_CRT_FIFO_CE_EN | \
-+ VIP_MASTER_CNTL_TV_FIFO_CE_EN | \
-+ TV_MASTER_CNTL_TVCLK_ALWAYS_ON)
-+#define TV_RGB_CNTL 0x0804
-+#define TV_RGB_CNTL_INI 0x007b0004
-+#define TV_SYNC_CNTL 0x0808
-+#define TV_HTOTAL 0x080c
-+#define TV_HDISP 0x0810
-+#define TV_HSTART 0x0818
-+#define TV_HCOUNT 0x081c
-+#define TV_VTOTAL 0x0820
-+#define TV_VDISP 0x0824
-+#define TV_VCOUNT 0x0828
-+#define TV_FTOTAL 0x082c
-+#define TV_FCOUNT 0x0830
-+#define TV_FRESTART 0x0834
-+#define TV_HRESTART 0x0838
-+#define TV_VRESTART 0x083c
-+#define TV_HOST_READ_DATA 0x0840
-+#define TV_HOST_WRITE_DATA 0x0844
-+#define TV_HOST_RD_WT_CNTL 0x0848
-+#define TV_VSCALER_CNTL1 0x084c
-+#define TV_VSCALER_CNTL1_RESTART_FIELD MASK_N_BIT(29)
-+#define TV_TIMING_CNTL 0x0850
-+#define TV_VSCALER_CNTL2 0x0854
-+#define TV_Y_FALL_CNTL 0x0858
-+#define TV_Y_RISE_CNTL 0x085c
-+#define TV_Y_SAWTOOTH_CNTL 0x0860
-+#define TV_UPSAMP_AND_GAIN_CNTL 0x0864
-+#define TV_GAIN_LIMIT_SETTINGS 0x0868
-+#define TV_LINEAR_GAIN_SETTINGS 0x086c
-+#define TV_MODULATOR_CNTL1 0x0870
-+#define TV_MODULATOR_CNTL2 0x0874
-+#define TV_PRE_DAC_MUX_CNTL 0x0888
-+#define TV_DAC_CNTL 0x088c
-+#define TV_DAC_CNTL_NBLANK MASK_N_BIT(0)
-+#define TV_DAC_CNTL_NHOLD MASK_N_BIT(1)
-+#define TV_DAC_CNTL_BGSLEEP MASK_N_BIT(6)
-+#define TV_DAC_CNTL_RDACPD MASK_N_BIT(24)
-+#define TV_DAC_CNTL_GDACPD MASK_N_BIT(25)
-+#define TV_DAC_CNTL_BDACPD MASK_N_BIT(26)
-+#define TV_CRC_CNTL 0x0890
-+#define TV_UV_ADR 0x08ac
-+
-+/*
-+ * ERT PLL registers
-+ */
-+#define TV_PLL_CNTL 0x21
-+#define TV_PLL_CNTL1 0x22
-+#define TV_PLL_CNTL1_TVPLL_RESET MASK_N_BIT(1)
-+#define TV_PLL_CNTL1_TVPLL_SLEEP MASK_N_BIT(3)
-+#define TV_PLL_CNTL1_TVPDC_SHIFT 14
-+#define TV_PLL_CNTL1_TVPDC_MASK (3 << 14)
-+#define TV_PLL_CNTL1_TVCLK_SRC_SEL MASK_N_BIT(30)
-+
-+/*
-+ * Constant upsampler coefficients
-+ */
-+static
-+const
-+CARD32 upsamplerCoeffs[] =
-+{
-+ 0x3f010000,
-+ 0x7b008002,
-+ 0x00003f01,
-+ 0x341b7405,
-+ 0x7f3a7617,
-+ 0x00003d04,
-+ 0x2d296c0a,
-+ 0x0e316c2c,
-+ 0x00003e7d,
-+ 0x2d1f7503,
-+ 0x2927643b,
-+ 0x0000056f,
-+ 0x29257205,
-+ 0x25295050,
-+ 0x00000572
-+};
-+#define N_UPSAMPLER_COEFFS (sizeof(upsamplerCoeffs) / sizeof(upsamplerCoeffs[ 0 ]))
-+
-+/*
-+ * Maximum length of horizontal/vertical code timing tables for state storage
-+ */
-+#define MAX_H_CODE_TIMING_LEN 32
-+#define MAX_V_CODE_TIMING_LEN 32
-+
-+/*
-+ * Type of VIP bus
-+ */
-+#define VIP_TYPE "ATI VIP BUS"
-+
-+/*
-+ * Limits of h/v positions (hPos & vPos in TheaterOutRec)
-+ */
-+#define MAX_H_POSITION 5 /* Range: [-5..5], negative is on the left, 0 is default, positive is on the right */
-+#define MAX_V_POSITION 5 /* Range: [-5..5], negative is up, 0 is default, positive is down */
-+
-+/*
-+ * Unit for hPos (in TV clock periods)
-+ */
-+#define H_POS_UNIT 10
-+
-+/*
-+ * Indexes in h. code timing table for horizontal line position adjustment
-+ */
-+#define H_TABLE_POS1 6
-+#define H_TABLE_POS2 8
-+
-+/*
-+ * Limits of hor. size (hSize in TheaterOutRec)
-+ */
-+#define MAX_H_SIZE 5 /* Range: [-5..5], negative is smaller, positive is larger */
-+
-+/**********************************************************************
-+ *
-+ * TimingTableEl
-+ *
-+ * Elements of H/V code timing tables
-+ *
-+ **********************************************************************/
-+
-+typedef CARD16 TimingTableEl; /* Bits 0 to 13 only are actually used */
-+
-+/**********************************************************************
-+ *
-+ * ModeConstants
-+ *
-+ * Storage of constants related to a single video mode
-+ *
-+ **********************************************************************/
-+
-+typedef struct
-+{
-+ CARD16 horResolution;
-+ CARD16 verResolution;
-+ TVStd standard;
-+ CARD16 horTotal;
-+ CARD16 verTotal;
-+ CARD16 horStart;
-+ CARD16 horSyncStart;
-+ CARD16 verSyncStart;
-+ unsigned defRestart;
-+ CARD32 vScalerCntl1;
-+ CARD32 yRiseCntl;
-+ CARD32 ySawtoothCntl;
-+ CARD16 crtcPLL_N;
-+ CARD8 crtcPLL_M;
-+ Bool crtcPLL_divBy2;
-+ CARD8 crtcPLL_byteClkDiv;
-+ CARD8 crtcPLL_postDiv;
-+ Bool use888RGB; /* False: RGB data is 565 packed (2 bytes/pixel) */
-+ /* True : RGB data is 888 packed (3 bytes/pixel) */
-+ unsigned pixToTV;
-+ CARD8 byteClkDelay;
-+ CARD32 tvoDataDelayA;
-+ CARD32 tvoDataDelayB;
-+ const TimingTableEl *horTimingTable;
-+ const TimingTableEl *verTimingTable;
-+} ModeConstants;
-+
-+/**********************************************************************
-+ *
-+ * TheaterState
-+ *
-+ * Storage of RT state
-+ *
-+ **********************************************************************/
-+
-+typedef struct
-+{
-+ CARD32 clkout_cntl;
-+ CARD32 clock_sel_cntl;
-+ CARD32 crc_cntl;
-+ CARD32 crt_pll_cntl;
-+ CARD32 dfrestart;
-+ CARD32 dhrestart;
-+ CARD32 dvrestart;
-+ CARD32 frame_lock_cntl;
-+ CARD32 gain_limit_settings;
-+ CARD32 hdisp;
-+ CARD32 hstart;
-+ CARD32 htotal;
-+ CARD32 hw_debug;
-+ CARD32 linear_gain_settings;
-+ CARD32 master_cntl;
-+ CARD32 modulator_cntl1;
-+ CARD32 modulator_cntl2;
-+ CARD32 pll_cntl0;
-+ CARD32 pll_test_cntl;
-+ CARD32 pre_dac_mux_cntl;
-+ CARD32 rgb_cntl;
-+ CARD32 sync_cntl;
-+ CARD32 sync_lock_cntl;
-+ CARD32 sync_size;
-+ CARD32 timing_cntl;
-+ CARD32 tvo_data_delay_a;
-+ CARD32 tvo_data_delay_b;
-+ CARD32 tvo_sync_pat_expect;
-+ CARD32 tvo_sync_threshold;
-+ CARD32 tv_dac_cntl;
-+ CARD32 tv_pll_cntl;
-+ CARD32 tv_pll_fine_cntl;
-+ CARD32 upsamp_and_gain_cntl;
-+ CARD32 upsamp_coeffs[ N_UPSAMPLER_COEFFS ];
-+ CARD32 uv_adr;
-+ CARD32 vdisp;
-+ CARD32 vftotal;
-+ CARD32 vscaler_cntl1;
-+ CARD32 vscaler_cntl2;
-+ CARD32 vtotal;
-+ CARD32 y_fall_cntl;
-+ CARD32 y_rise_cntl;
-+ CARD32 y_saw_tooth_cntl;
-+ CARD32 disp_merge_cntl;
-+
-+ TimingTableEl h_code_timing[ MAX_H_CODE_TIMING_LEN ];
-+ TimingTableEl v_code_timing[ MAX_V_CODE_TIMING_LEN ];
-+} TheaterState , *TheaterStatePtr;
-+
-+/**********************************************************************
-+ *
-+ * TheaterOutRec , TheaterOutPtr
-+ *
-+ * Global state of module
-+ *
-+ **********************************************************************/
-+
-+typedef struct TheaterOut
-+{
-+ GENERIC_BUS_Ptr VIP;
-+ unsigned char *MMIO;
-+
-+ int theatre_num; /* Negative when driving an ERT */
-+ /* Positive or null: index of RT on VIP bus */
-+
-+ TVStd standard;
-+ Bool compatibleMode;
-+
-+ const ModeConstants *currentMode;
-+
-+ int hPos;
-+ int vPos;
-+ int hSize;
-+
-+ TheaterState savedState;
-+ TheaterState modeState;
-+} TheaterOutRec;
-+
-+/**********************************************************************
-+ *
-+ * TVConstants
-+ *
-+ * Constants that depend on tv standard only
-+ *
-+ **********************************************************************/
-+
-+typedef struct
-+{
-+ CARD8 tvPLL_M;
-+ CARD16 tvPLL_N;
-+ CARD8 tvPLL_postDiv;
-+ CARD32 tvClockT; /* Period of TV clock (unit = 100 psec) */
-+ CARD32 modulatorCntl1;
-+ CARD32 modulatorCntl2;
-+ CARD32 vip_tvDAC_Cntl;
-+ CARD32 ert_tvDAC_Cntl;
-+ CARD32 vftotal;
-+ unsigned linesFrame;
-+ unsigned zeroHSize; /* Length of the picture part of a hor. line for hSize = 0 (unit = 100 psec) */
-+ unsigned hSizeUnit; /* Value of hSize = 1 (unit = 100 psec) */
-+} TVConstants;
-+
-+/**********************************************************************
-+ *
-+ * tvStdConsts
-+ *
-+ * Table of constants for tv standards (index is a TVStd)
-+ *
-+ **********************************************************************/
-+
-+static
-+const
-+TVConstants tvStdConsts[] =
-+ {
-+ /*
-+ * NTSC
-+ */
-+ {
-+ 22, /* tvPLL_M */
-+ 175, /* tvPLL_N */
-+ 5, /* tvPLL_postDiv */
-+ 233, /* tvClockT */
-+ 0x60bb468c, /* modulatorCntl1 */
-+ 0x00000191, /* modulatorCntl2 */
-+ 0x00000113, /* vip_tvDAC_Cntl */
-+ 0x00680113, /* ert_tvDAC_Cntl */
-+ 1, /* vftotal */
-+ 525, /* linesFrame */
-+ 479166, /* zeroHSize */
-+ 9478 /* hSizeUnit */
-+ },
-+ /*
-+ * PAL
-+ */
-+ {
-+ 113, /* tvPLL_M */
-+ 668, /* tvPLL_N */
-+ 3, /* tvPLL_postDiv */
-+ 188, /* tvClockT */
-+ 0x60bb3bcc, /* modulatorCntl1 */
-+ 0x003e01b2, /* modulatorCntl2 */
-+ 0x00000013, /* vip_tvDAC_Cntl */
-+ 0x00680013, /* ert_tvDAC_Cntl */
-+ 3, /* vftotal */
-+ 625, /* linesFrame */
-+ 473200, /* zeroHSize */
-+ 9360 /* hSizeUnit */
-+ }
-+ };
-+
-+/**********************************************************************
-+ *
-+ * availableModes
-+ *
-+ * Table of all allowed modes for tv output
-+ *
-+ **********************************************************************/
-+
-+static
-+const
-+TimingTableEl horTimingNTSC_BIOS[] =
-+ {
-+ 0x0007,
-+ 0x003f,
-+ 0x0263,
-+ 0x0a24,
-+ 0x2a6b,
-+ 0x0a36,
-+ 0x126d, /* H_TABLE_POS1 */
-+ 0x1bfe,
-+ 0x1a8f, /* H_TABLE_POS2 */
-+ 0x1ec7,
-+ 0x3863,
-+ 0x1bfe,
-+ 0x1bfe,
-+ 0x1a2a,
-+ 0x1e95,
-+ 0x0e31,
-+ 0x201b,
-+ 0
-+ };
-+
-+static
-+const
-+TimingTableEl verTimingNTSC_BIOS[] =
-+ {
-+ 0x2001,
-+ 0x200d,
-+ 0x1006,
-+ 0x0c06,
-+ 0x1006,
-+ 0x1818,
-+ 0x21e3,
-+ 0x1006,
-+ 0x0c06,
-+ 0x1006,
-+ 0x1817,
-+ 0x21d4,
-+ 0x0002,
-+ 0
-+ };
-+
-+static
-+const
-+TimingTableEl horTimingPAL_BIOS[] =
-+ {
-+ 0x0007,
-+ 0x0058,
-+ 0x027c,
-+ 0x0a31,
-+ 0x2a77,
-+ 0x0a95,
-+ 0x124f, /* H_TABLE_POS1 */
-+ 0x1bfe,
-+ 0x1b22, /* H_TABLE_POS2 */
-+ 0x1ef9,
-+ 0x387c,
-+ 0x1bfe,
-+ 0x1bfe,
-+ 0x1b31,
-+ 0x1eb5,
-+ 0x0e43,
-+ 0x201b,
-+ 0
-+ };
-+
-+static
-+const
-+TimingTableEl verTimingPAL_BIOS[] =
-+ {
-+ 0x2001,
-+ 0x200c,
-+ 0x1005,
-+ 0x0c05,
-+ 0x1005,
-+ 0x1401,
-+ 0x1821,
-+ 0x2240,
-+ 0x1005,
-+ 0x0c05,
-+ 0x1005,
-+ 0x1401,
-+ 0x1822,
-+ 0x2230,
-+ 0x0002,
-+ 0
-+ };
-+
-+static
-+const
-+ModeConstants availableModes[] =
-+ {
-+ {
-+ 800, /* horResolution */
-+ 600, /* verResolution */
-+ TV_STD_NTSC, /* standard */
-+ 990, /* horTotal */
-+ 740, /* verTotal */
-+ 813, /* horStart */
-+ 824, /* horSyncStart */
-+ 632, /* verSyncStart */
-+ 625592, /* defRestart */
-+ 0x0900b46b, /* vScalerCntl1 */
-+ 0x00012c00, /* yRiseCntl */
-+ 0x10002d1a, /* ySawtoothCntl */
-+ 592, /* crtcPLL_N */
-+ 91, /* crtcPLL_M */
-+ TRUE, /* crtcPLL_divBy2 */
-+ 0, /* crtcPLL_byteClkDiv */
-+ 4, /* crtcPLL_postDiv */
-+ FALSE, /* use888RGB */
-+ 1022, /* pixToTV */
-+ 1, /* byteClkDelay */
-+ 0x0a0b0907, /* tvoDataDelayA */
-+ 0x060a090a, /* tvoDataDelayB */
-+ horTimingNTSC_BIOS,/* horTimingTable */
-+ verTimingNTSC_BIOS/* verTimingTable */
-+ },
-+ {
-+ 800, /* horResolution */
-+ 600, /* verResolution */
-+ TV_STD_PAL, /* standard */
-+ 1144, /* horTotal */
-+ 706, /* verTotal */
-+ 812, /* horStart */
-+ 824, /* horSyncStart */
-+ 669, /* verSyncStart */
-+ 696700, /* defRestart */
-+ 0x09009097, /* vScalerCntl1 */
-+ 0x000007da, /* yRiseCntl */
-+ 0x10002426, /* ySawtoothCntl */
-+ 1382, /* crtcPLL_N */
-+ 231, /* crtcPLL_M */
-+ TRUE, /* crtcPLL_divBy2 */
-+ 0, /* crtcPLL_byteClkDiv */
-+ 4, /* crtcPLL_postDiv */
-+ FALSE, /* use888RGB */
-+ 759, /* pixToTV */
-+ 1, /* byteClkDelay */
-+ 0x0a0b0907, /* tvoDataDelayA */
-+ 0x060a090a, /* tvoDataDelayB */
-+ horTimingPAL_BIOS,/* horTimingTable */
-+ verTimingPAL_BIOS /* verTimingTable */
-+ }
-+ };
-+
-+#define N_AVAILABLE_MODES (sizeof(availableModes) / sizeof(availableModes[ 0 ]))
-+
-+/**********************************************************************
-+ *
-+ * theatre_read
-+ *
-+ * Read from a RT register
-+ *
-+ **********************************************************************/
-+
-+static
-+Bool
-+theatre_read(
-+ TheaterOutPtr t,
-+ CARD32 reg,
-+ CARD32 *data
-+ )
-+{
-+ if (t->theatre_num < 0)
-+ return FALSE;
-+
-+ return t->VIP->read(t->VIP, ((t->theatre_num & 0x3) << 14) | reg , 4 , (CARD8*)data);
-+}
-+
-+/**********************************************************************
-+ *
-+ * theatre_write
-+ *
-+ * Write to a RT register
-+ *
-+ **********************************************************************/
-+
-+static
-+Bool
-+theatre_write(
-+ TheaterOutPtr t,
-+ CARD32 reg,
-+ CARD32 data
-+ )
-+{
-+ if (t->theatre_num < 0)
-+ return FALSE;
-+
-+ return t->VIP->write(t->VIP , ((t->theatre_num & 0x03) << 14) | reg , 4 , (CARD8*)&data);
-+}
-+
-+/**********************************************************************
-+ *
-+ * ert_read
-+ *
-+ * Read from an ERT register
-+ *
-+ **********************************************************************/
-+
-+static
-+void
-+ert_read(
-+ TheaterOutPtr t,
-+ CARD32 reg,
-+ CARD32 *data
-+ )
-+{
-+ unsigned char *RADEONMMIO = t->MMIO;
-+
-+ if (t->theatre_num < 0)
-+ *data = INREG(reg);
-+}
-+
-+/**********************************************************************
-+ *
-+ * ert_write
-+ *
-+ * Write to an ERT register
-+ *
-+ **********************************************************************/
-+static
-+void
-+ert_write(
-+ TheaterOutPtr t,
-+ CARD32 reg,
-+ CARD32 data
-+ )
-+{
-+ unsigned char *RADEONMMIO = t->MMIO;
-+
-+ if (t->theatre_num < 0)
-+ OUTREG(reg , data);
-+}
-+
-+/**********************************************************************
-+ *
-+ * waitPLL_lock
-+ *
-+ * Wait for PLLs to lock
-+ *
-+ **********************************************************************/
-+
-+static
-+void
-+waitPLL_lock(
-+ TheaterOutPtr t,
-+ ScrnInfoPtr pScrn,
-+ unsigned nTests,
-+ unsigned nWaitLoops,
-+ unsigned cntThreshold
-+ )
-+{
-+ unsigned char *RADEONMMIO = t->MMIO;
-+ CARD32 savePLLTest;
-+ unsigned i;
-+ unsigned j;
-+
-+ OUTREG(RADEON_TEST_DEBUG_MUX , (INREG(RADEON_TEST_DEBUG_MUX) & 0xffff60ff) | 0x100);
-+
-+ savePLLTest = INPLL(pScrn , RADEON_PLL_TEST_CNTL);
-+
-+ OUTPLL(pScrn , RADEON_PLL_TEST_CNTL , savePLLTest & ~RADEON_PLL_TEST_CNTL_PLL_MASK_READ_B);
-+
-+ OUTREG8(RADEON_CLOCK_CNTL_INDEX , RADEON_PLL_TEST_CNTL);
-+
-+ for (i = 0; i < nTests; i++)
-+ {
-+ OUTREG8(RADEON_CLOCK_CNTL_DATA + 3 , 0);
-+
-+ for (j = 0; j < nWaitLoops; j++)
-+ if (INREG8(RADEON_CLOCK_CNTL_DATA + 3) >= cntThreshold)
-+ break;
-+ }
-+
-+ OUTPLL(pScrn , RADEON_PLL_TEST_CNTL , savePLLTest);
-+
-+ OUTREG(RADEON_TEST_DEBUG_MUX , INREG(RADEON_TEST_DEBUG_MUX) & 0xffffe0ff);
-+}
-+
-+/**********************************************************************
-+ *
-+ * restorePLL
-+ *
-+ * Set PLLs for CRTC pixel clock & TV color burst generation
-+ *
-+ **********************************************************************/
-+
-+static
-+void
-+restorePLL(
-+ TheaterOutPtr t,
-+ ScrnInfoPtr pScrn,
-+ TheaterStatePtr restore
-+ )
-+{
-+ unsigned i;
-+
-+ /*
-+ * Set TV PLL
-+ */
-+ RTTRACE(("restorePLL: TV_PLL_CNTL = %08x\n" , restore->tv_pll_cntl));
-+ theatre_write(t , VIP_TV_PLL_CNTL , restore->tv_pll_cntl);
-+ theatre_write(t , VIP_TV_PLL_FINE_CNTL , restore->tv_pll_fine_cntl);
-+
-+ /*
-+ * Set CRT PLL (for byte and pixel clock generation)
-+ */
-+ RTTRACE(("restorePLL: CRT_PLL_CNTL = %08x\n" , restore->crt_pll_cntl));
-+ theatre_write(t , VIP_CRT_PLL_CNTL , restore->crt_pll_cntl);
-+
-+ theatre_write(t , VIP_PLL_CNTL0 , restore->pll_cntl0);
-+
-+ theatre_write(t , VIP_PLL_TEST_CNTL , restore->pll_test_cntl);
-+
-+ /*
-+ * Set coefficients for upsampler
-+ */
-+ for (i = 0; i < N_UPSAMPLER_COEFFS; i++)
-+ theatre_write(t , VIP_UPSAMP_COEFF0_0 + i * 4 , restore->upsamp_coeffs[ i ]);
-+
-+ /*
-+ * Waiting for PLLs to settle is skipped when restoring a state with stopped PLLs
-+ */
-+ if ((~restore->pll_cntl0 & (VIP_PLL_CNTL0_TVSLEEPB | VIP_PLL_CNTL0_CRTSLEEPB)) == 0)
-+ {
-+ waitPLL_lock(t , pScrn , 3000 , 160 , 27);
-+
-+ theatre_write(t , VIP_CLOCK_SEL_CNTL , restore->clock_sel_cntl & ~VIP_CLOCK_SEL_CNTL_REGCLK);
-+
-+ waitPLL_lock(t , pScrn , 3000 , 160 , 27);
-+ }
-+
-+ RTTRACE(("restorePLL: CLOCK_SEL_CNTL = %08x\n" , restore->clock_sel_cntl));
-+ theatre_write(t , VIP_CLOCK_SEL_CNTL , restore->clock_sel_cntl);
-+
-+ theatre_write(t , VIP_CLKOUT_CNTL , restore->clkout_cntl);
-+}
-+
-+/**********************************************************************
-+ *
-+ * restoreTVO_SYNC
-+ *
-+ * Set TVO_SYNC_* registers
-+ *
-+ **********************************************************************/
-+
-+static
-+void
-+restoreTVO_SYNC(
-+ TheaterOutPtr t,
-+ TheaterStatePtr restore
-+ )
-+{
-+ theatre_write(t , VIP_SYNC_LOCK_CNTL , restore->sync_lock_cntl);
-+ theatre_write(t , VIP_TVO_SYNC_THRESHOLD , restore->tvo_sync_threshold);
-+ theatre_write(t , VIP_TVO_SYNC_PAT_EXPECT , restore->tvo_sync_pat_expect);
-+}
-+
-+/**********************************************************************
-+ *
-+ * restoreTVO_DataDelay
-+ *
-+ * Set TVO_DATA_DELAY_* registers
-+ *
-+ **********************************************************************/
-+
-+static
-+void
-+restoreTVO_DataDelay(
-+ TheaterOutPtr t,
-+ TheaterStatePtr restore
-+ )
-+{
-+ theatre_write(t , VIP_TVO_DATA_DELAY_A , restore->tvo_data_delay_a);
-+ theatre_write(t , VIP_TVO_DATA_DELAY_B , restore->tvo_data_delay_b);
-+}
-+
-+/**********************************************************************
-+ *
-+ * restoreRT_HV
-+ *
-+ * Set RT horizontal/vertical settings
-+ *
-+ **********************************************************************/
-+
-+static
-+void
-+restoreRT_HV(
-+ TheaterOutPtr t,
-+ TheaterStatePtr restore
-+ )
-+{
-+ theatre_write(t , VIP_RGB_CNTL , restore->rgb_cntl);
-+
-+ theatre_write(t , VIP_HTOTAL , restore->htotal);
-+ theatre_write(t , VIP_HDISP , restore->hdisp);
-+ theatre_write(t , VIP_HSTART , restore->hstart);
-+
-+ theatre_write(t , VIP_VTOTAL , restore->vtotal);
-+ theatre_write(t , VIP_VDISP , restore->vdisp);
-+
-+ theatre_write(t , VIP_VFTOTAL , restore->vftotal);
-+
-+ theatre_write(t , VIP_SYNC_SIZE , restore->sync_size);
-+
-+ theatre_write(t , VIP_VSCALER_CNTL1 , restore->vscaler_cntl1);
-+ theatre_write(t , VIP_VSCALER_CNTL2 , restore->vscaler_cntl2);
-+
-+ theatre_write(t , VIP_Y_FALL_CNTL , restore->y_fall_cntl);
-+ theatre_write(t , VIP_Y_RISE_CNTL , restore->y_rise_cntl);
-+ theatre_write(t , VIP_Y_SAW_TOOTH_CNTL , restore->y_saw_tooth_cntl);
-+}
-+
-+/**********************************************************************
-+ *
-+ * restoreRestarts
-+ *
-+ * Set RT D*RESTART registers
-+ *
-+ **********************************************************************/
-+
-+static
-+void
-+restoreRestarts(
-+ TheaterOutPtr t,
-+ TheaterStatePtr restore
-+ )
-+{
-+ theatre_write(t , VIP_DFRESTART , restore->dfrestart);
-+ theatre_write(t , VIP_DHRESTART , restore->dhrestart);
-+ theatre_write(t , VIP_DVRESTART , restore->dvrestart);
-+}
-+
-+/**********************************************************************
-+ *
-+ * writeFIFO
-+ *
-+ * Write to RT FIFO RAM
-+ *
-+ **********************************************************************/
-+
-+static
-+void
-+writeFIFO(
-+ TheaterOutPtr t,
-+ CARD16 addr,
-+ CARD32 value
-+ )
-+{
-+ CARD32 tmp;
-+
-+ if (t->theatre_num >= 0)
-+ {
-+ theatre_write(t , VIP_HOST_WRITE_DATA , value);
-+
-+ theatre_write(t , VIP_HOST_RD_WT_CNTL , addr | VIP_HOST_RD_WT_CNTL_WT);
-+
-+ do
-+ {
-+ if (!theatre_read(t , VIP_HOST_RD_WT_CNTL , &tmp))
-+ break;
-+ }
-+ while ((tmp & VIP_HOST_RD_WT_CNTL_WT_ACK) == 0);
-+
-+ theatre_write(t , VIP_HOST_RD_WT_CNTL , 0);
-+ }
-+ else
-+ {
-+ ert_write(t , TV_HOST_WRITE_DATA , value);
-+
-+ ert_write(t , TV_HOST_RD_WT_CNTL , addr | VIP_HOST_RD_WT_CNTL_WT);
-+
-+ do
-+ {
-+ ert_read(t , TV_HOST_RD_WT_CNTL , &tmp);
-+ }
-+ while ((tmp & VIP_HOST_RD_WT_CNTL_WT_ACK) == 0);
-+
-+ ert_write(t , TV_HOST_RD_WT_CNTL , 0);
-+ }
-+}
-+
-+/**********************************************************************
-+ *
-+ * readFIFO
-+ *
-+ * Read from RT FIFO RAM
-+ *
-+ **********************************************************************/
-+
-+static
-+void
-+readFIFO(
-+ TheaterOutPtr t,
-+ CARD16 addr,
-+ CARD32 *value
-+ )
-+{
-+ CARD32 tmp;
-+
-+ if (t->theatre_num >= 0)
-+ {
-+ theatre_write(t , VIP_HOST_RD_WT_CNTL , addr | VIP_HOST_RD_WT_CNTL_RD);
-+
-+ do
-+ {
-+ if (!theatre_read(t , VIP_HOST_RD_WT_CNTL , &tmp))
-+ break;
-+ }
-+ while ((tmp & VIP_HOST_RD_WT_CNTL_RD_ACK) == 0);
-+
-+ theatre_write(t , VIP_HOST_RD_WT_CNTL , 0);
-+
-+ theatre_read(t , VIP_HOST_READ_DATA , value);
-+ }
-+ else
-+ {
-+ ert_write(t , TV_HOST_RD_WT_CNTL , addr | VIP_HOST_RD_WT_CNTL_RD);
-+
-+ do
-+ {
-+ ert_read(t , TV_HOST_RD_WT_CNTL , &tmp);
-+ }
-+ while ((tmp & VIP_HOST_RD_WT_CNTL_RD_ACK) == 0);
-+
-+ ert_write(t , TV_HOST_RD_WT_CNTL , 0);
-+
-+ ert_read(t , TV_HOST_READ_DATA , value);
-+ }
-+}
-+
-+/**********************************************************************
-+ *
-+ * getTimingTablesAddr
-+ *
-+ * Get FIFO addresses of horizontal & vertical code timing tables from
-+ * settings of uv_adr register.
-+ *
-+ **********************************************************************/
-+
-+static
-+void
-+getTimingTablesAddr(
-+ CARD32 uv_adr,
-+ Bool isERT,
-+ CARD16 *hTable,
-+ CARD16 *vTable
-+ )
-+{
-+ switch ((uv_adr & VIP_UV_ADR_HCODE_TABLE_SEL) >> VIP_UV_ADR_HCODE_TABLE_SEL_SHIFT)
-+ {
-+ case 0:
-+ *hTable = isERT ? MAX_FIFO_ADDR_ERT : MAX_FIFO_ADDR_RT;
-+ break;
-+
-+ case 1:
-+ *hTable = ((uv_adr & VIP_UV_ADR_TABLE1_BOT_ADR) >> VIP_UV_ADR_TABLE1_BOT_ADR_SHIFT) * 2;
-+ break;
-+
-+ case 2:
-+ *hTable = ((uv_adr & VIP_UV_ADR_TABLE3_TOP_ADR) >> VIP_UV_ADR_TABLE3_TOP_ADR_SHIFT) * 2;
-+ break;
-+
-+ default:
-+ /*
-+ * Of course, this should never happen
-+ */
-+ *hTable = 0;
-+ break;
-+ }
-+
-+ switch ((uv_adr & VIP_UV_ADR_VCODE_TABLE_SEL) >> VIP_UV_ADR_VCODE_TABLE_SEL_SHIFT)
-+ {
-+ case 0:
-+ *vTable = ((uv_adr & VIP_UV_ADR_MAX_UV_ADR) >> VIP_UV_ADR_MAX_UV_ADR_SHIFT) * 2 + 1;
-+ break;
-+
-+ case 1:
-+ *vTable = ((uv_adr & VIP_UV_ADR_TABLE1_BOT_ADR) >> VIP_UV_ADR_TABLE1_BOT_ADR_SHIFT) * 2 + 1;
-+ break;
-+
-+ case 2:
-+ *vTable = ((uv_adr & VIP_UV_ADR_TABLE3_TOP_ADR) >> VIP_UV_ADR_TABLE3_TOP_ADR_SHIFT) * 2 + 1;
-+ break;
-+
-+ default:
-+ /*
-+ * Of course, this should never happen
-+ */
-+ *vTable = 0;
-+ break;
-+ }
-+}
-+
-+/**********************************************************************
-+ *
-+ * saveTimingTables
-+ *
-+ * Save horizontal/vertical timing code tables
-+ *
-+ **********************************************************************/
-+static
-+void
-+saveTimingTables(
-+ TheaterOutPtr t,
-+ TheaterStatePtr save
-+ )
-+{
-+ CARD16 hTable;
-+ CARD16 vTable;
-+ CARD32 tmp;
-+ unsigned i;
-+
-+ if (t->theatre_num >= 0)
-+ {
-+ theatre_read(t , VIP_UV_ADR , &save->uv_adr);
-+ getTimingTablesAddr(save->uv_adr , FALSE , &hTable , &vTable);
-+ }
-+ else
-+ {
-+ ert_read(t , TV_UV_ADR , &save->uv_adr);
-+ getTimingTablesAddr(save->uv_adr , TRUE , &hTable , &vTable);
-+ }
-+
-+ /*
-+ * Reset FIFO arbiter in order to be able to access FIFO RAM
-+ */
-+ if (t->theatre_num >= 0)
-+ {
-+ theatre_write(t ,
-+ VIP_MASTER_CNTL ,
-+ save->master_cntl |
-+ VIP_MASTER_CNTL_CRT_ASYNC_RST |
-+ VIP_MASTER_CNTL_TV_FIFO_ASYNC_RST |
-+ VIP_MASTER_CNTL_TV_ASYNC_RST);
-+ theatre_write(t ,
-+ VIP_MASTER_CNTL ,
-+ save->master_cntl |
-+ VIP_MASTER_CNTL_TV_ASYNC_RST |
-+ VIP_MASTER_CNTL_CRT_ASYNC_RST);
-+ }
-+ else
-+ {
-+ ert_write(t ,
-+ TV_MASTER_CNTL ,
-+ save->master_cntl | TV_MASTER_CNTL_TV_ON);
-+ }
-+
-+ RTTRACE(("saveTimingTables: reading timing tables\n"));
-+
-+ for (i = 0; i < MAX_H_CODE_TIMING_LEN; i += 2)
-+ {
-+ readFIFO(t , hTable-- , &tmp);
-+ save->h_code_timing[ i ] = (CARD16)((tmp >> 14) & 0x3fff);
-+ save->h_code_timing[ i + 1 ] = (CARD16)(tmp & 0x3fff);
-+
-+ if (save->h_code_timing[ i ] == 0 || save->h_code_timing[ i + 1 ] == 0)
-+ break;
-+ }
-+
-+ for (i = 0; i < MAX_V_CODE_TIMING_LEN; i += 2)
-+ {
-+ readFIFO(t , vTable++ , &tmp);
-+ save->v_code_timing[ i ] = (CARD16)(tmp & 0x3fff);
-+ save->v_code_timing[ i + 1 ] = (CARD16)((tmp >> 14) & 0x3fff);
-+
-+ if (save->v_code_timing[ i ] == 0 || save->v_code_timing[ i + 1 ] == 0)
-+ break;
-+ }
-+}
-+
-+/**********************************************************************
-+ *
-+ * restoreTimingTables
-+ *
-+ * Load horizontal/vertical timing code tables
-+ *
-+ **********************************************************************/
-+
-+static
-+void
-+restoreTimingTables(
-+ TheaterOutPtr t,
-+ TheaterStatePtr restore
-+ )
-+{
-+ CARD16 hTable;
-+ CARD16 vTable;
-+ CARD32 tmp;
-+ unsigned i;
-+
-+ if (t->theatre_num >= 0)
-+ {
-+ theatre_write(t , VIP_UV_ADR , restore->uv_adr);
-+ getTimingTablesAddr(restore->uv_adr , FALSE , &hTable , &vTable);
-+ }
-+ else
-+ {
-+ ert_write(t , TV_UV_ADR , restore->uv_adr);
-+ getTimingTablesAddr(restore->uv_adr , TRUE , &hTable , &vTable);
-+ }
-+
-+ for (i = 0; i < MAX_H_CODE_TIMING_LEN; i += 2 , hTable--)
-+ {
-+ tmp = ((CARD32)restore->h_code_timing[ i ] << 14) | ((CARD32)restore->h_code_timing[ i + 1 ]);
-+ writeFIFO(t , hTable , tmp);
-+ if (restore->h_code_timing[ i ] == 0 || restore->h_code_timing[ i + 1 ] == 0)
-+ break;
-+ }
-+
-+ for (i = 0; i < MAX_V_CODE_TIMING_LEN; i += 2 , vTable++)
-+ {
-+ tmp = ((CARD32)restore->v_code_timing[ i + 1 ] << 14) | ((CARD32)restore->v_code_timing[ i ]);
-+ writeFIFO(t , vTable , tmp);
-+ if (restore->v_code_timing[ i ] == 0 || restore->v_code_timing[ i + 1 ] == 0)
-+ break;
-+ }
-+}
-+
-+/**********************************************************************
-+ *
-+ * restoreOutputStd
-+ *
-+ * Set tv standard & output muxes
-+ *
-+ **********************************************************************/
-+
-+static
-+void
-+restoreOutputStd(
-+ TheaterOutPtr t,
-+ TheaterStatePtr restore
-+ )
-+{
-+ theatre_write(t , VIP_SYNC_CNTL , restore->sync_cntl);
-+
-+ theatre_write(t , VIP_TIMING_CNTL , restore->timing_cntl);
-+
-+ theatre_write(t , VIP_MODULATOR_CNTL1 , restore->modulator_cntl1);
-+ theatre_write(t , VIP_MODULATOR_CNTL2 , restore->modulator_cntl2);
-+
-+ theatre_write(t , VIP_PRE_DAC_MUX_CNTL , restore->pre_dac_mux_cntl);
-+
-+ theatre_write(t , VIP_CRC_CNTL , restore->crc_cntl);
-+
-+ theatre_write(t , VIP_FRAME_LOCK_CNTL , restore->frame_lock_cntl);
-+
-+ theatre_write(t , VIP_HW_DEBUG , restore->hw_debug);
-+}
-+
-+/**********************************************************************
-+ *
-+ * enableTV_DAC
-+ *
-+ * Enable/disable tv output DAC
-+ *
-+ **********************************************************************/
-+
-+static
-+void
-+enableTV_DAC(
-+ TheaterOutPtr t,
-+ Bool enable
-+ )
-+{
-+ CARD32 tmp;
-+
-+ theatre_read(t , VIP_TV_DAC_CNTL , &tmp);
-+
-+ if (enable)
-+ {
-+ tmp |= VIP_TV_DAC_CNTL_NBLANK;
-+ tmp &= ~VIP_TV_DAC_CNTL_DASLEEP;
-+ tmp &= ~VIP_TV_DAC_CNTL_BGSLEEP;
-+ }
-+ else
-+ {
-+ tmp &= ~VIP_TV_DAC_CNTL_NBLANK;
-+ tmp |= VIP_TV_DAC_CNTL_DASLEEP;
-+ tmp |= VIP_TV_DAC_CNTL_BGSLEEP;
-+ }
-+
-+ theatre_write(t , VIP_TV_DAC_CNTL , tmp);
-+}
-+
-+/**********************************************************************
-+ *
-+ * ERT_RestorePLL
-+ *
-+ * Set ERT PLLs
-+ *
-+ **********************************************************************/
-+static
-+void
-+ERT_RestorePLL(
-+ TheaterOutPtr t,
-+ ScrnInfoPtr pScrn,
-+ TheaterStatePtr restore
-+ )
-+{
-+ unsigned char *RADEONMMIO = t->MMIO;
-+
-+ OUTPLLP(pScrn , TV_PLL_CNTL1 , 0 , ~TV_PLL_CNTL1_TVCLK_SRC_SEL);
-+ OUTPLL(pScrn , TV_PLL_CNTL , restore->tv_pll_cntl);
-+ OUTPLLP(pScrn , TV_PLL_CNTL1 , TV_PLL_CNTL1_TVPLL_RESET , ~TV_PLL_CNTL1_TVPLL_RESET);
-+
-+ waitPLL_lock(t , pScrn , 200 , 800 , 135);
-+
-+ OUTPLLP(pScrn , TV_PLL_CNTL1 , 0 , ~TV_PLL_CNTL1_TVPLL_RESET);
-+
-+ waitPLL_lock(t , pScrn , 300 , 160 , 27);
-+ waitPLL_lock(t , pScrn , 200 , 800 , 135);
-+
-+ OUTPLLP(pScrn , TV_PLL_CNTL1 , 0 , ~0xf);
-+ OUTPLLP(pScrn , TV_PLL_CNTL1 , TV_PLL_CNTL1_TVCLK_SRC_SEL , ~TV_PLL_CNTL1_TVCLK_SRC_SEL);
-+
-+ OUTPLLP(pScrn , TV_PLL_CNTL1 , (1 << TV_PLL_CNTL1_TVPDC_SHIFT) , ~TV_PLL_CNTL1_TVPDC_MASK);
-+ OUTPLLP(pScrn , TV_PLL_CNTL1 , 0 , ~TV_PLL_CNTL1_TVPLL_SLEEP);
-+}
-+
-+/**********************************************************************
-+ *
-+ * ERT_RestoreHV
-+ *
-+ * Set ERT horizontal/vertical settings
-+ *
-+ **********************************************************************/
-+
-+static
-+void
-+ERT_RestoreHV(
-+ TheaterOutPtr t,
-+ TheaterStatePtr restore
-+ )
-+{
-+ ert_write(t , TV_RGB_CNTL , restore->rgb_cntl);
-+
-+ ert_write(t , TV_HTOTAL , restore->htotal);
-+ ert_write(t , TV_HDISP , restore->hdisp);
-+ ert_write(t , TV_HSTART , restore->hstart);
-+
-+ ert_write(t , TV_VTOTAL , restore->vtotal);
-+ ert_write(t , TV_VDISP , restore->vdisp);
-+
-+ ert_write(t , TV_FTOTAL , restore->vftotal);
-+
-+ ert_write(t , TV_VSCALER_CNTL1 , restore->vscaler_cntl1);
-+ ert_write(t , TV_VSCALER_CNTL2 , restore->vscaler_cntl2);
-+
-+ ert_write(t , TV_Y_FALL_CNTL , restore->y_fall_cntl);
-+ ert_write(t , TV_Y_RISE_CNTL , restore->y_rise_cntl);
-+ ert_write(t , TV_Y_SAWTOOTH_CNTL , restore->y_saw_tooth_cntl);
-+}
-+
-+/**********************************************************************
-+ *
-+ * ERT_RestoreRestarts
-+ *
-+ * Set ERT TV_*RESTART registers
-+ *
-+ **********************************************************************/
-+
-+static
-+void
-+ERT_RestoreRestarts(
-+ TheaterOutPtr t,
-+ TheaterStatePtr restore
-+ )
-+{
-+ ert_write(t , TV_FRESTART , restore->dfrestart);
-+ ert_write(t , TV_HRESTART , restore->dhrestart);
-+ ert_write(t , TV_VRESTART , restore->dvrestart);
-+}
-+
-+/**********************************************************************
-+ *
-+ * ERT_RestoreOutputStd
-+ *
-+ * Set tv standard & output muxes
-+ *
-+ **********************************************************************/
-+static
-+void
-+ERT_RestoreOutputStd(
-+ TheaterOutPtr t,
-+ TheaterStatePtr restore
-+ )
-+{
-+ ert_write(t , TV_SYNC_CNTL , restore->sync_cntl);
-+
-+ ert_write(t , TV_TIMING_CNTL , restore->timing_cntl);
-+
-+ ert_write(t , TV_MODULATOR_CNTL1 , restore->modulator_cntl1);
-+ ert_write(t , TV_MODULATOR_CNTL2 , restore->modulator_cntl2);
-+
-+ ert_write(t , TV_PRE_DAC_MUX_CNTL , restore->pre_dac_mux_cntl);
-+
-+ ert_write(t , TV_CRC_CNTL , restore->crc_cntl);
-+}
-+
-+/**********************************************************************
-+ *
-+ * ERT_IsOn
-+ *
-+ * Test if tv output would be enabled with a given value in TV_DAC_CNTL
-+ *
-+ **********************************************************************/
-+static
-+Bool
-+ERT_IsOn(
-+ CARD32 tv_dac_cntl
-+ )
-+{
-+ if (tv_dac_cntl & TV_DAC_CNTL_BGSLEEP)
-+ return FALSE;
-+ else if ((tv_dac_cntl & (TV_DAC_CNTL_RDACPD | TV_DAC_CNTL_GDACPD | TV_DAC_CNTL_BDACPD)) ==
-+ (TV_DAC_CNTL_RDACPD | TV_DAC_CNTL_GDACPD | TV_DAC_CNTL_BDACPD))
-+ return FALSE;
-+ else
-+ return TRUE;
-+}
-+
-+/**********************************************************************
-+ *
-+ * ERT_Restore
-+ *
-+ * Restore state of ERT
-+ *
-+ **********************************************************************/
-+static
-+void
-+ERT_Restore(
-+ TheaterOutPtr t,
-+ ScrnInfoPtr pScrn,
-+ TheaterStatePtr restore
-+ )
-+{
-+ RTTRACE(("Entering ERT_Restore\n"));
-+
-+ ert_write(t ,
-+ TV_MASTER_CNTL ,
-+ restore->master_cntl | TV_MASTER_CNTL_TV_ON);
-+
-+ ert_write(t,
-+ TV_MASTER_CNTL ,
-+ restore->master_cntl |
-+ VIP_MASTER_CNTL_TV_ASYNC_RST |
-+ VIP_MASTER_CNTL_CRT_ASYNC_RST |
-+ VIP_MASTER_CNTL_RESTART_PHASE_FIX |
-+ VIP_MASTER_CNTL_TV_FIFO_ASYNC_RST);
-+
-+ /*
-+ * Temporarily turn the TV DAC off
-+ */
-+ ert_write(t ,
-+ TV_DAC_CNTL ,
-+ (restore->tv_dac_cntl & ~TV_DAC_CNTL_NBLANK) |
-+ TV_DAC_CNTL_BGSLEEP |
-+ TV_DAC_CNTL_RDACPD |
-+ TV_DAC_CNTL_GDACPD |
-+ TV_DAC_CNTL_BDACPD);
-+
-+ RTTRACE(("ERT_Restore: checkpoint 1\n"));
-+ ERT_RestorePLL(t , pScrn , restore);
-+
-+ RTTRACE(("ERT_Restore: checkpoint 2\n"));
-+ ERT_RestoreHV(t , restore);
-+
-+ ert_write(t,
-+ TV_MASTER_CNTL ,
-+ restore->master_cntl |
-+ VIP_MASTER_CNTL_TV_ASYNC_RST |
-+ VIP_MASTER_CNTL_CRT_ASYNC_RST |
-+ VIP_MASTER_CNTL_RESTART_PHASE_FIX);
-+
-+ RTTRACE(("ERT_Restore: checkpoint 3\n"));
-+ ERT_RestoreRestarts(t , restore);
-+
-+ RTTRACE(("ERT_Restore: checkpoint 4\n"));
-+
-+ /*
-+ * Timing tables are only restored when tv output is active
-+ */
-+ if (ERT_IsOn(restore->tv_dac_cntl))
-+ restoreTimingTables(t , restore);
-+
-+ ert_write(t,
-+ TV_MASTER_CNTL ,
-+ restore->master_cntl |
-+ VIP_MASTER_CNTL_TV_ASYNC_RST |
-+ VIP_MASTER_CNTL_RESTART_PHASE_FIX);
-+
-+ RTTRACE(("ERT_Restore: checkpoint 5\n"));
-+ ERT_RestoreOutputStd(t , restore);
-+
-+ ert_write(t ,
-+ TV_MASTER_CNTL ,
-+ restore->master_cntl);
-+
-+ ert_write(t , RADEON_DISP_MERGE_CNTL , restore->disp_merge_cntl);
-+
-+ ert_write(t , TV_GAIN_LIMIT_SETTINGS , restore->gain_limit_settings);
-+ ert_write(t , TV_LINEAR_GAIN_SETTINGS , restore->linear_gain_settings);
-+
-+ ert_write(t , TV_DAC_CNTL , restore->tv_dac_cntl);
-+
-+ RTTRACE(("Leaving ERT_Restore\n"));
-+}
-+
-+/**********************************************************************
-+ *
-+ * RT_Restore
-+ *
-+ * Restore state of RT
-+ *
-+ **********************************************************************/
-+
-+static
-+void
-+RT_Restore(
-+ TheaterOutPtr t,
-+ ScrnInfoPtr pScrn,
-+ TheaterStatePtr restore
-+ )
-+{
-+ if (t->theatre_num < 0)
-+ {
-+ ERT_Restore(t , pScrn , restore);
-+ return;
-+ }
-+
-+ RTTRACE(("Entering RT_Restore\n"));
-+
-+ theatre_write(t ,
-+ VIP_MASTER_CNTL ,
-+ restore->master_cntl |
-+ VIP_MASTER_CNTL_TV_ASYNC_RST |
-+ VIP_MASTER_CNTL_CRT_ASYNC_RST |
-+ VIP_MASTER_CNTL_TV_FIFO_ASYNC_RST);
-+
-+ /*
-+ * Temporarily turn the TV DAC off
-+ */
-+ theatre_write(t ,
-+ VIP_TV_DAC_CNTL ,
-+ (restore->tv_dac_cntl & ~VIP_TV_DAC_CNTL_NBLANK) |
-+ VIP_TV_DAC_CNTL_DASLEEP |
-+ VIP_TV_DAC_CNTL_BGSLEEP);
-+
-+ RTTRACE(("RT_Restore: checkpoint 1\n"));
-+ restoreTVO_SYNC(t , restore);
-+
-+ RTTRACE(("RT_Restore: checkpoint 2\n"));
-+ restorePLL(t , pScrn , restore);
-+
-+ RTTRACE(("RT_Restore: checkpoint 3\n"));
-+ restoreTVO_DataDelay(t , restore);
-+
-+ RTTRACE(("RT_Restore: checkpoint 4\n"));
-+ restoreRT_HV(t , restore);
-+
-+ theatre_write(t ,
-+ VIP_MASTER_CNTL ,
-+ restore->master_cntl |
-+ VIP_MASTER_CNTL_TV_ASYNC_RST |
-+ VIP_MASTER_CNTL_CRT_ASYNC_RST);
-+
-+ RTTRACE(("RT_Restore: checkpoint 5\n"));
-+ restoreRestarts(t , restore);
-+
-+ RTTRACE(("RT_Restore: checkpoint 6\n"));
-+
-+ /*
-+ * Timing tables are restored when tv output is active
-+ */
-+ if ((restore->tv_dac_cntl & (VIP_TV_DAC_CNTL_DASLEEP | VIP_TV_DAC_CNTL_BGSLEEP)) == 0)
-+ restoreTimingTables(t , restore);
-+
-+ theatre_write(t ,
-+ VIP_MASTER_CNTL ,
-+ restore->master_cntl |
-+ VIP_MASTER_CNTL_TV_ASYNC_RST);
-+
-+ RTTRACE(("RT_Restore: checkpoint 7\n"));
-+ restoreOutputStd(t , restore);
-+
-+ theatre_write(t ,
-+ VIP_MASTER_CNTL ,
-+ restore->master_cntl);
-+
-+ theatre_write(t , VIP_GAIN_LIMIT_SETTINGS , restore->gain_limit_settings);
-+ theatre_write(t , VIP_LINEAR_GAIN_SETTINGS , restore->linear_gain_settings);
-+
-+ theatre_write(t , VIP_TV_DAC_CNTL , restore->tv_dac_cntl);
-+
-+ RTTRACE(("Leaving RT_Restore\n"));
-+}
-+
-+/**********************************************************************
-+ *
-+ * RT_Save
-+ *
-+ * Save state of RT
-+ *
-+ **********************************************************************/
-+
-+static
-+void
-+RT_Save(
-+ TheaterOutPtr t,
-+ ScrnInfoPtr pScrn,
-+ TheaterStatePtr save
-+ )
-+{
-+ unsigned i;
-+
-+ RTTRACE(("Entering RT_Save\n"));
-+
-+ if (t->theatre_num >= 0)
-+ {
-+ theatre_read(t , VIP_CLKOUT_CNTL , &save->clkout_cntl);
-+ theatre_read(t , VIP_CLOCK_SEL_CNTL , &save->clock_sel_cntl);
-+ theatre_read(t , VIP_CRC_CNTL , &save->crc_cntl);
-+ theatre_read(t , VIP_CRT_PLL_CNTL , &save->crt_pll_cntl);
-+ theatre_read(t , VIP_DFRESTART , &save->dfrestart);
-+ theatre_read(t , VIP_DHRESTART , &save->dhrestart);
-+ theatre_read(t , VIP_DVRESTART , &save->dvrestart);
-+ theatre_read(t , VIP_FRAME_LOCK_CNTL , &save->frame_lock_cntl);
-+ theatre_read(t , VIP_GAIN_LIMIT_SETTINGS , &save->gain_limit_settings);
-+ theatre_read(t , VIP_HDISP , &save->hdisp);
-+ theatre_read(t , VIP_HSTART , &save->hstart);
-+ theatre_read(t , VIP_HTOTAL , &save->htotal);
-+ theatre_read(t , VIP_HW_DEBUG , &save->hw_debug);
-+ theatre_read(t , VIP_LINEAR_GAIN_SETTINGS, &save->linear_gain_settings);
-+ theatre_read(t , VIP_MASTER_CNTL , &save->master_cntl);
-+ theatre_read(t , VIP_MODULATOR_CNTL1 , &save->modulator_cntl1);
-+ theatre_read(t , VIP_MODULATOR_CNTL2 , &save->modulator_cntl2);
-+ theatre_read(t , VIP_PLL_CNTL0 , &save->pll_cntl0);
-+ theatre_read(t , VIP_PLL_TEST_CNTL , &save->pll_test_cntl);
-+ theatre_read(t , VIP_PRE_DAC_MUX_CNTL , &save->pre_dac_mux_cntl);
-+ theatre_read(t , VIP_RGB_CNTL , &save->rgb_cntl);
-+ theatre_read(t , VIP_SYNC_CNTL , &save->sync_cntl);
-+ theatre_read(t , VIP_SYNC_LOCK_CNTL , &save->sync_lock_cntl);
-+ theatre_read(t , VIP_SYNC_SIZE , &save->sync_size);
-+ theatre_read(t , VIP_TIMING_CNTL , &save->timing_cntl);
-+ theatre_read(t , VIP_TVO_DATA_DELAY_A , &save->tvo_data_delay_a);
-+ theatre_read(t , VIP_TVO_DATA_DELAY_B , &save->tvo_data_delay_b);
-+ theatre_read(t , VIP_TVO_SYNC_PAT_EXPECT , &save->tvo_sync_pat_expect);
-+ theatre_read(t , VIP_TVO_SYNC_THRESHOLD , &save->tvo_sync_threshold);
-+ theatre_read(t , VIP_TV_DAC_CNTL , &save->tv_dac_cntl);
-+ theatre_read(t , VIP_TV_PLL_CNTL , &save->tv_pll_cntl);
-+ theatre_read(t , VIP_TV_PLL_FINE_CNTL , &save->tv_pll_fine_cntl);
-+ theatre_read(t , VIP_UPSAMP_AND_GAIN_CNTL, &save->upsamp_and_gain_cntl);
-+ theatre_read(t , VIP_VDISP , &save->vdisp);
-+ theatre_read(t , VIP_VFTOTAL , &save->vftotal);
-+ theatre_read(t , VIP_VSCALER_CNTL1 , &save->vscaler_cntl1);
-+ theatre_read(t , VIP_VSCALER_CNTL2 , &save->vscaler_cntl2);
-+ theatre_read(t , VIP_VTOTAL , &save->vtotal);
-+ theatre_read(t , VIP_Y_FALL_CNTL , &save->y_fall_cntl);
-+ theatre_read(t , VIP_Y_RISE_CNTL , &save->y_rise_cntl);
-+ theatre_read(t , VIP_Y_SAW_TOOTH_CNTL , &save->y_saw_tooth_cntl);
-+
-+ for (i = 0; i < N_UPSAMPLER_COEFFS; i++)
-+ theatre_read(t , VIP_UPSAMP_COEFF0_0 + i * 4 , &save->upsamp_coeffs[ i ]);
-+
-+ /*
-+ * Read H/V code timing tables (current tables only are saved)
-+ * This step is skipped when tv output is disabled in current RT state
-+ * (see RT_Restore)
-+ */
-+ if ((save->tv_dac_cntl & (VIP_TV_DAC_CNTL_DASLEEP | VIP_TV_DAC_CNTL_BGSLEEP)) == 0)
-+ saveTimingTables(t , save);
-+ }
-+ else
-+ {
-+ /*
-+ * ERT
-+ */
-+ ert_read(t , TV_CRC_CNTL , &save->crc_cntl);
-+ ert_read(t , TV_FRESTART , &save->dfrestart);
-+ ert_read(t , TV_HRESTART , &save->dhrestart);
-+ ert_read(t , TV_VRESTART , &save->dvrestart);
-+ ert_read(t , TV_GAIN_LIMIT_SETTINGS , &save->gain_limit_settings);
-+ ert_read(t , TV_HDISP , &save->hdisp);
-+ ert_read(t , TV_HSTART , &save->hstart);
-+ ert_read(t , TV_HTOTAL , &save->htotal);
-+ ert_read(t , TV_LINEAR_GAIN_SETTINGS , &save->linear_gain_settings);
-+ ert_read(t , TV_MASTER_CNTL , &save->master_cntl);
-+ ert_read(t , TV_RGB_CNTL , &save->rgb_cntl);
-+ ert_read(t , TV_MODULATOR_CNTL1 , &save->modulator_cntl1);
-+ ert_read(t , TV_MODULATOR_CNTL2 , &save->modulator_cntl2);
-+ ert_read(t , TV_PRE_DAC_MUX_CNTL , &save->pre_dac_mux_cntl);
-+ ert_read(t , TV_SYNC_CNTL , &save->sync_cntl);
-+ ert_read(t , TV_TIMING_CNTL , &save->timing_cntl);
-+ ert_read(t , TV_DAC_CNTL , &save->tv_dac_cntl);
-+ ert_read(t , TV_UPSAMP_AND_GAIN_CNTL , &save->upsamp_and_gain_cntl);
-+ ert_read(t , TV_VDISP , &save->vdisp);
-+ ert_read(t , TV_FTOTAL , &save->vftotal);
-+ ert_read(t , TV_VSCALER_CNTL1 , &save->vscaler_cntl1);
-+ ert_read(t , TV_VSCALER_CNTL2 , &save->vscaler_cntl2);
-+ ert_read(t , TV_VTOTAL , &save->vtotal);
-+ ert_read(t , TV_Y_FALL_CNTL , &save->y_fall_cntl);
-+ ert_read(t , TV_Y_RISE_CNTL , &save->y_rise_cntl);
-+ ert_read(t , TV_Y_SAWTOOTH_CNTL , &save->y_saw_tooth_cntl);
-+
-+ ert_read(t , RADEON_DISP_MERGE_CNTL , &save->disp_merge_cntl);
-+
-+ save->tv_pll_cntl = INPLL(pScrn , TV_PLL_CNTL);
-+
-+ /*
-+ * Read H/V code timing tables (current tables only are saved)
-+ * This step is skipped when tv output is disabled in current RT state
-+ * (see RT_Restore)
-+ */
-+ if (ERT_IsOn(save->tv_dac_cntl))
-+ saveTimingTables(t , save);
-+ }
-+
-+
-+ RTTRACE(("RT_Save returning\n"));
-+}
-+
-+/**********************************************************************
-+ *
-+ * computeRestarts
-+ *
-+ * Compute F,V,H restarts from default restart position and
-+ * hPos & vPos
-+ * Return TRUE when code timing table was changed
-+ *
-+ **********************************************************************/
-+
-+static
-+Bool
-+computeRestarts(
-+ const ModeConstants *constPtr,
-+ TVStd tvStd,
-+ int hPos,
-+ int vPos,
-+ int hSize,
-+ TheaterStatePtr save
-+ )
-+{
-+ int restart;
-+ const TVConstants *pTvStd = &tvStdConsts[ tvStd ];
-+ unsigned hTotal;
-+ unsigned vTotal;
-+ unsigned fTotal;
-+ int vOffset;
-+ int hOffset;
-+ TimingTableEl p1;
-+ TimingTableEl p2;
-+ Bool hChanged;
-+ CARD16 hInc;
-+
-+ hTotal = constPtr->horTotal;
-+ vTotal = constPtr->verTotal;
-+ fTotal = pTvStd->vftotal + 1;
-+
-+ /*
-+ * Adjust positions 1&2 in hor. code timing table
-+ */
-+ hOffset = hPos * H_POS_UNIT;
-+
-+ p1 = constPtr->horTimingTable[ H_TABLE_POS1 ];
-+ p2 = constPtr->horTimingTable[ H_TABLE_POS2 ];
-+
-+ p1 = (TimingTableEl)((int)p1 + hOffset);
-+ p2 = (TimingTableEl)((int)p2 - hOffset);
-+
-+ hChanged = (p1 != save->h_code_timing[ H_TABLE_POS1 ] ||
-+ p2 != save->h_code_timing[ H_TABLE_POS2 ]);
-+
-+ save->h_code_timing[ H_TABLE_POS1 ] = p1;
-+ save->h_code_timing[ H_TABLE_POS2 ] = p2;
-+
-+ /*
-+ * Convert hOffset from n. of TV clock periods to n. of CRTC clock periods (CRTC pixels)
-+ */
-+ hOffset = (hOffset * (int)(constPtr->pixToTV)) / 1000;
-+
-+ /*
-+ * Adjust restart
-+ */
-+ restart = constPtr->defRestart;
-+
-+ /*
-+ * Convert vPos TV lines to n. of CRTC pixels
-+ * Be verrrrry careful when mixing signed & unsigned values in C..
-+ */
-+ vOffset = ((int)(vTotal * hTotal) * 2 * vPos) / (int)(pTvStd->linesFrame);
-+
-+ restart -= vOffset + hOffset;
-+
-+ RTTRACE(("computeRestarts: def = %u, h = %d , v = %d , p1=%04x , p2=%04x , restart = %d\n" , constPtr->defRestart , hPos , vPos , p1 , p2 , restart));
-+
-+ save->dhrestart = restart % hTotal;
-+ restart /= hTotal;
-+ save->dvrestart = restart % vTotal;
-+ restart /= vTotal;
-+ save->dfrestart = restart % fTotal;
-+
-+ RTTRACE(("computeRestarts: F/H/V=%u,%u,%u\n" , save->dfrestart , save->dvrestart , save->dhrestart));
-+
-+ /*
-+ * Compute H_INC from hSize
-+ */
-+ hInc = (CARD16)((int)(constPtr->horResolution * 4096 * pTvStd->tvClockT) /
-+ (hSize * (int)(pTvStd->hSizeUnit) + (int)(pTvStd->zeroHSize)));
-+ save->timing_cntl = (save->timing_cntl & ~VIP_TIMING_CNTL_H_INC) |
-+ ((CARD32)hInc << VIP_TIMING_CNTL_H_INC_SHIFT);
-+
-+ RTTRACE(("computeRestarts: hSize=%d,hInc=%u\n" , hSize , hInc));
-+
-+ return hChanged;
-+}
-+
-+/**********************************************************************
-+ *
-+ * RT_Init
-+ *
-+ * Define RT state for a given standard/resolution combination
-+ *
-+ **********************************************************************/
-+
-+static
-+void
-+RT_Init(
-+ const ModeConstants *constPtr,
-+ TVStd tvStd,
-+ Bool isErt,
-+ Bool enable,
-+ int hPos,
-+ int vPos,
-+ int hSize,
-+ TheaterStatePtr save
-+ )
-+{
-+ unsigned i;
-+ CARD32 tmp;
-+ const TVConstants *pTvStd = &tvStdConsts[ tvStd ];
-+
-+ save->clkout_cntl = VIP_CLKOUT_CNTL_INI;
-+
-+ save->clock_sel_cntl = VIP_CLOCK_SEL_CNTL_INI |
-+ (constPtr->crtcPLL_byteClkDiv << VIP_CLOCK_SEL_CNTL_BYTCLK_SHIFT) |
-+ (constPtr->byteClkDelay << VIP_CLOCK_SEL_CNTL_BYTCLKD_SHIFT);
-+
-+ save->crc_cntl = 0;
-+
-+ tmp = ((CARD32)constPtr->crtcPLL_M << VIP_CRT_PLL_CNTL_M_SHIFT) |
-+ (((CARD32)constPtr->crtcPLL_N & VIP_CRT_PLL_CNTL_NLO) << VIP_CRT_PLL_CNTL_NLO_SHIFT) |
-+ (((CARD32)constPtr->crtcPLL_N & VIP_CRT_PLL_CNTL_NHI) << VIP_CRT_PLL_CNTL_NHI_SHIFT);
-+ if (constPtr->crtcPLL_divBy2)
-+ tmp |= VIP_CRT_PLL_CNTL_CLKBY2;
-+ save->crt_pll_cntl = tmp;
-+
-+ save->frame_lock_cntl = VIP_FRAME_LOCK_CNTL_INI;
-+
-+ save->gain_limit_settings = VIP_GAIN_LIMIT_SETTINGS_INI;
-+
-+ save->hdisp = constPtr->horResolution - 1;
-+ save->hstart = constPtr->horStart;
-+ save->htotal = constPtr->horTotal - 1;
-+
-+ save->hw_debug = VIP_HW_DEBUG_INI;
-+
-+ save->linear_gain_settings = VIP_LINEAR_GAIN_SETTINGS_INI;
-+
-+ /*
-+ * TEST TEST TEST TEST TEST TEST TEST TEST TEST
-+ */
-+ if (isErt)
-+ save->master_cntl = enable ? TV_MASTER_CNTL_ON_INI : TV_MASTER_CNTL_OFF_INI;
-+ else
-+ save->master_cntl = enable ? VIP_MASTER_CNTL_ON_INI : VIP_MASTER_CNTL_OFF_INI;
-+
-+ save->modulator_cntl1 = pTvStd->modulatorCntl1;
-+ save->modulator_cntl2 = pTvStd->modulatorCntl2;
-+
-+ save->pll_cntl0 = VIP_PLL_CNTL0_INI;
-+ save->pll_test_cntl = VIP_PLL_TEST_CNTL_INI;
-+
-+ save->pre_dac_mux_cntl = VIP_PRE_DAC_MUX_CNTL_INI;
-+
-+ if (isErt)
-+ save->rgb_cntl = TV_RGB_CNTL_INI;
-+ else
-+ /*
-+ * Instruct RT to accept either 565 or 888 packed pixels
-+ */
-+ save->rgb_cntl = constPtr->use888RGB ? VIP_RGB_CNTL_RGB_IS_888_PACK : 0;
-+
-+ save->sync_cntl = VIP_SYNC_CNTL_INI;
-+
-+ save->sync_lock_cntl = VIP_SYNC_LOCK_CNTL_INI;
-+
-+ save->sync_size = constPtr->horResolution + 8;
-+
-+ tmp = (constPtr->vScalerCntl1 >> VIP_VSCALER_CNTL1_UV_INC_SHIFT) & VIP_VSCALER_CNTL1_UV_INC;
-+ tmp = ((16384 * 256 * 10) / tmp + 5) / 10;
-+ tmp = (tmp << VIP_TIMING_CNTL_UV_OUT_POST_SCALE_SHIFT) |
-+ VIP_TIMING_CNTL_INI;
-+ save->timing_cntl = tmp;
-+
-+ save->tvo_data_delay_a = constPtr->tvoDataDelayA;
-+ save->tvo_data_delay_b = constPtr->tvoDataDelayB;
-+
-+ save->tvo_sync_pat_expect = VIP_TVO_SYNC_PAT_EXPECT_INI;
-+
-+ if (constPtr->use888RGB)
-+ save->tvo_sync_threshold = constPtr->horResolution + constPtr->horResolution / 2;
-+ else
-+ save->tvo_sync_threshold = constPtr->horResolution;
-+
-+ if (isErt)
-+ {
-+ if (enable)
-+ save->tv_dac_cntl = pTvStd->ert_tvDAC_Cntl;
-+ else
-+ save->tv_dac_cntl = (pTvStd->ert_tvDAC_Cntl & ~(TV_DAC_CNTL_NBLANK | TV_DAC_CNTL_NHOLD)) |
-+ (TV_DAC_CNTL_BGSLEEP | TV_DAC_CNTL_RDACPD | TV_DAC_CNTL_GDACPD | TV_DAC_CNTL_BDACPD);
-+ }
-+ else
-+ {
-+ if (enable)
-+ save->tv_dac_cntl = pTvStd->vip_tvDAC_Cntl;
-+ else
-+ save->tv_dac_cntl = (pTvStd->vip_tvDAC_Cntl & ~VIP_TV_DAC_CNTL_NBLANK) |
-+ (VIP_TV_DAC_CNTL_DASLEEP | VIP_TV_DAC_CNTL_BGSLEEP);
-+ }
-+
-+ tmp = ((CARD32)(pTvStd->tvPLL_M) << VIP_TV_PLL_CNTL_M_SHIFT) |
-+ (((CARD32)(pTvStd->tvPLL_N) & VIP_TV_PLL_CNTL_NLO) << VIP_TV_PLL_CNTL_NLO_SHIFT) |
-+ (((CARD32)(pTvStd->tvPLL_N) & VIP_TV_PLL_CNTL_NHI) << VIP_TV_PLL_CNTL_NHI_SHIFT) |
-+ ((CARD32)(pTvStd->tvPLL_postDiv) << VIP_TV_PLL_CNTL_P_SHIFT);
-+ save->tv_pll_cntl = tmp;
-+ save->tv_pll_fine_cntl = TV_PLL_FINE_INI;
-+
-+ save->upsamp_and_gain_cntl = VIP_UPSAMP_AND_GAIN_CNTL_INI;
-+
-+ memcpy(&save->upsamp_coeffs[ 0 ] , upsamplerCoeffs , sizeof(save->upsamp_coeffs));
-+
-+ save->uv_adr = VIP_UV_ADR_INI;
-+
-+ save->vdisp = constPtr->verResolution - 1;
-+ save->vftotal = pTvStd->vftotal;
-+
-+ save->vscaler_cntl1 = constPtr->vScalerCntl1;
-+ if (isErt)
-+ save->vscaler_cntl1 |= TV_VSCALER_CNTL1_RESTART_FIELD;
-+ save->vscaler_cntl2 = VIP_VSCALER_CNTL2_INI;
-+
-+ save->vtotal = constPtr->verTotal - 1;
-+
-+ save->y_fall_cntl = VIP_Y_FALL_CNTL_INI;
-+ save->y_rise_cntl = constPtr->yRiseCntl;
-+ save->y_saw_tooth_cntl = constPtr->ySawtoothCntl;
-+
-+ save->disp_merge_cntl = RADEON_DISP_MERGE_CNTL_INI;
-+
-+ for (i = 0; i < MAX_H_CODE_TIMING_LEN; i++)
-+ {
-+ if ((save->h_code_timing[ i ] = constPtr->horTimingTable[ i ]) == 0)
-+ break;
-+ }
-+
-+ for (i = 0; i < MAX_V_CODE_TIMING_LEN; i++)
-+ {
-+ if ((save->v_code_timing[ i ] = constPtr->verTimingTable[ i ]) == 0)
-+ break;
-+ }
-+
-+ /*
-+ * This must be called AFTER loading timing tables as they are modified by this function
-+ */
-+ computeRestarts(constPtr , tvStd , hPos , vPos , hSize , save);
-+}
-+
-+/**********************************************************************
-+ *
-+ * RT_InitCRTC
-+ *
-+ **********************************************************************/
-+static
-+void
-+RT_InitCRTC(
-+ const ModeConstants *constPtr,
-+ Bool isErt,
-+ RADEONSavePtr save
-+ )
-+{
-+ save->crtc_h_total_disp = (((constPtr->horResolution / 8) - 1) << RADEON_CRTC_H_DISP_SHIFT) |
-+ (((constPtr->horTotal / 8) - 1) << RADEON_CRTC_H_TOTAL_SHIFT);
-+
-+ save->crtc_h_sync_strt_wid = (save->crtc_h_sync_strt_wid & ~(RADEON_CRTC_H_SYNC_STRT_PIX | RADEON_CRTC_H_SYNC_STRT_CHAR)) |
-+ (((constPtr->horSyncStart / 8) - 1) << RADEON_CRTC_H_SYNC_STRT_CHAR_SHIFT) |
-+ (constPtr->horSyncStart & 7);
-+
-+ save->crtc_v_total_disp = ((constPtr->verResolution - 1) << RADEON_CRTC_V_DISP_SHIFT) |
-+ ((constPtr->verTotal - 1) << RADEON_CRTC_V_TOTAL_SHIFT);
-+
-+ save->crtc_v_sync_strt_wid = (save->crtc_v_sync_strt_wid & ~RADEON_CRTC_V_SYNC_STRT) |
-+ ((constPtr->verSyncStart - 1) << RADEON_CRTC_V_SYNC_STRT_SHIFT);
-+
-+ save->htotal_cntl = ((constPtr->horTotal & 7) << RADEON_HTOTAL_CNTL_HTOT_PIX_SLIP_SHIFT) | RADEON_HTOTAL_CNTL_HTOT_CNTL_VGA_EN;
-+
-+ if (isErt)
-+ {
-+ unsigned postDiv;
-+
-+ save->ppll_ref_div = constPtr->crtcPLL_M;
-+
-+ switch (constPtr->crtcPLL_postDiv)
-+ {
-+ case 1:
-+ postDiv = 0;
-+ break;
-+
-+ case 2:
-+ postDiv = 1;
-+ break;
-+
-+ case 3:
-+ postDiv = 4;
-+ break;
-+
-+ case 4:
-+ postDiv = 2;
-+ break;
-+
-+ case 6:
-+ postDiv = 6;
-+ break;
-+
-+ case 8:
-+ postDiv = 3;
-+ break;
-+
-+ case 12:
-+ postDiv = 7;
-+ break;
-+
-+ case 16:
-+ default:
-+ postDiv = 5;
-+ break;
-+ }
-+
-+ save->ppll_div_3 = (constPtr->crtcPLL_N << RADEON_PPLL_FB3_DIV_SHIFT) |
-+ (postDiv << RADEON_PPLL_POST3_DIV_SHIFT);
-+
-+ save->vclk_ecp_cntl &= ~RADEON_VCLK_SRC_SEL_MASK;
-+ save->vclk_ecp_cntl |= RADEON_VCLK_SRC_SEL_PPLLCLK;
-+ }
-+ else
-+ {
-+ save->ppll_div_3 &= ~RADEON_PPLL_POST3_DIV_MASK;
-+ save->ppll_div_3 |= (constPtr->use888RGB ? RADEON_PPLL_POST3_DIV_BY_3 : RADEON_PPLL_POST3_DIV_BY_2);
-+
-+ /*
-+ * Set Radeon to be clocked from RT
-+ */
-+ save->vclk_ecp_cntl &= ~RADEON_VCLK_SRC_SEL_MASK;
-+ save->vclk_ecp_cntl |= RADEON_VCLK_SRC_SEL_BYTECLK;
-+
-+ save->vclk_ecp_cntl &= ~RADEON_VCLK_ECP_CNTL_BYTECLK_POSTDIV;
-+ save->vclk_ecp_cntl |= RADEON_VCLK_ECP_CNTL_BYTECLK_NODIV;
-+
-+ /*
-+ * Instruct Radeon to output either 565 or 888 packed pixels
-+ */
-+ save->disp_output_cntl &=
-+ ~(RADEON_DISP_TV_SOURCE |
-+ RADEON_DISP_TV_MODE_MASK |
-+ RADEON_DISP_TV_CBB_CRR_DITH_EN |
-+ RADEON_DISP_TV_BIT_WIDTH |
-+ RADEON_DISP_TV_SYNC_MODE_MASK |
-+ RADEON_DISP_TV_SYNC_COLOR_MASK);
-+ save->disp_output_cntl |= (constPtr->use888RGB ?
-+ RADEON_DISP_TV_YG_DITH_EN | RADEON_DISP_TV_MODE_888 :
-+ RADEON_DISP_TV_YG_DITH_EN | RADEON_DISP_TV_MODE_565);
-+
-+ save->crtc_ext_cntl |= RADEON_CRTC_VGA_XOVERSCAN;
-+ save->dac_cntl |= RADEON_DAC_CNTL_DAC_TVO_EN;
-+ }
-+}
-+
-+/**********************************************************************
-+ *
-+ * ERTAutoDetect
-+ *
-+ **********************************************************************/
-+static
-+Bool
-+ERTAutoDetect(
-+ ScrnInfoPtr pScrn
-+ )
-+{
-+ RADEONInfoPtr info = RADEONPTR(pScrn);
-+ unsigned char *RADEONMMIO = info->MMIO;
-+ CARD32 saveReg = INREG(TV_LINEAR_GAIN_SETTINGS);
-+ Bool detected = FALSE;
-+
-+ /*
-+ * Ultra-dumb way of detecting an ERT: check that a register is present
-+ * @ TV_LINEAR_GAIN_SETTINGS (this is probably one of the most harmless
-+ * register to touch)
-+ */
-+ OUTREG(TV_LINEAR_GAIN_SETTINGS , 0x15500aa);
-+
-+ if (INREG(TV_LINEAR_GAIN_SETTINGS) == 0x15500aa)
-+ {
-+ OUTREG(TV_LINEAR_GAIN_SETTINGS , 0x0aa0155);
-+ if (INREG(TV_LINEAR_GAIN_SETTINGS) == 0x0aa0155)
-+ detected = TRUE;
-+ }
-+
-+ OUTREG(TV_LINEAR_GAIN_SETTINGS , saveReg);
-+
-+ return detected;
-+}
-+
-+/**********************************************************************
-+ *
-+ * detectTheaterOut
-+ *
-+ * Detect presence of a RT chip
-+ *
-+ **********************************************************************/
-+
-+TheaterOutPtr
-+detectTheaterOut(
-+ ScrnInfoPtr pScrn,
-+ Bool forceVIP,
-+ GENERIC_BUS_Ptr b
-+ )
-+{
-+ RADEONInfoPtr info = RADEONPTR(pScrn);
-+ //GENERIC_BUS_Ptr b = info->VIP;
-+ TheaterOutPtr t;
-+ int i;
-+ CARD32 val;
-+ char s[20];
-+
-+ b->ioctl(b , GB_IOCTL_GET_TYPE , 20 , s);
-+
-+ if (strcmp(VIP_TYPE , s))
-+ {
-+ xf86DrvMsg(b->scrnIndex , X_ERROR , "detectTheaterOut must be called with bus of type \"%s\", not \"%s\"\n",
-+ VIP_TYPE , s);
-+ return NULL;
-+ }
-+
-+ t = xcalloc(1 , sizeof(TheaterOutRec));
-+ t->theatre_num = -1;
-+ t->MMIO = info->MMIO;
-+ t->VIP = b;
-+
-+ if (!forceVIP && ERTAutoDetect(pScrn))
-+ xf86DrvMsg(b->scrnIndex , X_INFO , "Embedded Rage Theater detected\n");
-+ else
-+ {
-+ //
-+ // Is this really needed?
-+ //
-+ b->read(b , VIP_VIP_VENDOR_DEVICE_ID , 4 , (CARD8*)&val);
-+
-+ for (i = 0; i < 4; i++)
-+ {
-+ if(b->read(b , ((i & 0x03) << 14) | VIP_VIP_VENDOR_DEVICE_ID , 4 , (CARD8*)&val))
-+ {
-+ if (val)
-+ xf86DrvMsg(b->scrnIndex , X_INFO , "Device %d on VIP bus ids as 0x%08x\n" , i , (int)val);
-+ if (t->theatre_num >= 0)
-+ continue; // already found one instance
-+ if (val == RT100_ATI_ID)
-+ t->theatre_num = i;
-+ }
-+ else
-+ {
-+ xf86DrvMsg(b->scrnIndex , X_INFO , "No response from device %d on VIP bus\n" , i);
-+ }
-+ }
-+ if (t->theatre_num >= 0)
-+ {
-+ xf86DrvMsg(b->scrnIndex , X_INFO ,
-+ "Detected Rage Theatre as device %d on VIP bus\n" , t->theatre_num);
-+ theatre_read(t , VIP_VIP_REVISION_ID , &val);
-+ xf86DrvMsg(b->scrnIndex , X_INFO , "Detected Rage Theatre revision %8.8X\n" , (int)val);
-+ }
-+ else
-+ {
-+ xfree(t);
-+ return NULL;
-+ }
-+ }
-+
-+ return t;
-+}
-+
-+/**********************************************************************
-+ *
-+ * initTheaterOut
-+ *
-+ * Initialization of module
-+ *
-+ * 's' should be the value of TV_Output option (i.e. the initial TV
-+ * standard)
-+ *
-+ **********************************************************************/
-+
-+void
-+initTheaterOut(
-+ TheaterOutPtr t,
-+ const char *s
-+ )
-+{
-+ RTTRACE(("Entering initTheaterOut, s = %s\n" , s));
-+ /*
-+ * TEST TEST TEST TEST TEST TEST TEST TEST TEST
-+ */
-+ if (xf86NameCmp(s , "NTSC") == 0)
-+ t->standard = TV_STD_NTSC;
-+ else if (xf86NameCmp(s , "PAL") == 0)
-+ t->standard = TV_STD_PAL;
-+ else if (xf86NameCmp(s , "PAL-M") == 0)
-+ t->standard = TV_STD_PAL_M;
-+ else if (xf86NameCmp(s , "PAL-60") == 0)
-+ t->standard = TV_STD_PAL_60;
-+ else if (xf86NameCmp(s , "NTSC-J") == 0)
-+ t->standard = TV_STD_NTSC_J;
-+ else if (xf86NameCmp(s , "PAL-CN") == 0)
-+ t->standard = TV_STD_PAL_CN;
-+ else if (xf86NameCmp(s , "PAL-N") == 0)
-+ t->standard = TV_STD_PAL_N;
-+ else
-+ {
-+ xf86DrvMsg(0 , X_WARNING , "Unrecognized TV standard in TVOutput option (%s), TV output is disabled\n" , s);
-+ t->standard = TV_STD_KEEP_OFF;
-+ }
-+ t->compatibleMode = FALSE;
-+
-+ t->hPos = 0;
-+ t->vPos = 0;
-+ t->hSize = 0;
-+}
-+
-+/**********************************************************************
-+ *
-+ * theaterOutSave
-+ *
-+ * Save current state of RT as initial state (the one that is restored
-+ * when switching back to text mode)
-+ *
-+ **********************************************************************/
-+
-+void
-+theaterOutSave(
-+ TheaterOutPtr t,
-+ ScrnInfoPtr pScrn
-+ )
-+{
-+ RTTRACE(("Entering theaterOutSave\n"));
-+ RT_Save(t , pScrn , &t->savedState);
-+}
-+
-+/**********************************************************************
-+ *
-+ * theaterOutRestore
-+ *
-+ * Restore state of RT from initial state (the one saved through
-+ * theaterOutSave)
-+ *
-+ **********************************************************************/
-+
-+void
-+theaterOutRestore(
-+ TheaterOutPtr t,
-+ ScrnInfoPtr pScrn
-+ )
-+{
-+ RTTRACE(("Entering theaterOutRestore\n"));
-+ RT_Restore(t , pScrn , &t->savedState);
-+}
-+
-+/**********************************************************************
-+ *
-+ * theaterOutInit
-+ *
-+ * Define state for cloning current CRTC mode on TV output
-+ * It works in this way:
-+ * 1. It checks if resolution in "mode" parameter is one of those
-+ * allowing tv output
-+ * 2. If resolution is OK, define RT state according to resolution and
-+ * and current settings (tv standard etc.)
-+ * If resolution is not ok, define RT state to turn tv output off
-+ * 3. If resolution is OK, modify Radeon state to make it correct for
-+ * tv output (this is needed,e.g., to set vertical frequency to 50/60 Hz)
-+ *
-+ * Return value is TRUE when mode is OK for cloning on tv and tv output
-+ * is enabled, FALSE otherwise
-+ *
-+ **********************************************************************/
-+
-+Bool
-+theaterOutInit(
-+ TheaterOutPtr t,
-+ DisplayModePtr mode,
-+ RADEONSavePtr save
-+ )
-+{
-+ const ModeConstants *p;
-+ Bool isErt = t->theatre_num < 0;
-+
-+ RTTRACE(("Entering theaterOutInit: std=%u h=%u v=%u\n" , t->standard , mode->HDisplay , mode->VDisplay));
-+
-+ t->compatibleMode = FALSE;
-+
-+ if (t->standard != TV_STD_KEEP_OFF)
-+ {
-+ /*
-+ * Search mode among available ones
-+ */
-+ for (p = availableModes; p < (availableModes + N_AVAILABLE_MODES); p++)
-+ {
-+ if (p->horResolution == mode->HDisplay &&
-+ p->verResolution == mode->VDisplay &&
-+ p->standard == t->standard)
-+ {
-+ /*
-+ * Match found
-+ */
-+ t->compatibleMode = TRUE;
-+ t->currentMode = p;
-+
-+ RT_Init(p , t->standard , isErt , TRUE , t->hPos , t->vPos , t->hSize , &t->modeState);
-+ RT_InitCRTC(p , isErt , save);
-+
-+ return TRUE;
-+ }
-+ }
-+ }
-+
-+ /*
-+ * Match not found or tv output disabled
-+ * First parameter is dummy when setting for no tv output, so any mode
-+ * will do (here first mode in table is passed).
-+ */
-+ RT_Init(availableModes , TV_STD_NTSC , isErt , FALSE , t->hPos , t->vPos , t->hSize , &t->modeState);
-+ return FALSE;
-+}
-+
-+/**********************************************************************
-+ *
-+ * theaterOutRestoreMode
-+ *
-+ * Set state of RT to the one defined by last call to theaterOutInit
-+ *
-+ **********************************************************************/
-+
-+void
-+theaterOutRestoreMode(
-+ TheaterOutPtr t,
-+ ScrnInfoPtr pScrn
-+ )
-+{
-+ RTTRACE(("Entering theaterOutRestoreMode\n"));
-+ RT_Restore(t , pScrn , &t->modeState);
-+}
-+
-+/**********************************************************************
-+ *
-+ * theaterOutSetStandard
-+ *
-+ * Set TV output standard
-+ *
-+ * Return value is TRUE when video mode should be set again
-+ *
-+ **********************************************************************/
-+Bool
-+theaterOutSetStandard(
-+ TheaterOutPtr t,
-+ TVStd std
-+ )
-+{
-+ TVStd oldStd = t->standard;
-+
-+ RTTRACE(("Entering theaterOutSetStandard\n"));
-+
-+ if (std >= TV_STD_N_STANDARDS)
-+ std = TV_STD_KEEP_OFF;
-+
-+ t->standard = std;
-+
-+ if (t->compatibleMode)
-+ return oldStd != std;
-+ else
-+ return std != TV_STD_KEEP_OFF && oldStd == TV_STD_KEEP_OFF;
-+}
-+
-+/**********************************************************************
-+ *
-+ * theaterOutGetStandard
-+ *
-+ * Get current TV output standard
-+ *
-+ **********************************************************************/
-+TVStd
-+theaterOutGetStandard(
-+ TheaterOutPtr t
-+ )
-+{
-+ return t->standard;
-+}
-+
-+/**********************************************************************
-+ *
-+ * theaterOutGetCompatMode
-+ *
-+ * Return whether the current mode is compatible with tv output or not
-+ *
-+ **********************************************************************/
-+Bool
-+theaterOutGetCompatMode(
-+ TheaterOutPtr t
-+ )
-+{
-+ return t->compatibleMode;
-+}
-+
-+/**********************************************************************
-+ *
-+ * updateHVPosition
-+ *
-+ * Set hw registers for a new h/v position & h size
-+ *
-+ **********************************************************************/
-+static
-+void
-+updateHVPosition(
-+ TheaterOutPtr t
-+ )
-+{
-+ Bool reloadTable;
-+
-+ reloadTable = computeRestarts(t->currentMode , t->standard , t->hPos , t->vPos , t->hSize , &t->modeState);
-+
-+ if (t->theatre_num < 0)
-+ {
-+ ERT_RestoreRestarts(t , &t->modeState);
-+ ert_write(t , TV_TIMING_CNTL , t->modeState.timing_cntl);
-+
-+ if (reloadTable)
-+ {
-+ ert_write(t,
-+ TV_MASTER_CNTL ,
-+ t->modeState.master_cntl |
-+ VIP_MASTER_CNTL_TV_ASYNC_RST |
-+ VIP_MASTER_CNTL_CRT_ASYNC_RST |
-+ VIP_MASTER_CNTL_RESTART_PHASE_FIX);
-+
-+ restoreTimingTables(t , &t->modeState);
-+
-+ ert_write(t ,
-+ TV_MASTER_CNTL ,
-+ t->modeState.master_cntl);
-+ }
-+ }
-+ else
-+ {
-+ restoreRestarts(t , &t->modeState);
-+ theatre_write(t , VIP_TIMING_CNTL , t->modeState.timing_cntl);
-+
-+ if (reloadTable)
-+ {
-+ theatre_write(t ,
-+ VIP_MASTER_CNTL ,
-+ t->modeState.master_cntl |
-+ VIP_MASTER_CNTL_TV_ASYNC_RST |
-+ VIP_MASTER_CNTL_CRT_ASYNC_RST);
-+
-+ restoreTimingTables(t , &t->modeState);
-+
-+ theatre_write(t ,
-+ VIP_MASTER_CNTL ,
-+ t->modeState.master_cntl);
-+ }
-+ }
-+}
-+
-+/**********************************************************************
-+ *
-+ * theaterOutSetAttr
-+ *
-+ * Set an attribute
-+ *
-+ **********************************************************************/
-+void
-+theaterOutSetAttr(
-+ TheaterOutPtr t,
-+ TheaterOutAttr attr,
-+ int value
-+ )
-+{
-+ switch (attr)
-+ {
-+ case THEATER_OUT_HPOS:
-+ if (value < -MAX_H_POSITION)
-+ t->hPos = -MAX_H_POSITION;
-+ else if (value > MAX_H_POSITION)
-+ t->hPos = MAX_H_POSITION;
-+ else
-+ t->hPos = value;
-+ break;
-+
-+ case THEATER_OUT_VPOS:
-+ if (value < -MAX_V_POSITION)
-+ t->vPos = -MAX_V_POSITION;
-+ else if (value > MAX_V_POSITION)
-+ t->vPos = MAX_V_POSITION;
-+ else
-+ t->vPos = value;
-+ break;
-+
-+ case THEATER_OUT_HSIZE:
-+ if (value < -MAX_H_SIZE)
-+ t->hSize = -MAX_H_SIZE;
-+ else if (value > MAX_H_SIZE)
-+ t->hSize = MAX_H_SIZE;
-+ else
-+ t->hSize = value;
-+ break;
-+
-+ default:
-+ return;
-+ }
-+
-+ if (t->compatibleMode)
-+ updateHVPosition(t);
-+}
-+
-+/**********************************************************************
-+ *
-+ * theaterOutGetAttr
-+ *
-+ * Get an attribute
-+ *
-+ **********************************************************************/
-+int
-+theaterOutGetAttr(
-+ TheaterOutPtr t,
-+ TheaterOutAttr attr
-+ )
-+{
-+ switch (attr)
-+ {
-+ case THEATER_OUT_HPOS:
-+ return t->hPos;
-+
-+ case THEATER_OUT_VPOS:
-+ return t->vPos;
-+
-+ case THEATER_OUT_HSIZE:
-+ return t->hSize;
-+
-+ default:
-+ return 0;
-+ }
-+}
-+
-+/**********************************************************************
-+ *
-+ * theaterOutGetAttrLimits
-+ *
-+ * Get limits for an attribute value
-+ *
-+ **********************************************************************/
-+void
-+theaterOutGetAttrLimits(
-+ TheaterOutPtr t,
-+ TheaterOutAttr attr,
-+ int *maxValue,
-+ int *minValue
-+ )
-+{
-+ switch (attr)
-+ {
-+ case THEATER_OUT_HPOS:
-+ *maxValue = MAX_H_POSITION;
-+ *minValue = -MAX_H_POSITION;
-+ break;
-+
-+ case THEATER_OUT_VPOS:
-+ *maxValue = MAX_V_POSITION;
-+ *minValue = -MAX_V_POSITION;
-+ break;
-+
-+ case THEATER_OUT_HSIZE:
-+ *maxValue = MAX_H_SIZE;
-+ *minValue = -MAX_H_SIZE;
-+ break;
-+
-+ default:
-+ break;
-+ }
-+}
-diff -urN -X /home/zhangle/exec/dontdiff xserver-xorg-video-ati-6.6.3.orig/src/theater_out.h xserver-xorg-video-ati-6.6.3/src/theater_out.h
---- xserver-xorg-video-ati-6.6.3.orig/src/theater_out.h 1970-01-01 08:00:00.000000000 +0800
-+++ xserver-xorg-video-ati-6.6.3/src/theater_out.h 2007-01-08 12:48:05.000000000 +0800
-@@ -0,0 +1,370 @@
-+/*********************************************************************
-+ *
-+ * $Id: theater_out.h,v 1.1.2.2 2004/01/27 22:50:35 fulivi Exp $
-+ *
-+ * Interface file for theater_out module
-+ *
-+ * Copyright (C) 2003 Federico Ulivi
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ * AUTHORS: F.Ulivi
-+ * NOTES:
-+ * $Log: theater_out.h,v $
-+ * Revision 1.1.2.2 2004/01/27 22:50:35 fulivi
-+ * Support for positioning/sizing of image added
-+ *
-+ * Revision 1.1.2.9 2004/01/18 23:01:12 fede
-+ * Functions for get/setting h/v pos/size replaced by
-+ * theaterOutSetAttr/theaterOutGetAttr/theaterOutGetAttrLimits
-+ * Circular inclusion with radeon.h fixed
-+ *
-+ * Revision 1.1.2.8 2004/01/11 21:43:32 fede
-+ * Fixed problem with definition of TVStd
-+ *
-+ * Revision 1.1.2.7 2004/01/05 00:09:59 fede
-+ * Functions for setting/getting H/V position added
-+ * Functions for setting/getting on/off attribute removed
-+ *
-+ * Revision 1.1.2.1 2003/11/26 19:50:10 fulivi
-+ * Support for ERT added
-+ *
-+ * Revision 1.1.2.6 2003/11/25 20:44:00 fede
-+ * TV_STD_KEEP_OFF added
-+ *
-+ * Revision 1.1.2.5 2003/10/14 18:41:32 fede
-+ * forceERT changed to forceVIP
-+ *
-+ * Revision 1.1.2.4 2003/10/11 12:30:30 fede
-+ * Support for ERT added
-+ *
-+ * Revision 1.1 2003/09/28 21:42:37 fulivi
-+ * Theater_out module added
-+ *
-+ * Revision 1.1.2.3 2003/09/28 15:26:09 fede
-+ * Minor aesthetic changes
-+ *
-+ * Revision 1.1.2.1 2003/08/31 13:36:35 fede
-+ * *** empty log message ***
-+ *
-+ *
-+ *********************************************************************/
-+
-+#ifndef _THEATER_OUT_H
-+#define _THEATER_OUT_H
-+
-+/**********************************************************************
-+ *
-+ * TheaterOutPtr
-+ *
-+ * Pointer to TheaterOut struct. Actual definition is in theater_out.c
-+ *
-+ **********************************************************************/
-+typedef struct TheaterOut *TheaterOutPtr;
-+
-+/**********************************************************************
-+ *
-+ * TVStd
-+ *
-+ * Tv standard
-+ *
-+ **********************************************************************/
-+typedef enum
-+ {
-+ TV_STD_NTSC,
-+ TV_STD_PAL,
-+ TV_STD_PAL_M,
-+ TV_STD_PAL_60,
-+ TV_STD_NTSC_J,
-+ TV_STD_PAL_CN,
-+ TV_STD_PAL_N,
-+ TV_STD_KEEP_OFF,
-+ TV_STD_N_STANDARDS /* Must be last */
-+ } TVStd;
-+
-+/**********************************************************************
-+ *
-+ * TheaterOutAttr
-+ *
-+ * Integer-valued attributes of this module
-+ *
-+ **********************************************************************/
-+typedef enum
-+ {
-+ THEATER_OUT_HPOS, /* Horizontal position */
-+ THEATER_OUT_VPOS, /* Vertical position */
-+ THEATER_OUT_HSIZE /* Horizontal size */
-+ } TheaterOutAttr;
-+
-+#ifndef _RADEON_H_
-+#include "radeon.h"
-+#endif
-+
-+/**********************************************************************
-+ *
-+ * detectTheaterOut
-+ *
-+ * Detect presence of a RT chip
-+ *
-+ **********************************************************************/
-+
-+extern
-+TheaterOutPtr
-+detectTheaterOut(
-+ ScrnInfoPtr pScrn,
-+ Bool forceVIP,
-+GENERIC_BUS_Ptr b
-+ );
-+
-+/**********************************************************************
-+ *
-+ * initTheaterOut
-+ *
-+ * Initialization of module
-+ *
-+ * 's' should be the value of TV_Output option (i.e. the initial TV
-+ * standard)
-+ *
-+ **********************************************************************/
-+
-+extern
-+void
-+initTheaterOut(
-+ TheaterOutPtr t,
-+ const char *s
-+ );
-+
-+/**********************************************************************
-+ *
-+ * theaterOutSave
-+ *
-+ * Save current state of RT as initial state (the one that is restored
-+ * when switching back to text mode)
-+ *
-+ **********************************************************************/
-+
-+extern
-+void
-+theaterOutSave(
-+ TheaterOutPtr t,
-+ ScrnInfoPtr pScrn
-+ );
-+
-+/**********************************************************************
-+ *
-+ * theaterOutRestore
-+ *
-+ * Restore state of RT from initial state (the one saved through
-+ * theaterOutSave)
-+ *
-+ **********************************************************************/
-+
-+extern
-+void
-+theaterOutRestore(
-+ TheaterOutPtr t,
-+ ScrnInfoPtr pScrn
-+ );
-+
-+/**********************************************************************
-+ *
-+ * theaterOutInit
-+ *
-+ * Define state for cloning current CRTC mode on TV output
-+ * It works in this way:
-+ * 1. It checks if resolution in "mode" parameter is one of those
-+ * allowing tv output
-+ * 2. If resolution is OK, define RT state according to resolution and
-+ * and current settings (tv standard etc.)
-+ * If resolution is not ok, define RT state to turn tv output off
-+ * 3. If resolution is OK, modify Radeon state to make it correct for
-+ * tv output (this is needed,e.g., to set vertical frequency to 50/60 Hz)
-+ *
-+ * Return value is TRUE when mode is OK for cloning on tv and tv output
-+ * is enabled, FALSE otherwise
-+ *
-+ **********************************************************************/
-+
-+extern
-+Bool
-+theaterOutInit(
-+ TheaterOutPtr t,
-+ DisplayModePtr mode,
-+ RADEONSavePtr save
-+ );
-+
-+/**********************************************************************
-+ *
-+ * theaterOutRestoreMode
-+ *
-+ * Set state of RT to the one defined by last call to theaterOutInit
-+ *
-+ **********************************************************************/
-+
-+extern
-+void
-+theaterOutRestoreMode(
-+ TheaterOutPtr t,
-+ ScrnInfoPtr pScrn
-+ );
-+
-+/**********************************************************************
-+ *
-+ * theaterOutSetStandard
-+ *
-+ * Set TV output standard
-+ *
-+ * Return value is TRUE when video mode should be set again
-+ *
-+ **********************************************************************/
-+
-+extern
-+Bool
-+theaterOutSetStandard(
-+ TheaterOutPtr t,
-+ TVStd std
-+ );
-+
-+/**********************************************************************
-+ *
-+ * theaterOutGetStandard
-+ *
-+ * Get current TV output standard
-+ *
-+ **********************************************************************/
-+extern
-+TVStd
-+theaterOutGetStandard(
-+ TheaterOutPtr t
-+ );
-+
-+/**********************************************************************
-+ *
-+ * theaterOutGetCompatMode
-+ *
-+ * Return whether the current mode is compatible with tv output or not
-+ *
-+ **********************************************************************/
-+extern
-+Bool
-+theaterOutGetCompatMode(
-+ TheaterOutPtr t
-+ );
-+
-+/**********************************************************************
-+ *
-+ * theaterOutSetAttr
-+ *
-+ * Set an attribute
-+ *
-+ **********************************************************************/
-+extern
-+void
-+theaterOutSetAttr(
-+ TheaterOutPtr t,
-+ TheaterOutAttr attr,
-+ int value
-+ );
-+
-+/**********************************************************************
-+ *
-+ * theaterOutGetAttr
-+ *
-+ * Get an attribute
-+ *
-+ **********************************************************************/
-+extern
-+int
-+theaterOutGetAttr(
-+ TheaterOutPtr t,
-+ TheaterOutAttr attr
-+ );
-+
-+/**********************************************************************
-+ *
-+ * theaterOutGetAttrLimits
-+ *
-+ * Get limits for an attribute value
-+ *
-+ **********************************************************************/
-+extern
-+void
-+theaterOutGetAttrLimits(
-+ TheaterOutPtr t,
-+ TheaterOutAttr attr,
-+ int *maxValue,
-+ int *minValue
-+ );
-+
-+/**********************************************************************
-+ *
-+ * THEATER_OUT_SYMBOLS
-+ *
-+ * Symbol list for module loading
-+ *
-+ **********************************************************************/
-+
-+#define THEATER_OUT_SYMBOLS "detectTheaterOut", \
-+ "initTheaterOut", \
-+ "theaterOutSave", \
-+ "theaterOutRestore", \
-+ "theaterOutInit", \
-+ "theaterOutRestoreMode", \
-+ "theaterOutSetStandard", \
-+ "theaterOutGetStandard", \
-+ "theaterOutGetCompatMode", \
-+ "theaterOutSetAttr", \
-+ "theaterOutGetAttr", \
-+ "theaterOutGetAttrLimits"
-+
-+/**********************************************************************
-+ *
-+ * External access to module functions
-+ *
-+ **********************************************************************/
-+
-+#ifdef XFree86LOADER
-+
-+#define xf86_detectTheaterOut ((TheaterOutPtr (*)(ScrnInfoPtr , Bool,GENERIC_BUS_Ptr))LoaderSymbol("detectTheaterOut"))
-+#define xf86_initTheaterOut ((void (*)(TheaterOutPtr , const char*))LoaderSymbol("initTheaterOut"))
-+#define xf86_theaterOutSave ((void (*)(TheaterOutPtr , ScrnInfoPtr))LoaderSymbol("theaterOutSave"))
-+#define xf86_theaterOutRestore ((void (*)(TheaterOutPtr , ScrnInfoPtr))LoaderSymbol("theaterOutRestore"))
-+#define xf86_theaterOutInit ((Bool (*)(TheaterOutPtr , DisplayModePtr , RADEONSavePtr))LoaderSymbol("theaterOutInit"))
-+#define xf86_theaterOutRestoreMode ((void (*)(TheaterOutPtr , ScrnInfoPtr))LoaderSymbol("theaterOutRestoreMode"))
-+#define xf86_theaterOutSetStandard ((Bool (*)(TheaterOutPtr , TVStd))LoaderSymbol("theaterOutSetStandard"))
-+#define xf86_theaterOutGetStandard ((TVStd (*)(TheaterOutPtr))LoaderSymbol("theaterOutGetStandard"))
-+#define xf86_theaterOutGetCompatMode ((Bool (*)(TheaterOutPtr))LoaderSymbol("theaterOutGetCompatMode"))
-+#define xf86_theaterOutSetAttr ((void (*)(TheaterOutPtr , TheaterOutAttr , int))LoaderSymbol("theaterOutSetAttr"))
-+#define xf86_theaterOutGetAttr ((int (*)(TheaterOutPtr , TheaterOutAttr))LoaderSymbol("theaterOutGetAttr"))
-+#define xf86_theaterOutGetAttrLimits ((void (*)(TheaterOutPtr , TheaterOutAttr , int * , int *))LoaderSymbol("theaterOutGetAttrLimits"))
-+
-+#else
-+
-+#define xf86_detectTheaterOut detectTheaterOut
-+#define xf86_initTheaterOut initTheaterOut
-+#define xf86_theaterOutSave theaterOutSave
-+#define xf86_theaterOutRestore theaterOutRestore
-+#define xf86_theaterOutInit theaterOutInit
-+#define xf86_theaterOutRestoreMode theaterOutRestoreMode
-+#define xf86_theaterOutSetStandard theaterOutSetStandard
-+#define xf86_theaterOutGetStandard theaterOutGetStandard
-+#define xf86_theaterOutGetCompatMode theaterOutGetCompatMode
-+#define xf86_theaterOutSetAttr theaterOutSetAttr
-+#define xf86_theaterOutGetAttr theaterOutGetAttr
-+#define xf86_theaterOutGetAttrLimits theaterOutGetAttrLimits
-+
-+#endif /* XFree86LOADER */
-+
-+#endif /* _THEATER_OUT_H */
-diff -urN -X /home/zhangle/exec/dontdiff xserver-xorg-video-ati-6.6.3.orig/src/theater_out_module.c xserver-xorg-video-ati-6.6.3/src/theater_out_module.c
---- xserver-xorg-video-ati-6.6.3.orig/src/theater_out_module.c 1970-01-01 08:00:00.000000000 +0800
-+++ xserver-xorg-video-ati-6.6.3/src/theater_out_module.c 2007-01-08 12:48:04.000000000 +0800
-@@ -0,0 +1,45 @@
-+#ifdef HAVE_CONFIG_H
-+#include "config.h"
-+#endif
-+
-+#include "xf86Module.h"
-+
-+static MODULESETUPPROTO(theaterOutSetup);
-+
-+static
-+XF86ModuleVersionInfo
-+theaterVersRec =
-+{
-+ "theater_out", /* modname */
-+ MODULEVENDORSTRING, /* vendor */
-+ MODINFOSTRING1, /* _modinfo1_ */
-+ MODINFOSTRING2, /* _modinfo2_ */
-+ XORG_VERSION_CURRENT, /* xf86version */
-+ 1, /* majorversion */
-+ 0, /* minorversion */
-+ 0, /* patchlevel */
-+ ABI_CLASS_VIDEODRV, /* abiclass */
-+ ABI_VIDEODRV_VERSION, /* abiversion */
-+ MOD_CLASS_NONE, /* moduleclass */
-+ { 0 , 0 , 0 , 0 } /* checksum */
-+};
-+
-+_X_EXPORT XF86ModuleData
-+theater_outModuleData =
-+ {
-+ &theaterVersRec,
-+ theaterOutSetup,
-+ NULL
-+ };
-+
-+static
-+pointer
-+theaterOutSetup(
-+ pointer module,
-+ pointer opts,
-+ int *errmaj,
-+ int *errmin
-+ )
-+{
-+ return (pointer)1;
-+}
-diff -urN -X /home/zhangle/exec/dontdiff xserver-xorg-video-ati-6.6.3.orig/src/tvo_set/Imakefile xserver-xorg-video-ati-6.6.3/src/tvo_set/Imakefile
---- xserver-xorg-video-ati-6.6.3.orig/src/tvo_set/Imakefile 1970-01-01 08:00:00.000000000 +0800
-+++ xserver-xorg-video-ati-6.6.3/src/tvo_set/Imakefile 2007-01-08 12:48:04.000000000 +0800
-@@ -0,0 +1,38 @@
-+@@ -0,0 +1,37 @@
-+XCOMM $Id: Imakefile,v 1.1.2.1 2004/01/27 22:55:40 fulivi Exp $
-+XCOMM
-+XCOMM Imakefile for tvo_set utility
-+XCOMM
-+XCOMM Copyright (C) 2004 Federico Ulivi
-+XCOMM
-+XCOMM This program is free software; you can redistribute it and/or modify
-+XCOMM it under the terms of the GNU General Public License as published by
-+XCOMM the Free Software Foundation; either version 2 of the License, or
-+XCOMM (at your option) any later version.
-+XCOMM
-+XCOMM This program is distributed in the hope that it will be useful,
-+XCOMM but WITHOUT ANY WARRANTY; without even the implied warranty of
-+XCOMM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+XCOMM GNU General Public License for more details.
-+XCOMM
-+XCOMM You should have received a copy of the GNU General Public License
-+XCOMM along with this program; if not, write to the Free Software
-+XCOMM Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+XCOMM
-+XCOMM AUTHORS: F.Ulivi
-+XCOMM NOTES:
-+XCOMM $Log: Imakefile,v $
-+XCOMM Revision 1.1.2.1 2004/01/27 22:55:40 fulivi
-+XCOMM Initial release
-+XCOMM
-+XCOMM Revision 1.1.2.1 2004/01/25 23:07:31 fede
-+XCOMM *** empty log message ***
-+XCOMM
-+XCOMM
-+
-+ DEPLIBS = $(DEPXVLIB) $(DEPXLIB)
-+LOCAL_LIBRARIES = $(XVLIB) $(XLIB)
-+ SRCS = tvo_set.c
-+ OBJS = tvo_set.o
-+
-+ComplexProgramTargetNoMan(tvo_set)
-diff -urN -X /home/zhangle/exec/dontdiff xserver-xorg-video-ati-6.6.3.orig/src/tvo_set/tvo_set.c xserver-xorg-video-ati-6.6.3/src/tvo_set/tvo_set.c
---- xserver-xorg-video-ati-6.6.3.orig/src/tvo_set/tvo_set.c 1970-01-01 08:00:00.000000000 +0800
-+++ xserver-xorg-video-ati-6.6.3/src/tvo_set/tvo_set.c 2007-01-08 12:48:04.000000000 +0800
-@@ -0,0 +1,472 @@
-+/*********************************************************************
-+ *
-+ * $Id: tvo_set.c,v 1.1.2.1 2004/01/27 22:55:40 fulivi Exp $
-+ *
-+ * Main (and only) module of tvo_set utility.
-+ * The purpose of this utility is to set various parameters of
-+ * tv output module.
-+ *
-+ * Copyright (C) 2004 Federico Ulivi
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ * AUTHORS: F.Ulivi
-+ * NOTES:
-+ * $Log: tvo_set.c,v $
-+ * Revision 1.1.2.1 2004/01/27 22:55:40 fulivi
-+ * Initial release
-+ *
-+ * Revision 1.1.2.2 2004/01/25 23:07:47 fede
-+ * GPL notice added
-+ *
-+ * Revision 1.1.2.1 2004/01/25 15:09:42 fede
-+ * First version
-+ *
-+ *
-+ *********************************************************************/
-+
-+#include <X11/X.h>
-+#include <X11/Xlib.h>
-+#include <X11/extensions/Xvlib.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <errno.h>
-+#include <string.h>
-+
-+/**********************************************************************
-+ *
-+ * program_name
-+ *
-+ **********************************************************************/
-+static
-+const char *program_name;
-+
-+/**********************************************************************
-+ *
-+ * Action
-+ *
-+ **********************************************************************/
-+typedef enum
-+ {
-+ ACT_FULL_DUMP,
-+ ACT_SET,
-+ ACT_INC,
-+ ACT_DEC,
-+ ACT_ZERO
-+ } Action;
-+
-+/**********************************************************************
-+ *
-+ * attrNames / attrData
-+ *
-+ **********************************************************************/
-+typedef struct
-+{
-+ Atom atom;
-+ int minValue;
-+ int maxValue;
-+} AttrData;
-+
-+typedef struct
-+{
-+ char* extName;
-+ char* attrName;
-+ char* description;
-+} AttrName;
-+
-+static
-+const AttrName attrNames[] =
-+ {
-+ { "hpos" , "XV_TVO_HPOS" , "Horizontal position" },
-+ { "vpos" , "XV_TVO_VPOS" , "Vertical position" },
-+ { "hsize" , "XV_TVO_HSIZE" , "Horizontal size" },
-+ { "std" , "XV_TVO_STANDARD" , "TV Standard" }
-+ };
-+
-+#define N_ATTRS (sizeof(attrNames) / sizeof(attrNames[ 0 ]))
-+/*
-+ * Index of TV standard attribute
-+ */
-+#define STD_ATTR 3
-+
-+static
-+AttrData attrData[ N_ATTRS ];
-+
-+/**********************************************************************
-+ *
-+ * stdNames
-+ *
-+ **********************************************************************/
-+static
-+const char *stdNames[] =
-+ {
-+ "NTSC",
-+ "PAL",
-+ "PAL-M",
-+ "PAL-60",
-+ "NTSC-J",
-+ "PAL-CN",
-+ "PAL-N",
-+ "OFF"
-+ };
-+#define N_STDS (sizeof(stdNames) / sizeof(stdNames[ 0 ]))
-+
-+/**********************************************************************
-+ *
-+ * scanAttributes
-+ *
-+ **********************************************************************/
-+static
-+Bool
-+subScanAttributes(
-+ Display *dpy,
-+ XvAttribute *pAttributes,
-+ int nAttributes
-+ )
-+{
-+ unsigned i;
-+ unsigned j;
-+ Atom theAtom;
-+
-+ for (i = 0; i < N_ATTRS; i++)
-+ {
-+ const char* name = attrNames[ i ].attrName;
-+
-+ for (j = 0; j < nAttributes; j++)
-+ {
-+ if (strcmp(name , pAttributes[ j ].name) == 0)
-+ {
-+ attrData[ i ].minValue = pAttributes[ j ].min_value;
-+ attrData[ i ].maxValue = pAttributes[ j ].max_value;
-+ if ((pAttributes[ j ].flags & (XvGettable | XvSettable)) != (XvGettable | XvSettable))
-+ return False;
-+
-+ theAtom = XInternAtom(dpy , name , True);
-+ if (theAtom == None)
-+ return False;
-+
-+ attrData[ i ].atom = theAtom;
-+
-+ break;
-+ }
-+ }
-+ if (j == nAttributes)
-+ return False;
-+ }
-+
-+ return True;
-+}
-+
-+static
-+Bool
-+scanAttributes(
-+ Display *dpy,
-+ XvPortID portID
-+ )
-+{
-+ XvAttribute *pAttributes;
-+ int nAttributes;
-+ Bool res = False;
-+
-+ if ((pAttributes = XvQueryPortAttributes(dpy , portID , &nAttributes)) == 0)
-+ return False;
-+
-+ if (nAttributes > 0)
-+ res = subScanAttributes(dpy , pAttributes , nAttributes);
-+
-+ XFree(pAttributes);
-+ return res;
-+}
-+
-+/**********************************************************************
-+ *
-+ * getAttribute
-+ *
-+ **********************************************************************/
-+static
-+void
-+getAttribute(
-+ Display *dpy,
-+ XvPortID portID,
-+ int attribute,
-+ int *value
-+ )
-+{
-+ if (XvGetPortAttribute(dpy ,
-+ portID ,
-+ attrData[ attribute ].atom ,
-+ value) == Success)
-+ return;
-+
-+ fprintf(stderr , "%s: Unable to get value of attribute %s\n" , program_name , attrNames[ attribute ].attrName);
-+ exit(2);
-+}
-+
-+/**********************************************************************
-+ *
-+ * setAttribute
-+ *
-+ **********************************************************************/
-+static
-+void
-+setAttribute(
-+ Display *dpy,
-+ XvPortID portID,
-+ int attribute,
-+ int value
-+ )
-+{
-+ int dummy;
-+
-+ if (XvSetPortAttribute(dpy , portID , attrData[ attribute ].atom , value) != Success)
-+ {
-+ fprintf(stderr , "%s: Unable to set value of attribute %s\n" , program_name , attrNames[ attribute ].attrName);
-+ exit(2);
-+ }
-+
-+ getAttribute(dpy , portID , attribute , &dummy);
-+}
-+
-+/**********************************************************************
-+ *
-+ * parseAttribute
-+ *
-+ **********************************************************************/
-+static
-+int
-+parseAttribute(
-+ const char *name
-+ )
-+{
-+ int i;
-+
-+ for (i = 0; i < N_ATTRS; i++)
-+ if (strcasecmp(name , attrNames[ i ].extName) == 0)
-+ return i;
-+
-+ return -1;
-+}
-+
-+/**********************************************************************
-+ *
-+ * parseStd
-+ *
-+ **********************************************************************/
-+static
-+int
-+parseStd(
-+ const char *name
-+ )
-+{
-+ int i;
-+
-+ for (i = 0; i < N_STDS; i++)
-+ if (strcasecmp(name , stdNames[ i ]) == 0)
-+ return i;
-+
-+ return -1;
-+}
-+
-+/**********************************************************************
-+ *
-+ * printUsage
-+ *
-+ **********************************************************************/
-+static
-+void
-+printUsage(void)
-+{
-+ unsigned i;
-+
-+ fprintf(stderr , "Usage:\n"
-+ "%s [-display host:dpy] [<cmd> <attribute> [<value>]]\n\n" , program_name);
-+ fprintf(stderr , "When <cmd> is absent, a dump of all attributes is done\n");
-+ fprintf(stderr , "Allowed <cmd>s:\n"
-+ "set <attribute> <value> Set <attribute> to <value>\n"
-+ "inc <attribute> Increment <attribute> by 1\n"
-+ "dec <attribute> Decrement <attribute> by 1\n"
-+ "zero <attribute> Set <attribute> to 0\n"
-+ "\nAllowed <attribute>s:\n");
-+
-+ for (i = 0; i < N_ATTRS; i++)
-+ fprintf(stderr , "%-6s %s\n" , attrNames[ i ].extName , attrNames[ i ].description);
-+
-+ fprintf(stderr , "\nFor %s attribute, both the numeric value and the name of the standard are valid.\n" ,
-+ attrNames[ STD_ATTR ].extName);
-+
-+ fprintf(stderr , "\nAllowed standards:\n");
-+
-+ for (i = 0; i < N_STDS; i++)
-+ fprintf(stderr , "%d %s\n" , i , stdNames[ i ]);
-+
-+ exit(1);
-+}
-+
-+/**********************************************************************
-+ *
-+ * main
-+ *
-+ **********************************************************************/
-+int
-+main(
-+ int argc,
-+ char *argv[]
-+ )
-+{
-+ Action action;
-+ Display *dpy;
-+ char *disname = NULL;
-+ unsigned argIdx = 1;
-+ int attribute;
-+ int value;
-+ unsigned ver, rev, eventB, reqB, errorB;
-+ XvAdaptorInfo *ainfo;
-+ unsigned nadaptors;
-+ unsigned i;
-+ XvPortID portID;
-+
-+ program_name = argv[ 0 ];
-+
-+ if (argc >= 3 &&
-+ strcmp(argv[ argIdx ] , "-display") == 0)
-+ {
-+ argIdx++;
-+ disname = argv[ argIdx++ ];
-+ }
-+
-+ if (argIdx < argc)
-+ {
-+ if (strcasecmp(argv[ argIdx ] , "set") == 0)
-+ action = ACT_SET;
-+ else if (strcasecmp(argv[ argIdx ] , "inc") == 0)
-+ action = ACT_INC;
-+ else if (strcasecmp(argv[ argIdx ] , "dec") == 0)
-+ action = ACT_DEC;
-+ else if (strcasecmp(argv[ argIdx ] , "zero") == 0)
-+ action = ACT_ZERO;
-+ else
-+ printUsage();
-+
-+ argIdx++;
-+ if (argIdx >= argc)
-+ printUsage();
-+
-+ if ((attribute = parseAttribute(argv[ argIdx ])) < 0)
-+ {
-+ fprintf(stderr , "%s: Unrecognized attribute name (%s)\n" , program_name , argv[ argIdx ]);
-+ printUsage();
-+ }
-+ argIdx++;
-+
-+ if (action == ACT_SET)
-+ {
-+ if (argIdx >= argc)
-+ printUsage();
-+ if (sscanf(argv[ argIdx ] , "%d" , &value) != 1 &&
-+ (attribute != STD_ATTR || (value = parseStd(argv[ argIdx ])) < 0))
-+ printUsage();
-+ }
-+ }
-+ else
-+ action = ACT_FULL_DUMP;
-+
-+ /*
-+ * Open display
-+ */
-+ if (!(dpy = XOpenDisplay(disname)))
-+ {
-+ fprintf(stderr , "%s: Unable to open display %s\n" , program_name ,
-+ (disname != NULL) ? disname : XDisplayName(NULL));
-+ return -1;
-+ }
-+
-+ if (XvQueryExtension(dpy, &ver, &rev, &reqB, &eventB, &errorB) != Success)
-+ {
-+ fprintf(stderr , "%s: No XV Extension on %s\n" , program_name ,
-+ (disname != NULL) ? disname : XDisplayName(NULL));
-+ return 0;
-+ }
-+
-+ /*
-+ * Use screen #0
-+ */
-+ XvQueryAdaptors(dpy , RootWindow(dpy , 0) , &nadaptors , &ainfo);
-+
-+ if (!nadaptors)
-+ {
-+ fprintf(stderr , "%s: No adaptors present\n" , program_name);
-+ return 0;
-+ }
-+
-+ /*
-+ * Use adaptor #0
-+ */
-+ portID = ainfo[ 0 ].base_id;
-+ if (!scanAttributes(dpy , portID))
-+ {
-+ fprintf(stderr , "%s: Invalid attributes in XV adaptor\n" , program_name);
-+ return 0;
-+ }
-+
-+ switch (action)
-+ {
-+ case ACT_FULL_DUMP:
-+ for(i = 0; i < nadaptors; i++)
-+ {
-+ printf("Adaptor #%d: \"%s\"\n" , i , ainfo[ i ].name);
-+ printf(" number of ports : %d\n" , ainfo[ i ].num_ports);
-+ printf(" port base : %d\n" , ainfo[ i ].base_id);
-+ printf(" number of adaptors: %u\n" , ainfo[ i ].num_adaptors);
-+ }
-+ for (i = 0; i < N_ATTRS; i++)
-+ {
-+ getAttribute(dpy , portID , i , &value);
-+ if (i == STD_ATTR)
-+ if (value < 0 || value >= N_STDS)
-+ printf ("%s = ??? (%d)\n" , attrNames[ i ].extName , value);
-+ else
-+ printf ("%s = %s (%d)\n" , attrNames[ i ].extName , stdNames[ value ] , value);
-+ else
-+ printf("%s = %d\n" , attrNames[ i ].extName , value);
-+ }
-+ break;
-+
-+ case ACT_SET:
-+ setAttribute(dpy , portID , attribute , value);
-+ break;
-+
-+ case ACT_INC:
-+ getAttribute(dpy , portID , attribute , &value);
-+ value++;
-+ if (value > attrData[ attribute ].maxValue)
-+ value = attrData[ attribute ].minValue;
-+ setAttribute(dpy , portID , attribute , value);
-+ break;
-+
-+ case ACT_DEC:
-+ getAttribute(dpy , portID , attribute , &value);
-+ value--;
-+ if (value < attrData[ attribute ].minValue)
-+ value = attrData[ attribute ].maxValue;
-+ setAttribute(dpy , portID , attribute , value);
-+ break;
-+
-+ case ACT_ZERO:
-+ setAttribute(dpy , portID , attribute , 0);
-+ break;
-+ }
-+
-+ return 0;
-+}
diff --git a/x11-drivers/xf86-video-ati/metadata.xml b/x11-drivers/xf86-video-ati/metadata.xml
deleted file mode 100644
index 01c4c00..0000000
--- a/x11-drivers/xf86-video-ati/metadata.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
-<pkgmetadata>
-<herd>x11</herd>
-</pkgmetadata>
diff --git a/x11-drivers/xf86-video-ati/xf86-video-ati-6.6.3.ebuild b/x11-drivers/xf86-video-ati/xf86-video-ati-6.6.3.ebuild
deleted file mode 100644
index 5fa3bb0..0000000
--- a/x11-drivers/xf86-video-ati/xf86-video-ati-6.6.3.ebuild
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright 1999-2006 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/x11-drivers/xf86-video-ati/xf86-video-ati-6.6.3.ebuild,v 1.10 2006/10/21 14:42:41 exg Exp $
-
-# Must be before x-modular eclass is inherited
-#SNAPSHOT="yes"
-
-inherit x-modular
-
-DESCRIPTION="ATI video driver"
-
-KEYWORDS="alpha amd64 arm ia64 ppc ppc64 sh sparc x86 ~x86-fbsd ~mips"
-IUSE="dri"
-
-RDEPEND=">=x11-base/xorg-server-1.0.99"
-DEPEND="${RDEPEND}
- x11-proto/fontsproto
- x11-proto/randrproto
- x11-proto/videoproto
- x11-proto/xextproto
- x11-proto/xineramaproto
- x11-proto/xf86miscproto
- x11-proto/xproto
- dri? ( x11-proto/glproto
- x11-proto/xf86driproto
- >=x11-libs/libdrm-2 )"
-
-CONFIGURE_OPTIONS="$(use_enable dri)"
-
-PATCHES="${FILESDIR}/${P}-loongson.patch"
-
-src_unpack() {
- x-modular_src_unpack
- eautoreconf
- elibtoolize
-}
-
-pkg_setup() {
- if use dri && ! built_with_use x11-base/xorg-server dri; then
- die "Build x11-base/xorg-server with USE=dri."
- fi
-}