aboutsummaryrefslogtreecommitdiffstats
path: root/main/xf86-video-r128
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2015-05-04 11:09:09 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2015-05-04 12:02:40 +0000
commitc4cf189ef5e8683089d865bbbb297e290baf1460 (patch)
treeb197e4ef45ec231863e38d6d36809f0262a40c64 /main/xf86-video-r128
parentd6cd9c18ea657224cf7c0ade77b1136da1795b01 (diff)
downloadaports-c4cf189ef5e8683089d865bbbb297e290baf1460.tar.bz2
aports-c4cf189ef5e8683089d865bbbb297e290baf1460.tar.xz
main/xf86-video-r128: upgrade to 6.10.0
Diffstat (limited to 'main/xf86-video-r128')
-rw-r--r--main/xf86-video-r128/APKBUILD18
-rw-r--r--main/xf86-video-r128/git-fixes.patch8804
2 files changed, 6 insertions, 8816 deletions
diff --git a/main/xf86-video-r128/APKBUILD b/main/xf86-video-r128/APKBUILD
index b0d7d9a783..249ea55fad 100644
--- a/main/xf86-video-r128/APKBUILD
+++ b/main/xf86-video-r128/APKBUILD
@@ -1,7 +1,7 @@
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=xf86-video-r128
-pkgver=6.9.2
-pkgrel=3
+pkgver=6.10.0
+pkgrel=0
pkgdesc="ATI Rage128 video driver"
url="http://xorg.freedesktop.org/"
arch="all"
@@ -14,20 +14,17 @@ makedepends="xorg-server-dev libxi-dev fontsproto randrproto
util-macros autoconf automake libtool
"
-source="http://xorg.freedesktop.org/releases/individual/driver/$pkgname-$pkgver.tar.bz2
- git-fixes.patch"
+source="http://xorg.freedesktop.org/releases/individual/driver/$pkgname-$pkgver.tar.bz2"
_builddir="$srcdir/$pkgname-$pkgver"
prepare() {
cd "$_builddir"
- update_config_sub || return 1
for i in $source; do
case $i in
*.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
esac
done
- autoreconf -fi || return 1
}
build() {
@@ -48,9 +45,6 @@ package() {
rm "$pkgdir"/usr/lib/xorg/modules/*/*.la || return 1
install -Dm644 COPYING "$pkgdir"/usr/share/licenses/$pkgname/COPYING
}
-md5sums="2e906d856a1c477bde000254b142445c xf86-video-r128-6.9.2.tar.bz2
-4f1b508b64dd0435f1ab85c043bd531d git-fixes.patch"
-sha256sums="8b2d295f1842d07304a75da1cfb9bf139b320a6539970eaf8d5ecc010cd36ee0 xf86-video-r128-6.9.2.tar.bz2
-2139a1d3b12950f452b72f4d9b916143814789df5080cee03a1e0955421b1808 git-fixes.patch"
-sha512sums="7f8dc174ff8cff6d109a62610b255c3f3a99e6fbdc38373da3efb88a960a25fe3124dbdb6a9379de6b45edaedb3aae44a183a5604f80bbb488dbb98faebc2fb3 xf86-video-r128-6.9.2.tar.bz2
-00836925ffd54a7e51b4e9e4e29fddc6d5bf587ed456e758f44681a7f89b0d6a4b46b166ff22627407fc3d97d49ed4e2d313d4ec67990b9f249f8ee734ccd4e5 git-fixes.patch"
+md5sums="e24c8e50e545adcbe12edb031dab4948 xf86-video-r128-6.10.0.tar.bz2"
+sha256sums="80d531a07168230a408b88809a5440cfd48f9098666d12702d0012148a0d353d xf86-video-r128-6.10.0.tar.bz2"
+sha512sums="1221e4a8e744557356eb7fd05d950e857f60eeab5f81707542d1446a983701a68838ee165a511242c67fa4e974ced7d8af12002ec581c636065a8c95325146ed xf86-video-r128-6.10.0.tar.bz2"
diff --git a/main/xf86-video-r128/git-fixes.patch b/main/xf86-video-r128/git-fixes.patch
deleted file mode 100644
index c37227d9c9..0000000000
--- a/main/xf86-video-r128/git-fixes.patch
+++ /dev/null
@@ -1,8804 +0,0 @@
-From d5da29d2ff94c80c8edefd6ccf5fd05fc6018870 Mon Sep 17 00:00:00 2001
-From: Tormod Volden <debian.tormod@gmail.com>
-Date: Fri, 25 Oct 2013 20:31:05 +0200
-Subject: Do not use int10 or VBE on powerpc
-
-VBE was already skipped in the normal path, but not when setting
-the PROBE_DETECT flag.
-
-Should avoid bus error seen in
-http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=622606 and
-http://lists.x.org/archives/xorg/2012-February/053969.html
-
-Signed-off-by: Tormod Volden <debian.tormod@gmail.com>
-Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
----
- src/r128_driver.c | 7 +++++--
- 1 file changed, 5 insertions(+), 2 deletions(-)
-
-diff --git a/src/r128_driver.c b/src/r128_driver.c
-index 72d9e3c..6acdf2d 100644
---- a/src/r128_driver.c
-+++ b/src/r128_driver.c
-@@ -1758,8 +1758,8 @@ static Bool R128PreInitCursor(ScrnInfoPtr pScrn)
- static Bool R128PreInitInt10(ScrnInfoPtr pScrn, xf86Int10InfoPtr *ppInt10)
- {
- R128InfoPtr info = R128PTR(pScrn);
--#if 1 && !defined(__alpha__)
-- /* int10 is broken on some Alphas */
-+#if !defined(__powerpc__) && !defined(__alpha__)
-+ /* int10 is broken on some Alphas and powerpc */
- if (xf86LoadSubModule(pScrn, "int10")) {
- xf86DrvMsg(pScrn->scrnIndex,X_INFO,"initializing int10\n");
- *ppInt10 = xf86InitInt10(info->pEnt->index);
-@@ -1890,11 +1890,14 @@ static void
- R128ProbeDDC(ScrnInfoPtr pScrn, int indx)
- {
- vbeInfoPtr pVbe;
-+
-+#if !defined(__powerpc__) && !defined(__alpha__) && !defined(__sparc__)
- if (xf86LoadSubModule(pScrn, "vbe")) {
- pVbe = VBEInit(NULL,indx);
- ConfiguredMonitor = vbeDoEDID(pVbe, NULL);
- vbeFree(pVbe);
- }
-+#endif
- }
-
- /* R128PreInit is called once at server startup. */
---
-2.2.2
-
-
-From d757fe10b9ce9493ef3cf854bc03088366aa7256 Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Fri, 22 Nov 2013 22:55:59 -0800
-Subject: Drop dependence on xf86PciInfo.h
-
-It is about time we stop using this deprecated file and include pciids
-locally.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
-Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
----
- src/r128_dri.c | 1 -
- src/r128_driver.c | 1 -
- src/r128_probe.c | 2 --
- src/r128_probe.h | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
- 4 files changed, 50 insertions(+), 4 deletions(-)
-
-diff --git a/src/r128_dri.c b/src/r128_dri.c
-index 67e8d1d..ff7bbc2 100644
---- a/src/r128_dri.c
-+++ b/src/r128_dri.c
-@@ -53,7 +53,6 @@
-
- /* X and server generic header files */
- #include "xf86.h"
--#include "xf86PciInfo.h"
- #include "windowstr.h"
-
- #include "shadowfb.h"
-diff --git a/src/r128_driver.c b/src/r128_driver.c
-index 6acdf2d..04a4537 100644
---- a/src/r128_driver.c
-+++ b/src/r128_driver.c
-@@ -84,7 +84,6 @@
- /* X and server generic header files */
- #include "xf86.h"
- #include "xf86_OSproc.h"
--#include "xf86PciInfo.h"
- #if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 6
- #include "xf86RAC.h"
- #include "xf86Resources.h"
-diff --git a/src/r128_probe.c b/src/r128_probe.c
-index 7f1fbda..12e0c1c 100644
---- a/src/r128_probe.c
-+++ b/src/r128_probe.c
-@@ -43,8 +43,6 @@
- #include "atipcirename.h"
-
- #include "xf86.h"
--#include "xf86PciInfo.h"
--
-
- #if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 6
- #include "xf86Resources.h"
-diff --git a/src/r128_probe.h b/src/r128_probe.h
-index 41fc0e4..7b55e71 100644
---- a/src/r128_probe.h
-+++ b/src/r128_probe.h
-@@ -38,6 +38,56 @@
-
- #include "xf86str.h"
-
-+/* Chip definitions */
-+#define PCI_VENDOR_ATI 0x1002
-+#define PCI_CHIP_RAGE128LE 0x4C45
-+#define PCI_CHIP_RAGE128LF 0x4C46
-+#define PCI_CHIP_RAGE128MF 0x4D46
-+#define PCI_CHIP_RAGE128ML 0x4D4C
-+#define PCI_CHIP_RAGE128PA 0x5041
-+#define PCI_CHIP_RAGE128PB 0x5042
-+#define PCI_CHIP_RAGE128PC 0x5043
-+#define PCI_CHIP_RAGE128PD 0x5044
-+#define PCI_CHIP_RAGE128PE 0x5045
-+#define PCI_CHIP_RAGE128PF 0x5046
-+#define PCI_CHIP_RAGE128PG 0x5047
-+#define PCI_CHIP_RAGE128PH 0x5048
-+#define PCI_CHIP_RAGE128PI 0x5049
-+#define PCI_CHIP_RAGE128PJ 0x504A
-+#define PCI_CHIP_RAGE128PK 0x504B
-+#define PCI_CHIP_RAGE128PL 0x504C
-+#define PCI_CHIP_RAGE128PM 0x504D
-+#define PCI_CHIP_RAGE128PN 0x504E
-+#define PCI_CHIP_RAGE128PO 0x504F
-+#define PCI_CHIP_RAGE128PP 0x5050
-+#define PCI_CHIP_RAGE128PQ 0x5051
-+#define PCI_CHIP_RAGE128PR 0x5052
-+#define PCI_CHIP_RAGE128PS 0x5053
-+#define PCI_CHIP_RAGE128PT 0x5054
-+#define PCI_CHIP_RAGE128PU 0x5055
-+#define PCI_CHIP_RAGE128PV 0x5056
-+#define PCI_CHIP_RAGE128PW 0x5057
-+#define PCI_CHIP_RAGE128PX 0x5058
-+#define PCI_CHIP_RAGE128RE 0x5245
-+#define PCI_CHIP_RAGE128RF 0x5246
-+#define PCI_CHIP_RAGE128RG 0x5247
-+#define PCI_CHIP_RAGE128RK 0x524B
-+#define PCI_CHIP_RAGE128RL 0x524C
-+#define PCI_CHIP_RAGE128SE 0x5345
-+#define PCI_CHIP_RAGE128SF 0x5346
-+#define PCI_CHIP_RAGE128SG 0x5347
-+#define PCI_CHIP_RAGE128SH 0x5348
-+#define PCI_CHIP_RAGE128SK 0x534B
-+#define PCI_CHIP_RAGE128SL 0x534C
-+#define PCI_CHIP_RAGE128SM 0x534D
-+#define PCI_CHIP_RAGE128SN 0x534E
-+#define PCI_CHIP_RAGE128TF 0x5446
-+#define PCI_CHIP_RAGE128TL 0x544C
-+#define PCI_CHIP_RAGE128TR 0x5452
-+#define PCI_CHIP_RAGE128TS 0x5453
-+#define PCI_CHIP_RAGE128TT 0x5454
-+#define PCI_CHIP_RAGE128TU 0x5455
-+
- extern DriverRec R128;
-
- typedef struct
---
-2.2.2
-
-
-From 35dc7faf9f87332f51ff0a6aa866a56eb017a950 Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Thu, 21 Nov 2013 22:09:57 -0800
-Subject: Do not disable gouraud shading for a render op
-
-The EXA Composite hooks should not overwrite any register values
-expected by DRI. Initial testing of the EXA support revealed that
-R128_WINDOW_XY_OFFSET is one register where we have to be careful.
-However, it was mostly tested using glxgears which does not stress the
-driver very much. Going through the various 3D screensavers one by one
-reveals a bug where certain models turn green if compositing is enabled.
-
-It seems that if we slightly alter the values passed to R128_SETUP_CNTL
-and R128_PM4_VC_FPU_SETUP, the 3D driver will be happy and compositing
-will still work. The proper way would be to constantly save and restore
-register values but this showed poor performance when dragging 3D
-windows across the screen.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
-Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
----
- src/r128_exa_render.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/src/r128_exa_render.c b/src/r128_exa_render.c
-index f00536e..cb9f929 100644
---- a/src/r128_exa_render.c
-+++ b/src/r128_exa_render.c
-@@ -350,7 +350,7 @@ do { \
- R128_TEX_MAP_ALPHA_IN_TEXTURE | \
- R128_TEX_CACHE_LINE_SIZE_4QW); \
- OUT_RING_REG(R128_SETUP_CNTL, \
-- R128_COLOR_SOLID_COLOR | \
-+ R128_COLOR_GOURAUD | \
- R128_PRIM_TYPE_TRI | \
- R128_TEXTURE_ST_MULT_W | \
- R128_STARTING_VERTEX_1 | \
-@@ -358,9 +358,9 @@ do { \
- R128_SUB_PIX_4BITS); \
- OUT_RING_REG(R128_PM4_VC_FPU_SETUP, \
- R128_FRONT_DIR_CCW | \
-- R128_BACKFACE_CULL | \
-+ R128_BACKFACE_SOLID | \
- R128_FRONTFACE_SOLID | \
-- R128_FPU_COLOR_SOLID | \
-+ R128_FPU_COLOR_GOURAUD | \
- R128_FPU_SUB_PIX_4BITS | \
- R128_FPU_MODE_3D | \
- R128_TRAP_BITS_DISABLE | \
---
-2.2.2
-
-
-From 9eb693640136bc8bcbe706d642519b4eb23286d4 Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Wed, 27 Nov 2013 18:14:43 -0800
-Subject: Only declare PCITAG if we need it
-
-If libpciaccess is available, we do not need to declare the deprecated
-PciTag member because it will not be used.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
-Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
----
- src/r128.h | 2 ++
- src/r128_driver.c | 7 ++++---
- 2 files changed, 6 insertions(+), 3 deletions(-)
-
-diff --git a/src/r128.h b/src/r128.h
-index 90071b4..ee0b1d4 100644
---- a/src/r128.h
-+++ b/src/r128.h
-@@ -301,7 +301,9 @@ struct r128_2d_state {
- typedef struct {
- EntityInfoPtr pEnt;
- pciVideoPtr PciInfo;
-+#ifndef XSERVER_LIBPCIACCESS
- PCITAG PciTag;
-+#endif
- int Chipset;
- Bool Primary;
-
-diff --git a/src/r128_driver.c b/src/r128_driver.c
-index 04a4537..0a0b82b 100644
---- a/src/r128_driver.c
-+++ b/src/r128_driver.c
-@@ -1957,9 +1957,6 @@ Bool R128PreInit(ScrnInfoPtr pScrn, int flags)
- }
-
- info->PciInfo = xf86GetPciInfoForEntity(info->pEnt->index);
-- info->PciTag = pciTag(PCI_DEV_BUS(info->PciInfo),
-- PCI_DEV_DEV(info->PciInfo),
-- PCI_DEV_FUNC(info->PciInfo));
-
- xf86DrvMsg(pScrn->scrnIndex, X_INFO,
- "PCI bus %d card %d func %d\n",
-@@ -1968,6 +1965,10 @@ Bool R128PreInit(ScrnInfoPtr pScrn, int flags)
- PCI_DEV_FUNC(info->PciInfo));
-
- #ifndef XSERVER_LIBPCIACCESS
-+ info->PciTag = pciTag(PCI_DEV_BUS(info->PciInfo),
-+ PCI_DEV_DEV(info->PciInfo),
-+ PCI_DEV_FUNC(info->PciInfo));
-+
- if (xf86RegisterResources(info->pEnt->index, 0, ResNone)) goto fail;
- if (xf86SetOperatingState(resVga, info->pEnt->index, ResUnusedOpr)) goto fail;
-
---
-2.2.2
-
-
-From 5ef5812a7a272aa08543cfd9b633f33c35e34dbd Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Tue, 4 Mar 2014 01:43:00 -0800
-Subject: Remove overuse of COMPOSITE_SETUP()
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-COMPOSITE_SETUP() involves expensive register writes so
-R128EnterServer() should call it once when there are 3D windows and 0
-times when there are no 3D windows.
-
-Instead the code was calling it once when there were no 3D windows and
-arbitrarily many times when there were 3D windows.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
-Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
----
- src/r128_dri.c | 6 +++++-
- src/r128_exa_render.c | 7 +------
- 2 files changed, 6 insertions(+), 7 deletions(-)
-
-diff --git a/src/r128_dri.c b/src/r128_dri.c
-index ff7bbc2..2c905a4 100644
---- a/src/r128_dri.c
-+++ b/src/r128_dri.c
-@@ -308,7 +308,11 @@ static void R128EnterServer(ScreenPtr pScreen)
- #endif
- #ifdef USE_EXA
- if (info->ExaDriver) exaMarkSync(pScreen);
-- info->state_2d.composite_setup = FALSE;
-+ /* EXA and DRI are fighting over control of the texture hardware.
-+ * That means we need to setup compositing when the server wakes
-+ * up if a 3D app is running.
-+ */
-+ if (info->have3DWindows) info->state_2d.composite_setup = FALSE;
- #endif
- }
-
-diff --git a/src/r128_exa_render.c b/src/r128_exa_render.c
-index cb9f929..f00daf7 100644
---- a/src/r128_exa_render.c
-+++ b/src/r128_exa_render.c
-@@ -458,12 +458,7 @@ R128CCEPrepareComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
-
- if (!info->state_2d.composite_setup) {
- COMPOSITE_SETUP();
-- /* DRI and EXA are fighting over control of the texture hardware.
-- * That means we need to set up the compositing hardware every time
-- * while a 3D app is running and once after it closes.
-- */
-- if (!info->have3DWindows)
-- info->state_2d.composite_setup = TRUE;
-+ info->state_2d.composite_setup = TRUE;
- }
-
- /* We cannot guarantee that this register will stay zero - DRI needs it too. */
---
-2.2.2
-
-
-From 4efc87f41d770c753ddf7f54fe334b6dbd7daf79 Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Mon, 28 Apr 2014 21:26:44 -0700
-Subject: Fix ScreenInit with noAccel
-
-Now that EXA is on by default, we must remember to turn it off again if
-acceleration is disabled.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
----
- src/r128_driver.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/r128_driver.c b/src/r128_driver.c
-index 0a0b82b..f425c3b 100644
---- a/src/r128_driver.c
-+++ b/src/r128_driver.c
-@@ -2314,6 +2314,7 @@ Bool R128ScreenInit(SCREEN_INIT_ARGS_DECL)
- miSetPixmapDepths ();
-
- noAccel = xf86ReturnOptValBool(info->Options, OPTION_NOACCEL, FALSE);
-+ if (noAccel) info->useEXA = FALSE;
-
- #ifdef R128DRI
- /* Setup DRI after visuals have been
---
-2.2.2
-
-
-From 3ed5035074540785f820906529fcce3148e0b387 Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Wed, 2 Jul 2014 02:18:48 -0700
-Subject: Port to RandR
-
-This rearranges the r128 code to use the Crtc and Output interfaces
-which should make the driver easier to maintain in the long run. User
-visible changes include DDC detection working in more cases and the
-ability to have multiple monitors with DRI.
-
-Some choices have been made to conserve memory. Modes can be switched up
-to the highest resolution in xorg.conf. If this is 1024x768 for example,
-the front buffer will be 1024x768 instead of 1024x1024. This means 90
-and 270 degree rotations will not work. However, scalings, reflection
-and 180 degree rotations can be set with the xrandr client program.
-Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=75629
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
-Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
----
- configure.ac | 2 +-
- src/Makefile.am | 3 +-
- src/r128.h | 48 +-
- src/r128_crtc.c | 476 ++++++++++++++++++++
- src/r128_cursor.c | 294 ++++++------
- src/r128_driver.c | 1287 +++++++++++------------------------------------------
- src/r128_output.c | 465 +++++++++++++++++++
- src/r128_probe.c | 1 -
- src/r128_probe.h | 79 ++++
- src/r128_video.c | 17 +-
- 10 files changed, 1479 insertions(+), 1193 deletions(-)
- create mode 100644 src/r128_crtc.c
- create mode 100644 src/r128_output.c
-
-diff --git a/configure.ac b/configure.ac
-index 56554ec..3cc3113 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -76,7 +76,7 @@ XORG_DRIVER_CHECK_EXT(XF86MISC, xf86miscproto)
- XORG_DRIVER_CHECK_EXT(DPMSExtension, xextproto)
-
- # Obtain compiler/linker options for the driver dependencies
--PKG_CHECK_MODULES(XORG, [xorg-server >= 1.2 xproto fontsproto $REQUIRED_MODULES])
-+PKG_CHECK_MODULES(XORG, [xorg-server >= 1.3 xproto fontsproto $REQUIRED_MODULES])
- PKG_CHECK_MODULES(XEXT, [xextproto >= 7.0.99.1],
- HAVE_XEXTPROTO_71="yes"; AC_DEFINE(HAVE_XEXTPROTO_71, 1, [xextproto 7.1 available]),
- HAVE_XEXTPROTO_71="no")
-diff --git a/src/Makefile.am b/src/Makefile.am
-index 23e6c49..e4618ea 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -41,7 +41,8 @@ r128_drv_la_LDFLAGS = -module -avoid-version
- r128_drv_ladir = @moduledir@/drivers
- r128_drv_la_SOURCES = \
- r128_accel.c r128_cursor.c r128_dga.c r128_driver.c \
-- r128_video.c r128_misc.c r128_probe.c $(R128_EXA_SRCS) $(R128_DRI_SRCS)
-+ r128_video.c r128_misc.c r128_crtc.c r128_output.c r128_probe.c \
-+ $(R128_EXA_SRCS) $(R128_DRI_SRCS)
-
- EXTRA_DIST = \
- compat-api.h \
-diff --git a/src/r128.h b/src/r128.h
-index ee0b1d4..fe757f8 100644
---- a/src/r128.h
-+++ b/src/r128.h
-@@ -74,6 +74,7 @@
- #endif
-
- #include "fb.h"
-+#include "xf86Crtc.h"
-
- #include "compat-api.h"
- #include "atipcirename.h"
-@@ -260,16 +261,6 @@ typedef struct {
- DisplayModePtr mode;
- } R128FBLayout;
-
--typedef enum
--{
-- MT_NONE,
-- MT_CRT,
-- MT_LCD,
-- MT_DFP,
-- MT_CTV,
-- MT_STV
--} R128MonitorType;
--
- #ifdef USE_EXA
- struct r128_2d_state {
- Bool in_use;
-@@ -523,10 +514,10 @@ typedef struct {
-
- Bool isDFP;
- Bool isPro2;
-- I2CBusPtr pI2CBus;
-- CARD32 DDCReg;
-+ Bool DDC;
-
- Bool VGAAccess;
-+ R128BIOSConnector BiosConnector[R128_MAX_BIOS_CONNECTOR];
-
- /****** Added for dualhead support *******************/
- BOOL HasCRTC2; /* M3/M4 */
-@@ -562,6 +553,39 @@ extern int R128MinBits(int val);
-
- extern void R128InitVideo(ScreenPtr pScreen);
-
-+extern void R128InitCommonRegisters(R128SavePtr save, R128InfoPtr info);
-+extern void R128InitFPRegisters(R128SavePtr orig, R128SavePtr save, DisplayModePtr mode, R128InfoPtr info);
-+extern Bool R128InitCrtcBase(xf86CrtcPtr crtc, R128SavePtr save, int x, int y);
-+extern Bool R128InitCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr save, DisplayModePtr mode, R128InfoPtr info);
-+extern void R128InitPLLRegisters(ScrnInfoPtr pScrn, R128SavePtr save, R128PLLPtr pll, double dot_clock);
-+extern Bool R128InitDDARegisters(ScrnInfoPtr pScrn, R128SavePtr save, R128PLLPtr pll, R128InfoPtr info, DisplayModePtr mode);
-+extern Bool R128InitCrtc2Base(xf86CrtcPtr crtc, R128SavePtr save, int x, int y);
-+extern Bool R128InitCrtc2Registers(ScrnInfoPtr pScrn, R128SavePtr save, DisplayModePtr mode, R128InfoPtr info);
-+extern void R128InitPLL2Registers(ScrnInfoPtr pScrn, R128SavePtr save, R128PLLPtr pll, double dot_clock);
-+extern Bool R128InitDDA2Registers(ScrnInfoPtr pScrn, R128SavePtr save, R128PLLPtr pll, R128InfoPtr info, DisplayModePtr mode);
-+extern void R128RestoreCommonRegisters(ScrnInfoPtr pScrn, R128SavePtr restore);
-+extern void R128RestoreFPRegisters(ScrnInfoPtr pScrn, R128SavePtr restore);
-+extern void R128RestoreCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr restore);
-+extern void R128RestorePLLRegisters(ScrnInfoPtr pScrn, R128SavePtr restore);
-+extern void R128RestoreDDARegisters(ScrnInfoPtr pScrn, R128SavePtr restore);
-+extern void R128RestoreCrtc2Registers(ScrnInfoPtr pScrn, R128SavePtr restore);
-+extern void R128RestorePLL2Registers(ScrnInfoPtr pScrn, R128SavePtr restore);
-+extern void R128RestoreDDA2Registers(ScrnInfoPtr pScrn, R128SavePtr restore);
-+
-+extern void r128_crtc_set_cursor_colors(xf86CrtcPtr crtc, int bg, int fg);
-+extern void r128_crtc_set_cursor_position(xf86CrtcPtr crtc, int x, int y);
-+extern void r128_crtc_show_cursor(xf86CrtcPtr crtc);
-+extern void r128_crtc_hide_cursor(xf86CrtcPtr crtc);
-+extern void r128_crtc_load_cursor_image(xf86CrtcPtr crtc, unsigned char *src);
-+
-+extern Bool R128SetupConnectors(ScrnInfoPtr pScrn);
-+extern Bool R128AllocateControllers(ScrnInfoPtr pScrn, int mask);
-+extern void R128Blank(ScrnInfoPtr pScrn);
-+extern void R128Unblank(ScrnInfoPtr pScrn);
-+extern void R128DPMSSetOn(xf86OutputPtr output);
-+extern void R128DPMSSetOff(xf86OutputPtr output);
-+extern DisplayModePtr R128ProbeOutputModes(xf86OutputPtr output);
-+
- #ifdef R128DRI
- extern Bool R128DRIScreenInit(ScreenPtr pScreen);
- extern void R128DRICloseScreen(ScreenPtr pScreen);
-diff --git a/src/r128_crtc.c b/src/r128_crtc.c
-new file mode 100644
-index 0000000..35e1fee
---- /dev/null
-+++ b/src/r128_crtc.c
-@@ -0,0 +1,476 @@
-+/*
-+ * Copyright 2000 ATI Technologies Inc., Markham, Ontario, and
-+ * VA Linux Systems Inc., Fremont, California.
-+ *
-+ * All Rights Reserved.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining
-+ * a copy of this software and associated documentation files (the
-+ * "Software"), to deal in the Software without restriction, including
-+ * without limitation on the rights to use, copy, modify, merge,
-+ * publish, distribute, sublicense, and/or sell copies of the Software,
-+ * and to permit persons to whom the Software is furnished to do so,
-+ * subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice (including the
-+ * next paragraph) shall be included in all copies or substantial
-+ * portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-+ * NON-INFRINGEMENT. IN NO EVENT SHALL ATI, VA LINUX SYSTEMS AND/OR
-+ * THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+ * DEALINGS IN THE SOFTWARE.
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+#include "config.h"
-+#endif
-+
-+#include <string.h>
-+#include <stdio.h>
-+
-+#include "xf86.h"
-+#include "xf86Modes.h"
-+
-+#include "r128.h"
-+#include "r128_probe.h"
-+#include "r128_reg.h"
-+
-+static void r128_crtc_load_lut(xf86CrtcPtr crtc);
-+
-+static void r128_crtc_dpms(xf86CrtcPtr crtc, int mode)
-+{
-+ int mask;
-+ ScrnInfoPtr pScrn = crtc->scrn;
-+ R128InfoPtr info = R128PTR(pScrn);
-+ unsigned char *R128MMIO = info->MMIO;
-+ R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
-+
-+ /* XXX: The HSYNC and VSYNC bits for CRTC2 don't exist on the r128? */
-+ mask = r128_crtc->crtc_id ? R128_CRTC2_DISP_DIS : (R128_CRTC_DISPLAY_DIS | R128_CRTC_HSYNC_DIS | R128_CRTC_VSYNC_DIS);
-+
-+ switch (mode) {
-+ case DPMSModeOn:
-+ if (r128_crtc->crtc_id) {
-+ OUTREGP(R128_CRTC2_GEN_CNTL, 0, ~mask);
-+ } else {
-+ OUTREGP(R128_CRTC_EXT_CNTL, 0, ~mask);
-+ }
-+ break;
-+ case DPMSModeStandby:
-+ if (r128_crtc->crtc_id) {
-+ OUTREGP(R128_CRTC2_GEN_CNTL, R128_CRTC2_DISP_DIS, ~mask);
-+ } else {
-+ OUTREGP(R128_CRTC_EXT_CNTL, (R128_CRTC_DISPLAY_DIS | R128_CRTC_HSYNC_DIS), ~mask);
-+ }
-+ break;
-+ case DPMSModeSuspend:
-+ if (r128_crtc->crtc_id) {
-+ OUTREGP(R128_CRTC2_GEN_CNTL, R128_CRTC2_DISP_DIS, ~mask);
-+ } else {
-+ OUTREGP(R128_CRTC_EXT_CNTL, (R128_CRTC_DISPLAY_DIS | R128_CRTC_VSYNC_DIS), ~mask);
-+ }
-+ break;
-+ case DPMSModeOff:
-+ if (r128_crtc->crtc_id) {
-+ OUTREGP(R128_CRTC2_GEN_CNTL, mask, ~mask);
-+ } else {
-+ OUTREGP(R128_CRTC_EXT_CNTL, mask, ~mask);
-+ }
-+ break;
-+ }
-+
-+ if (mode != DPMSModeOff)
-+ r128_crtc_load_lut(crtc);
-+}
-+
-+void r128_crtc_load_lut(xf86CrtcPtr crtc)
-+{
-+ ScrnInfoPtr pScrn = crtc->scrn;
-+ R128InfoPtr info = R128PTR(pScrn);
-+ unsigned char *R128MMIO = info->MMIO;
-+ R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
-+ int i;
-+
-+ if (!crtc->enabled)
-+ return;
-+
-+ PAL_SELECT(r128_crtc->crtc_id);
-+
-+ for (i = 0; i < 256; i++) {
-+ OUTPAL(i, r128_crtc->lut_r[i], r128_crtc->lut_g[i], r128_crtc->lut_b[i]);
-+ }
-+}
-+
-+static Bool r128_crtc_mode_fixup(xf86CrtcPtr crtc, DisplayModePtr mode, DisplayModePtr adjusted_mode)
-+{
-+ return TRUE;
-+}
-+
-+static void r128_crtc_mode_prepare(xf86CrtcPtr crtc)
-+{
-+ r128_crtc_dpms(crtc, DPMSModeOff);
-+}
-+
-+static void r128_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode, DisplayModePtr adjusted_mode, int x, int y)
-+{
-+ ScrnInfoPtr pScrn = crtc->scrn;
-+ xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
-+ R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
-+ R128InfoPtr info = R128PTR(pScrn);
-+ R128OutputType otype = OUTPUT_NONE;
-+
-+ double dot_clock = adjusted_mode->Clock / 1000.0;
-+ int i;
-+
-+ if (r128_crtc->cursor_offset) r128_crtc_hide_cursor(crtc);
-+ xf86PrintModeline(pScrn->scrnIndex, adjusted_mode);
-+ R128InitCommonRegisters(&info->ModeReg, info);
-+
-+ for (i = 0; i < xf86_config->num_output; i++) {
-+ xf86OutputPtr output = xf86_config->output[i];
-+ R128OutputPrivatePtr r128_output = output->driver_private;
-+
-+ if (output->crtc == crtc)
-+ otype = r128_output->type;
-+ }
-+
-+ switch (r128_crtc->crtc_id) {
-+ case 0:
-+ R128InitCrtcRegisters(pScrn, &info->ModeReg, adjusted_mode, info);
-+ R128InitCrtcBase(crtc, &info->ModeReg, x, y);
-+ if (dot_clock) {
-+ R128InitPLLRegisters(pScrn, &info->ModeReg, &info->pll, dot_clock);
-+ R128InitDDARegisters(pScrn, &info->ModeReg, &info->pll, info, adjusted_mode);
-+ } else {
-+ info->ModeReg.ppll_ref_div = info->SavedReg.ppll_ref_div;
-+ info->ModeReg.ppll_div_3 = info->SavedReg.ppll_div_3;
-+ info->ModeReg.htotal_cntl = info->SavedReg.htotal_cntl;
-+ info->ModeReg.dda_config = info->SavedReg.dda_config;
-+ info->ModeReg.dda_on_off = info->SavedReg.dda_on_off;
-+ }
-+ break;
-+ case 1:
-+ R128InitCrtc2Registers(pScrn, &info->ModeReg, adjusted_mode, info);
-+ R128InitCrtc2Base(crtc, &info->ModeReg, x, y);
-+ if (dot_clock) {
-+ R128InitPLL2Registers(pScrn, &info->ModeReg, &info->pll, dot_clock);
-+ R128InitDDA2Registers(pScrn, &info->ModeReg, &info->pll, info, adjusted_mode);
-+ }
-+ break;
-+ }
-+
-+ if (otype == OUTPUT_DVI || otype == OUTPUT_LVDS)
-+ R128InitFPRegisters(&info->SavedReg, &info->ModeReg, adjusted_mode, info);
-+ R128RestoreCommonRegisters(pScrn, &info->ModeReg);
-+
-+ switch (r128_crtc->crtc_id) {
-+ case 0:
-+ R128RestoreDDARegisters(pScrn, &info->ModeReg);
-+ R128RestoreCrtcRegisters(pScrn, &info->ModeReg);
-+ R128RestorePLLRegisters(pScrn, &info->ModeReg);
-+ break;
-+ case 1:
-+ R128RestoreDDA2Registers(pScrn, &info->ModeReg);
-+ R128RestoreCrtc2Registers(pScrn, &info->ModeReg);
-+ R128RestorePLL2Registers(pScrn, &info->ModeReg);
-+ break;
-+ }
-+
-+ if (otype == OUTPUT_DVI || otype == OUTPUT_LVDS)
-+ R128RestoreFPRegisters(pScrn, &info->ModeReg);
-+
-+ /* XXX: InitFPRegisters looks similar to radeon's InitRMXRegisters so
-+ * maybe it should be called from mode_set in the output code.
-+ */
-+ if (r128_crtc->cursor_offset) r128_crtc_show_cursor(crtc);
-+}
-+
-+static void r128_crtc_mode_commit(xf86CrtcPtr crtc)
-+{
-+ r128_crtc_dpms(crtc, DPMSModeOn);
-+}
-+
-+static void r128_crtc_gamma_set(xf86CrtcPtr crtc, CARD16 *red, CARD16 *green, CARD16 *blue, int size)
-+{
-+ R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
-+ int i;
-+
-+ for (i = 0; i < 256; i++) {
-+ r128_crtc->lut_r[i] = red[i] >> 8;
-+ r128_crtc->lut_g[i] = green[i] >> 8;
-+ r128_crtc->lut_b[i] = blue[i] >> 8;
-+ }
-+
-+ r128_crtc_load_lut(crtc);
-+}
-+
-+static Bool r128_crtc_lock(xf86CrtcPtr crtc)
-+{
-+ ScrnInfoPtr pScrn = crtc->scrn;
-+ ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
-+ R128InfoPtr info = R128PTR(pScrn);
-+
-+#ifdef HAVE_XAA_H
-+ if (info->accel) info->accel->Sync(pScrn);
-+#endif
-+#ifdef USE_EXA
-+ if (info->ExaDriver) exaWaitSync(pScreen);
-+#endif
-+
-+ return FALSE;
-+}
-+
-+static void r128_crtc_unlock(xf86CrtcPtr crtc)
-+{
-+ ScrnInfoPtr pScrn = crtc->scrn;
-+ ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
-+ R128InfoPtr info = R128PTR(pScrn);
-+
-+#ifdef HAVE_XAA_H
-+ if (info->accel) info->accel->Sync(pScrn);
-+#endif
-+#ifdef USE_EXA
-+ if (info->ExaDriver) exaWaitSync(pScreen);
-+#endif
-+}
-+
-+#ifdef HAVE_XAA_H
-+static FBLinearPtr r128_xf86AllocateOffscreenLinear(ScreenPtr pScreen, int length, int granularity,
-+ MoveLinearCallbackProcPtr moveCB,
-+ RemoveLinearCallbackProcPtr removeCB,
-+ pointer privData)
-+{
-+ FBLinearPtr linear;
-+ int max_size;
-+
-+ linear = xf86AllocateOffscreenLinear(pScreen, length, granularity, moveCB, removeCB, privData);
-+ if (linear != NULL) return linear;
-+
-+ /* The above allocation did not succeed, so purge unlocked stuff and try again. */
-+ xf86QueryLargestOffscreenLinear(pScreen, &max_size, granularity, PRIORITY_EXTREME);
-+
-+ if (max_size < length) return NULL;
-+ xf86PurgeUnlockedOffscreenAreas(pScreen);
-+
-+ linear = xf86AllocateOffscreenLinear(pScreen, length, granularity, moveCB, removeCB, privData);
-+ return linear;
-+}
-+#endif
-+
-+static void *r128_crtc_shadow_allocate(xf86CrtcPtr crtc, int width, int height)
-+{
-+ ScrnInfoPtr pScrn = crtc->scrn;
-+ ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
-+ R128InfoPtr info = R128PTR(pScrn);
-+
-+ R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
-+ unsigned long rotate_offset = 0;
-+ unsigned long rotate_pitch;
-+ int cpp = pScrn->bitsPerPixel / 8;
-+ int align = 4096;
-+ int size;
-+
-+ rotate_pitch = pScrn->displayWidth * cpp;
-+ size = rotate_pitch * height;
-+
-+#ifdef USE_EXA
-+ if (info->ExaDriver) {
-+ assert(r128_crtc->rotate_mem_exa == NULL);
-+ r128_crtc->rotate_mem_exa = exaOffscreenAlloc(pScreen, size, align, TRUE, NULL, NULL);
-+
-+ if (r128_crtc->rotate_mem_exa == NULL) {
-+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-+ "Couldn't allocate shadow memory for rotated CRTC\n");
-+ return NULL;
-+ }
-+
-+ rotate_offset = r128_crtc->rotate_mem_exa->offset;
-+ }
-+#endif
-+#ifdef HAVE_XAA_H
-+ if (info->accel) {
-+ size = (size + cpp - 1) / cpp;
-+ align = (align + cpp - 1) / cpp;
-+
-+ assert(r128_crtc->rotate_mem_xaa == NULL);
-+ r128_crtc->rotate_mem_xaa = r128_xf86AllocateOffscreenLinear(pScreen, size, align, NULL, NULL, NULL);
-+
-+ if (r128_crtc->rotate_mem_exa == NULL) {
-+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-+ "Couldn't allocate shadow memory for rotated CRTC\n");
-+ return NULL;
-+ }
-+
-+ rotate_offset = r128_crtc->rotate_mem_xaa->offset * cpp;
-+ }
-+#endif
-+
-+ /* If allocations failed or if there was no accel. */
-+ if (rotate_offset == 0)
-+ return NULL;
-+
-+ return info->FB + rotate_offset;
-+}
-+
-+static PixmapPtr r128_crtc_shadow_create(xf86CrtcPtr crtc, void *data, int width, int height)
-+{
-+ ScrnInfoPtr pScrn = crtc->scrn;
-+ PixmapPtr rotate_pixmap;
-+ unsigned long rotate_pitch;
-+ int cpp = pScrn->bitsPerPixel / 8;
-+
-+ if (!data) data = r128_crtc_shadow_allocate(crtc, width, height);
-+
-+ rotate_pitch = pScrn->displayWidth * cpp;
-+ rotate_pixmap = GetScratchPixmapHeader(xf86ScrnToScreen(pScrn),
-+ width, height,
-+ pScrn->depth,
-+ pScrn->bitsPerPixel,
-+ rotate_pitch,
-+ data);
-+
-+ if (rotate_pixmap == NULL) {
-+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-+ "Couldn't allocate shadow memory for rotated CRTC\n");
-+ return NULL;
-+ }
-+
-+ return rotate_pixmap;
-+}
-+
-+static void r128_crtc_shadow_destroy(xf86CrtcPtr crtc, PixmapPtr rotate_pixmap, void *data)
-+{
-+ ScrnInfoPtr pScrn = crtc->scrn;
-+ ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
-+ R128InfoPtr info = R128PTR(pScrn);
-+
-+ R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
-+
-+ if (rotate_pixmap) FreeScratchPixmapHeader(rotate_pixmap);
-+
-+ if (data) {
-+#ifdef USE_EXA
-+ if (info->ExaDriver && r128_crtc->rotate_mem_exa != NULL) {
-+ exaOffscreenFree(pScreen, r128_crtc->rotate_mem_exa);
-+ r128_crtc->rotate_mem_exa = NULL;
-+ }
-+#endif
-+#ifdef HAVE_XAA_H
-+ if (info->accel) {
-+ xf86FreeOffscreenLinear(r128_crtc->rotate_mem_xaa);
-+ r128_crtc->rotate_mem_xaa = NULL;
-+ }
-+#endif
-+ }
-+}
-+
-+static const xf86CrtcFuncsRec r128_crtc_funcs = {
-+ .dpms = r128_crtc_dpms,
-+ .save = NULL,
-+ .restore = NULL,
-+ .mode_fixup = r128_crtc_mode_fixup,
-+ .prepare = r128_crtc_mode_prepare,
-+ .mode_set = r128_crtc_mode_set,
-+ .commit = r128_crtc_mode_commit,
-+ .gamma_set = r128_crtc_gamma_set,
-+ .lock = r128_crtc_lock,
-+ .unlock = r128_crtc_unlock,
-+ .shadow_create = r128_crtc_shadow_create,
-+ .shadow_allocate = r128_crtc_shadow_allocate,
-+ .shadow_destroy = r128_crtc_shadow_destroy,
-+ .set_cursor_colors = r128_crtc_set_cursor_colors,
-+ .set_cursor_position = r128_crtc_set_cursor_position,
-+ .show_cursor = r128_crtc_show_cursor,
-+ .hide_cursor = r128_crtc_hide_cursor,
-+ .load_cursor_image = r128_crtc_load_cursor_image,
-+ .destroy = NULL,
-+};
-+
-+Bool R128AllocateControllers(ScrnInfoPtr pScrn, int mask)
-+{
-+ R128EntPtr pR128Ent = R128EntPriv(pScrn);
-+ R128InfoPtr info = R128PTR(pScrn);
-+
-+ if (mask & 1) {
-+ if (pR128Ent->Controller[0])
-+ return TRUE;
-+
-+ pR128Ent->pCrtc[0] = xf86CrtcCreate(pScrn, &r128_crtc_funcs);
-+ if (!pR128Ent->pCrtc[0])
-+ return FALSE;
-+
-+ pR128Ent->Controller[0] = xnfcalloc(sizeof(R128CrtcPrivateRec), 1);
-+ if (!pR128Ent->Controller[0])
-+ return FALSE;
-+
-+ pR128Ent->pCrtc[0]->driver_private = pR128Ent->Controller[0];
-+ pR128Ent->Controller[0]->crtc_id = 0;
-+ }
-+
-+ if (mask & 2) {
-+ if (!info->HasCRTC2)
-+ return TRUE;
-+
-+ pR128Ent->pCrtc[1] = xf86CrtcCreate(pScrn, &r128_crtc_funcs);
-+ if (!pR128Ent->pCrtc[1])
-+ return FALSE;
-+
-+ pR128Ent->Controller[1] = xnfcalloc(sizeof(R128CrtcPrivateRec), 1);
-+ if (!pR128Ent->Controller[1]) {
-+ free(pR128Ent->Controller[0]);
-+ return FALSE;
-+ }
-+
-+ pR128Ent->pCrtc[1]->driver_private = pR128Ent->Controller[1];
-+ pR128Ent->Controller[1]->crtc_id = 1;
-+ }
-+
-+ return TRUE;
-+}
-+
-+void R128Blank(ScrnInfoPtr pScrn)
-+{
-+ xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
-+ xf86OutputPtr output;
-+ xf86CrtcPtr crtc;
-+ int o, c;
-+
-+ for (c = 0; c < xf86_config->num_crtc; c++) {
-+ crtc = xf86_config->crtc[c];
-+ for (o = 0; o < xf86_config->num_output; o++) {
-+ output = xf86_config->output[o];
-+ if (output->crtc != crtc)
-+ continue;
-+
-+ output->funcs->dpms(output, DPMSModeOff);
-+ }
-+ crtc->funcs->dpms(crtc, DPMSModeOff);
-+ }
-+}
-+
-+void R128Unblank(ScrnInfoPtr pScrn)
-+{
-+ xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
-+ xf86OutputPtr output;
-+ xf86CrtcPtr crtc;
-+ int o, c;
-+
-+ for (c = 0; c < xf86_config->num_crtc; c++) {
-+ crtc = xf86_config->crtc[c];
-+ if (!crtc->enabled)
-+ continue;
-+ crtc->funcs->dpms(crtc, DPMSModeOn);
-+ for (o = 0; o < xf86_config->num_output; o++) {
-+ output = xf86_config->output[o];
-+ if (output->crtc != crtc)
-+ continue;
-+
-+ output->funcs->dpms(output, DPMSModeOn);
-+ }
-+ }
-+}
-diff --git a/src/r128_cursor.c b/src/r128_cursor.c
-index b76913c..ad6752f 100644
---- a/src/r128_cursor.c
-+++ b/src/r128_cursor.c
-@@ -59,6 +59,9 @@
- #include "exa.h"
- #endif
-
-+#define CURSOR_WIDTH 64
-+#define CURSOR_HEIGHT 64
-+
- #if X_BYTE_ORDER == X_BIG_ENDIAN
- #define P_SWAP32( a , b ) \
- ((char *)a)[0] = ((char *)b)[3]; \
-@@ -73,84 +76,121 @@
- ((char *)a)[3] = ((char *)b)[2]
- #endif
-
-+void r128_crtc_show_cursor(xf86CrtcPtr crtc)
-+{
-+ ScrnInfoPtr pScrn = crtc->scrn;
-+ R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
-+ R128InfoPtr info = R128PTR(pScrn);
-+ unsigned char *R128MMIO = info->MMIO;
-+ int crtc_id = r128_crtc->crtc_id;
-+
-+ switch (crtc_id) {
-+ case 0:
-+ OUTREGP(R128_CRTC_GEN_CNTL, R128_CRTC_CUR_EN, ~R128_CRTC_CUR_EN);
-+ break;
-+ case 1:
-+ OUTREGP(R128_CRTC2_GEN_CNTL, R128_CRTC2_CUR_EN, ~R128_CRTC2_CUR_EN);
-+ break;
-+ default:
-+ return;
-+ }
-+}
-
--/* Set cursor foreground and background colors. */
--static void R128SetCursorColors(ScrnInfoPtr pScrn, int bg, int fg)
-+void r128_crtc_hide_cursor(xf86CrtcPtr crtc)
- {
-- R128InfoPtr info = R128PTR(pScrn);
-+ ScrnInfoPtr pScrn = crtc->scrn;
-+ R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
-+ R128InfoPtr info = R128PTR(pScrn);
- unsigned char *R128MMIO = info->MMIO;
-+ int crtc_id = r128_crtc->crtc_id;
-
-- if(info->IsSecondary)
-- {
-+ switch (crtc_id) {
-+ case 0:
-+ OUTREGP(R128_CRTC_GEN_CNTL, 0, ~R128_CRTC_CUR_EN);
-+ break;
-+ case 1:
-+ OUTREGP(R128_CRTC2_GEN_CNTL, 0, ~R128_CRTC2_CUR_EN);
-+ break;
-+ default:
-+ return;
-+ }
-+}
-+
-+void r128_crtc_set_cursor_colors(xf86CrtcPtr crtc, int bg, int fg)
-+{
-+ ScrnInfoPtr pScrn = crtc->scrn;
-+ R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
-+ R128InfoPtr info = R128PTR(pScrn);
-+ unsigned char *R128MMIO = info->MMIO;
-+ int crtc_id = r128_crtc->crtc_id;
-+
-+ switch (crtc_id) {
-+ case 0:
-+ OUTREG(R128_CUR_CLR0, bg);
-+ OUTREG(R128_CUR_CLR1, fg);
-+ break;
-+ case 1:
- OUTREG(R128_CUR2_CLR0, bg);
- OUTREG(R128_CUR2_CLR1, fg);
-- }
-- else
-- {
-- OUTREG(R128_CUR_CLR0, bg);
-- OUTREG(R128_CUR_CLR1, fg);
-+ break;
-+ default:
-+ return;
- }
- }
-
--/* Set cursor position to (x,y) with offset into cursor bitmap at
-- (xorigin,yorigin). */
--static void R128SetCursorPosition(ScrnInfoPtr pScrn, int x, int y)
-+void r128_crtc_set_cursor_position (xf86CrtcPtr crtc, int x, int y)
- {
-- R128InfoPtr info = R128PTR(pScrn);
-- unsigned char *R128MMIO = info->MMIO;
-- xf86CursorInfoPtr cursor = info->cursor;
-- int xorigin = 0;
-- int yorigin = 0;
-- int total_y = pScrn->frameY1 - pScrn->frameY0;
--
-- if (x < 0) xorigin = -x;
-- if (y < 0) yorigin = -y;
-- if (y > total_y) y = total_y;
-- if (info->Flags & V_DBLSCAN) y *= 2;
-- if (xorigin >= cursor->MaxWidth) xorigin = cursor->MaxWidth - 1;
-- if (yorigin >= cursor->MaxHeight) yorigin = cursor->MaxHeight - 1;
--
-- if(!info->IsSecondary)
-- {
-- OUTREG(R128_CUR_HORZ_VERT_OFF, R128_CUR_LOCK | (xorigin << 16) | yorigin);
-- OUTREG(R128_CUR_HORZ_VERT_POSN, (R128_CUR_LOCK
-- | ((xorigin ? 0 : x) << 16)
-- | (yorigin ? 0 : y)));
-- OUTREG(R128_CUR_OFFSET, info->cursor_start + yorigin * 16);
-- }
-- else
-- {
-- OUTREG(R128_CUR2_HORZ_VERT_OFF, (R128_CUR2_LOCK
-- | (xorigin << 16)
-- | yorigin));
-- OUTREG(R128_CUR2_HORZ_VERT_POSN, (R128_CUR2_LOCK
-- | ((xorigin ? 0 : x) << 16)
-- | (yorigin ? 0 : y)));
-- OUTREG(R128_CUR2_OFFSET,
-- info->cursor_start + pScrn->fbOffset + yorigin * 16);
-+ ScrnInfoPtr pScrn = crtc->scrn;
-+ R128InfoPtr info = R128PTR(pScrn);
-+ R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
-+ unsigned char *R128MMIO = info->MMIO;
-+ int crtc_id = r128_crtc->crtc_id;
-+
-+ int xorigin = 0, yorigin = 0;
-+ DisplayModePtr mode = &crtc->mode;
-+
-+ if (x < 0) xorigin = -x + 1;
-+ if (y < 0) yorigin = -y + 1;
-+ if (xorigin >= CURSOR_WIDTH) xorigin = CURSOR_WIDTH - 1;
-+ if (yorigin >= CURSOR_HEIGHT) yorigin = CURSOR_HEIGHT - 1;
-+
-+ if (mode->Flags & V_INTERLACE)
-+ y /= 2;
-+ else if (mode->Flags & V_DBLSCAN)
-+ y *= 2;
-+
-+ if(crtc_id == 0) {
-+ OUTREG(R128_CUR_HORZ_VERT_OFF, (R128_CUR_LOCK | (xorigin << 16) | yorigin));
-+ OUTREG(R128_CUR_HORZ_VERT_POSN, (R128_CUR_LOCK | ((xorigin ? 0 : x) << 16) | (yorigin ? 0 : y)));
-+ OUTREG(R128_CUR_OFFSET, r128_crtc->cursor_offset + pScrn->fbOffset + yorigin * 16);
-+ } else if (crtc_id == 1) {
-+ OUTREG(R128_CUR2_HORZ_VERT_OFF, (R128_CUR2_LOCK | (xorigin << 16) | yorigin));
-+ OUTREG(R128_CUR2_HORZ_VERT_POSN, (R128_CUR2_LOCK | ((xorigin ? 0 : x) << 16) | (yorigin ? 0 : y)));
-+ OUTREG(R128_CUR2_OFFSET, r128_crtc->cursor_offset + pScrn->fbOffset + yorigin * 16);
- }
- }
-
--/* Copy cursor image from `image' to video memory. R128SetCursorPosition
-- will be called after this, so we can ignore xorigin and yorigin. */
--static void R128LoadCursorImage(ScrnInfoPtr pScrn, unsigned char *image)
-+void r128_crtc_load_cursor_image(xf86CrtcPtr crtc, unsigned char *src)
- {
-+ ScrnInfoPtr pScrn = crtc->scrn;
-+ R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
-+ int crtc_id = r128_crtc->crtc_id;
-+
-+
- R128InfoPtr info = R128PTR(pScrn);
- unsigned char *R128MMIO = info->MMIO;
-- CARD32 *s = (pointer)image;
-- CARD32 *d = (pointer)((CARD8*)info->FB + info->cursor_start);
-+ CARD32 *s = (pointer)src;
-+ CARD32 *d = (pointer)(info->FB + r128_crtc->cursor_offset + pScrn->fbOffset);
-+ CARD32 save1 = 0;
-+ CARD32 save2 = 0;
- int y;
-- CARD32 save;
-
-- if(!info->IsSecondary)
-- {
-- save = INREG(R128_CRTC_GEN_CNTL);
-- OUTREG(R128_CRTC_GEN_CNTL, save & (CARD32)~R128_CRTC_CUR_EN);
-- }
-- else
-- {
-- save = INREG(R128_CRTC2_GEN_CNTL);
-- OUTREG(R128_CRTC2_GEN_CNTL, save & (CARD32)~R128_CRTC2_CUR_EN);
-+ if (crtc_id == 0) {
-+ save1 = INREG(R128_CRTC_GEN_CNTL);
-+ OUTREG(R128_CRTC_GEN_CNTL, save1 & (CARD32)~R128_CRTC_CUR_EN);
-+ } else if (crtc_id == 1) {
-+ save2 = INREG(R128_CRTC2_GEN_CNTL);
-+ OUTREG(R128_CRTC2_GEN_CNTL, save2 & (CARD32)~R128_CRTC2_CUR_EN);
- }
-
- #if X_BYTE_ORDER == X_BIG_ENDIAN
-@@ -197,59 +237,10 @@ static void R128LoadCursorImage(ScrnInfoPtr pScrn, unsigned char *image)
- }
- #endif
-
-- /* Set the area after the cursor to be all transparent so that we
-- won't display corrupted cursors on the screen */
-- for (y = 0; y < 64; y++) {
-- *d++ = 0xffffffff; /* The AND bits */
-- *d++ = 0xffffffff;
-- *d++ = 0x00000000; /* The XOR bits */
-- *d++ = 0x00000000;
-- }
--
--
-- if(!info->IsSecondary)
-- OUTREG(R128_CRTC_GEN_CNTL, save);
-+ if (crtc_id == 0)
-+ OUTREG(R128_CRTC_GEN_CNTL, save1);
- else
-- OUTREG(R128_CRTC2_GEN_CNTL, save);
--
--}
--
--/* Hide hardware cursor. */
--static void R128HideCursor(ScrnInfoPtr pScrn)
--{
-- R128InfoPtr info = R128PTR(pScrn);
-- unsigned char *R128MMIO = info->MMIO;
--
-- if(info->IsSecondary)
-- OUTREGP(R128_CRTC2_GEN_CNTL, 0, ~R128_CRTC2_CUR_EN);
-- else
-- OUTREGP(R128_CRTC_GEN_CNTL, 0, ~R128_CRTC_CUR_EN);
--}
--
--/* Show hardware cursor. */
--static void R128ShowCursor(ScrnInfoPtr pScrn)
--{
-- R128InfoPtr info = R128PTR(pScrn);
-- unsigned char *R128MMIO = info->MMIO;
--
-- if(info->IsSecondary)
-- {
-- OUTREGP(R128_CRTC2_GEN_CNTL, R128_CRTC2_CUR_EN,
-- ~R128_CRTC2_CUR_EN);
-- }
-- else
-- {
-- OUTREGP(R128_CRTC_GEN_CNTL, R128_CRTC_CUR_EN, ~R128_CRTC_CUR_EN);
-- }
--}
--
--/* Determine if hardware cursor is in use. */
--static Bool R128UseHWCursor(ScreenPtr pScreen, CursorPtr pCurs)
--{
-- ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
-- R128InfoPtr info = R128PTR(pScrn);
--
-- return info->cursor_start ? TRUE : FALSE;
-+ OUTREG(R128_CRTC2_GEN_CNTL, save2);
- }
-
- /* Initialize hardware cursor support. */
-@@ -257,77 +248,72 @@ Bool R128CursorInit(ScreenPtr pScreen)
- {
- ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
- R128InfoPtr info = R128PTR(pScrn);
-- xf86CursorInfoPtr cursor;
- FBAreaPtr fbarea = NULL;
- #ifdef USE_EXA
- ExaOffscreenArea* osArea = NULL;
- #else
- void* osArea = NULL;
- #endif
-+ xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
-+ CARD32 cursor_offset = 0;
-+ int cpp = info->CurrentLayout.pixel_bytes;
- int width;
-+ int width_bytes;
- int height;
- int size;
-+ int size_bytes;
-+ int c;
-
-- int cpp = info->CurrentLayout.pixel_bytes;
--
-- if (!(cursor = info->cursor = xf86CreateCursorInfoRec())) return FALSE;
--
-- cursor->MaxWidth = 64;
-- cursor->MaxHeight = 64;
-- cursor->Flags = (HARDWARE_CURSOR_TRUECOLOR_AT_8BPP
-- | HARDWARE_CURSOR_SHOW_TRANSPARENT
-- | HARDWARE_CURSOR_UPDATE_UNHIDDEN
--#if X_BYTE_ORDER == X_LITTLE_ENDIAN
-- | HARDWARE_CURSOR_BIT_ORDER_MSBFIRST
--#endif
-- | HARDWARE_CURSOR_INVERT_MASK
-- | HARDWARE_CURSOR_AND_SOURCE_WITH_MASK
-- | HARDWARE_CURSOR_SOURCE_MASK_INTERLEAVE_64
-- | HARDWARE_CURSOR_SWAP_SOURCE_AND_MASK);
--
-- cursor->SetCursorColors = R128SetCursorColors;
-- cursor->SetCursorPosition = R128SetCursorPosition;
-- cursor->LoadCursorImage = R128LoadCursorImage;
-- cursor->HideCursor = R128HideCursor;
-- cursor->ShowCursor = R128ShowCursor;
-- cursor->UseHWCursor = R128UseHWCursor;
--
-- size = (cursor->MaxWidth/4) * cursor->MaxHeight;
-+ size = CURSOR_WIDTH * CURSOR_HEIGHT / 4;
-+ size_bytes = size * 2;
- width = pScrn->displayWidth;
-- height = (size*2 + 1023) / pScrn->displayWidth;
-+ width_bytes = width * (pScrn->bitsPerPixel / 8);
-+ height = ((size_bytes * xf86_config->num_crtc) + width_bytes - 1) / width_bytes;
-
- if(!info->useEXA) {
- fbarea = xf86AllocateOffscreenArea(pScreen, width, height,
- 16, NULL, NULL, NULL);
-
-- if (fbarea) {
-- info->cursor_start = R128_ALIGN((fbarea->box.x1
-- + width * fbarea->box.y1)
-- * cpp, 16);
-- info->cursor_end = info->cursor_start + size;
-- }
-+ if (fbarea)
-+ cursor_offset = R128_ALIGN((fbarea->box.x1 + width * fbarea->box.y1) * cpp, 16);
- }
- #ifdef USE_EXA
- else {
- osArea = exaOffscreenAlloc(pScreen, width * height, 16,
- TRUE, NULL, NULL);
-
-- if (osArea) {
-- info->cursor_start = osArea->offset;
-- info->cursor_end = osArea->offset + osArea->size;
-- }
-+ if (osArea)
-+ cursor_offset = osArea->offset;
- }
- #endif
-
- if ((!info->useEXA && !fbarea) || (info->useEXA && !osArea)) {
-- info->cursor_start = 0;
- xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
- "Hardware cursor disabled"
- " due to insufficient offscreen memory\n");
-+ return FALSE;
-+ } else {
-+ for (c = 0; c < xf86_config->num_crtc; c++) {
-+ xf86CrtcPtr crtc = xf86_config->crtc[c];
-+ R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
-+
-+ r128_crtc->cursor_offset = cursor_offset + (c * size);
-+ xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-+ "Will use %d kb for hardware cursor %d at offset 0x%08x\n",
-+ (size_bytes * xf86_config->num_crtc) / 1024, c,
-+ (unsigned int)r128_crtc->cursor_offset);
-+ }
- }
-
-- R128TRACE(("R128CursorInit (0x%08x-0x%08x)\n",
-- info->cursor_start, info->cursor_end));
--
-- return xf86InitCursor(pScreen, cursor);
-+ return xf86_cursors_init(pScreen, CURSOR_WIDTH, CURSOR_HEIGHT,
-+ (HARDWARE_CURSOR_TRUECOLOR_AT_8BPP |
-+ HARDWARE_CURSOR_AND_SOURCE_WITH_MASK |
-+ HARDWARE_CURSOR_SHOW_TRANSPARENT |
-+ HARDWARE_CURSOR_UPDATE_UNHIDDEN |
-+#if X_BYTE_ORDER == X_LITTLE_ENDIAN
-+ HARDWARE_CURSOR_BIT_ORDER_MSBFIRST |
-+#endif
-+ HARDWARE_CURSOR_INVERT_MASK |
-+ HARDWARE_CURSOR_SWAP_SOURCE_AND_MASK |
-+ HARDWARE_CURSOR_SOURCE_MASK_INTERLEAVE_64));
- }
-diff --git a/src/r128_driver.c b/src/r128_driver.c
-index f425c3b..9205328 100644
---- a/src/r128_driver.c
-+++ b/src/r128_driver.c
-@@ -84,6 +84,7 @@
- /* X and server generic header files */
- #include "xf86.h"
- #include "xf86_OSproc.h"
-+#include "xf86RandR12.h"
- #if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 6
- #include "xf86RAC.h"
- #include "xf86Resources.h"
-@@ -119,11 +120,6 @@ static Bool R128CloseScreen(CLOSE_SCREEN_ARGS_DECL);
- static Bool R128SaveScreen(ScreenPtr pScreen, int mode);
- static void R128Save(ScrnInfoPtr pScrn);
- static void R128Restore(ScrnInfoPtr pScrn);
--static Bool R128ModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode);
--static void R128DisplayPowerManagementSet(ScrnInfoPtr pScrn,
-- int PowerManagementMode, int flags);
--static void R128DisplayPowerManagementSetLCD(ScrnInfoPtr pScrn,
-- int PowerManagementMode, int flags);
-
- typedef enum {
- OPTION_NOACCEL,
-@@ -258,6 +254,7 @@ static Bool R128MapMMIO(ScrnInfoPtr pScrn)
- info->PciTag,
- info->MMIOAddr,
- R128_MMIOSIZE);
-+ if (!info->MMIO) return FALSE;
- #else
- int err = pci_device_map_range(info->PciInfo,
- info->MMIOAddr,
-@@ -274,7 +271,6 @@ static Bool R128MapMMIO(ScrnInfoPtr pScrn)
- #endif
- }
-
-- if (!info->MMIO) return FALSE;
- return TRUE;
- }
-
-@@ -402,78 +398,6 @@ void R128WaitForVerticalSync(ScrnInfoPtr pScrn)
- }
- }
-
--/* Blank screen. */
--static void R128Blank(ScrnInfoPtr pScrn)
--{
-- R128InfoPtr info = R128PTR(pScrn);
-- unsigned char *R128MMIO = info->MMIO;
--
-- if(!info->IsSecondary)
-- {
-- switch(info->DisplayType)
-- {
-- case MT_LCD:
-- OUTREGP(R128_LVDS_GEN_CNTL, R128_LVDS_DISPLAY_DIS,
-- ~R128_LVDS_DISPLAY_DIS);
-- break;
-- case MT_CRT:
-- OUTREGP(R128_CRTC_EXT_CNTL, R128_CRTC_DISPLAY_DIS, ~R128_CRTC_DISPLAY_DIS);
-- break;
-- case MT_DFP:
-- OUTREGP(R128_FP_GEN_CNTL, R128_FP_BLANK_DIS, ~R128_FP_BLANK_DIS);
-- break;
-- case MT_NONE:
-- default:
-- break;
-- }
-- }
-- else
-- {
-- OUTREGP(R128_CRTC2_GEN_CNTL, R128_CRTC2_DISP_DIS, ~R128_CRTC2_DISP_DIS);
-- }
--}
--
--/* Unblank screen. */
--static void R128Unblank(ScrnInfoPtr pScrn)
--{
-- R128InfoPtr info = R128PTR(pScrn);
-- unsigned char *R128MMIO = info->MMIO;
--
-- if(!info->IsSecondary)
-- {
-- switch(info->DisplayType)
-- {
-- case MT_LCD:
-- OUTREGP(R128_LVDS_GEN_CNTL, 0,
-- ~R128_LVDS_DISPLAY_DIS);
-- break;
-- case MT_CRT:
-- OUTREGP(R128_CRTC_EXT_CNTL, 0, ~R128_CRTC_DISPLAY_DIS);
-- break;
-- case MT_DFP:
-- OUTREGP(R128_FP_GEN_CNTL, 0, ~R128_FP_BLANK_DIS);
-- break;
-- case MT_NONE:
-- default:
-- break;
-- }
-- }
-- else
-- {
-- switch(info->DisplayType)
-- {
-- case MT_LCD:
-- case MT_DFP:
-- case MT_CRT:
-- OUTREGP(R128_CRTC2_GEN_CNTL, 0, ~R128_CRTC2_DISP_DIS);
-- break;
-- case MT_NONE:
-- default:
-- break;
-- }
-- }
--}
--
- /* Compute log base 2 of val. */
- int R128MinBits(int val)
- {
-@@ -1058,9 +982,9 @@ static Bool R128PreInitConfig(ScrnInfoPtr pScrn)
- xf86DrvMsg(pScrn->scrnIndex, X_INFO,
- "Option \"Display\" ignored "
- "(framebuffer device determines display type)\n");
-- else if (info->IsPrimary || info->IsSecondary)
-+ else if (!Display)
- info->BIOSDisplay = R128_DUALHEAD;
-- else if (!Display || !xf86NameCmp(Display, "FP"))
-+ else if (!xf86NameCmp(Display, "FP"))
- info->BIOSDisplay = R128_BIOS_DISPLAY_FP;
- else if (!xf86NameCmp(Display, "BIOS"))
- info->BIOSDisplay = INREG8(R128_BIOS_5_SCRATCH);
-@@ -1079,9 +1003,6 @@ static Bool R128PreInitConfig(ScrnInfoPtr pScrn)
- info->BIOSDisplay = R128_BIOS_DISPLAY_CRT;
- }
-
-- R128MMIO = NULL;
-- R128UnmapMMIO(pScrn);
--
- /* RAM */
- switch (info->MemCntl & 0x3) {
- case 0: /* SDR SGRAM 1:1 */
-@@ -1256,6 +1177,7 @@ static Bool R128PreInitDDC(ScrnInfoPtr pScrn, xf86Int10InfoPtr pInt10)
- #endif
-
- if (!xf86LoadSubModule(pScrn, "ddc")) return FALSE;
-+ if (!xf86LoadSubModule(pScrn, "i2c")) return FALSE;
-
- #if defined(__powerpc__) || defined(__alpha__) || defined(__sparc__)
- /* Int10 is broken on PPC and some Alphas */
-@@ -1281,468 +1203,6 @@ static Bool R128PreInitGamma(ScrnInfoPtr pScrn)
- return TRUE;
- }
-
--static void
--R128I2CGetBits(I2CBusPtr b, int *Clock, int *data)
--{
-- ScrnInfoPtr pScrn = xf86Screens[b->scrnIndex];
-- R128InfoPtr info = R128PTR(pScrn);
-- unsigned long val;
-- unsigned char *R128MMIO = info->MMIO;
--
-- /* Get the result. */
-- val = INREG(info->DDCReg);
-- *Clock = (val & R128_GPIO_MONID_Y_3) != 0;
-- *data = (val & R128_GPIO_MONID_Y_0) != 0;
--
--}
--
--static void
--R128I2CPutBits(I2CBusPtr b, int Clock, int data)
--{
-- ScrnInfoPtr pScrn = xf86Screens[b->scrnIndex];
-- R128InfoPtr info = R128PTR(pScrn);
-- unsigned long val;
-- unsigned char *R128MMIO = info->MMIO;
--
-- val = INREG(info->DDCReg)
-- & ~(CARD32)(R128_GPIO_MONID_EN_0 | R128_GPIO_MONID_EN_3);
-- val |= (Clock ? 0:R128_GPIO_MONID_EN_3);
-- val |= (data ? 0:R128_GPIO_MONID_EN_0);
-- OUTREG(info->DDCReg, val);
--}
--
--
--static Bool
--R128I2cInit(ScrnInfoPtr pScrn)
--{
-- R128InfoPtr info = R128PTR(pScrn);
-- if ( !xf86LoadSubModule(pScrn, "i2c") ) {
-- xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-- "Failed to load i2c module\n");
-- return FALSE;
-- }
--
-- info->pI2CBus = xf86CreateI2CBusRec();
-- if(!info->pI2CBus) return FALSE;
--
-- info->pI2CBus->BusName = "DDC";
-- info->pI2CBus->scrnIndex = pScrn->scrnIndex;
-- info->DDCReg = R128_GPIO_MONID;
-- info->pI2CBus->I2CPutBits = R128I2CPutBits;
-- info->pI2CBus->I2CGetBits = R128I2CGetBits;
-- info->pI2CBus->AcknTimeout = 5;
--
-- if (!xf86I2CBusInit(info->pI2CBus)) {
-- return FALSE;
-- }
-- return TRUE;
--}
--
--/* return TRUE is a DFP is indeed connected to a DVI port */
--static Bool R128GetDFPInfo(ScrnInfoPtr pScrn)
--{
-- R128InfoPtr info = R128PTR(pScrn);
-- int i;
-- xf86MonPtr MonInfo = NULL;
-- xf86MonPtr ddc;
-- unsigned char *R128MMIO = info->MMIO;
--
-- if(!R128I2cInit(pScrn)){
-- xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-- "I2C initialization failed!\n");
-- }
--
-- OUTREG(info->DDCReg, (INREG(info->DDCReg)
-- | R128_GPIO_MONID_MASK_0 | R128_GPIO_MONID_MASK_3));
--
-- OUTREG(info->DDCReg, INREG(info->DDCReg)
-- & ~(CARD32)(R128_GPIO_MONID_A_0 | R128_GPIO_MONID_A_3));
--
-- MonInfo = xf86DoEDID_DDC2(XF86_SCRN_ARG(pScrn), info->pI2CBus);
-- if(!MonInfo) {
-- xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-- "No DFP detected\n");
-- return FALSE;
-- }
-- xf86SetDDCproperties(pScrn, MonInfo);
-- ddc = pScrn->monitor->DDC;
--
-- for(i=0; i<4; i++)
-- {
-- if((ddc->det_mon[i].type == 0) &&
-- (ddc->det_mon[i].section.d_timings.h_active > 0) &&
-- (ddc->det_mon[i].section.d_timings.v_active > 0))
-- {
-- info->PanelXRes =
-- ddc->det_mon[i].section.d_timings.h_active;
-- info->PanelYRes =
-- ddc->det_mon[i].section.d_timings.v_active;
--
-- info->HOverPlus =
-- ddc->det_mon[i].section.d_timings.h_sync_off;
-- info->HSyncWidth =
-- ddc->det_mon[i].section.d_timings.h_sync_width;
-- info->HBlank =
-- ddc->det_mon[i].section.d_timings.h_blanking;
-- info->VOverPlus =
-- ddc->det_mon[i].section.d_timings.v_sync_off;
-- info->VSyncWidth =
-- ddc->det_mon[i].section.d_timings.v_sync_width;
-- info->VBlank =
-- ddc->det_mon[i].section.d_timings.v_blanking;
-- }
-- }
-- return TRUE;
--}
--
--
--static void R128SetSyncRangeFromEdid(ScrnInfoPtr pScrn, int flag)
--{
-- int i;
-- xf86MonPtr ddc = pScrn->monitor->DDC;
-- if(flag) /*HSync*/
-- {
-- for(i=0; i<4; i++)
-- {
-- if(ddc->det_mon[i].type == DS_RANGES)
-- {
-- pScrn->monitor->nHsync = 1;
-- pScrn->monitor->hsync[0].lo =
-- ddc->det_mon[i].section.ranges.min_h;
-- pScrn->monitor->hsync[0].hi =
-- ddc->det_mon[i].section.ranges.max_h;
-- return;
-- }
-- }
-- /*if no sync ranges detected in detailed timing table,
-- let's try to derive them from supported VESA modes
-- Are we doing too much here!!!?
-- **/
-- i = 0;
-- if(ddc->timings1.t1 & 0x02) /*800x600@56*/
-- {
-- pScrn->monitor->hsync[i].lo =
-- pScrn->monitor->hsync[i].hi = 35.2;
-- i++;
-- }
-- if(ddc->timings1.t1 & 0x04) /*640x480@75*/
-- {
-- pScrn->monitor->hsync[i].lo =
-- pScrn->monitor->hsync[i].hi = 37.5;
-- i++;
-- }
-- if((ddc->timings1.t1 & 0x08) || (ddc->timings1.t1 & 0x01))
-- {
-- pScrn->monitor->hsync[i].lo =
-- pScrn->monitor->hsync[i].hi = 37.9;
-- i++;
-- }
-- if(ddc->timings1.t2 & 0x40)
-- {
-- pScrn->monitor->hsync[i].lo =
-- pScrn->monitor->hsync[i].hi = 46.9;
-- i++;
-- }
-- if((ddc->timings1.t2 & 0x80) || (ddc->timings1.t2 & 0x08))
-- {
-- pScrn->monitor->hsync[i].lo =
-- pScrn->monitor->hsync[i].hi = 48.1;
-- i++;
-- }
-- if(ddc->timings1.t2 & 0x04)
-- {
-- pScrn->monitor->hsync[i].lo =
-- pScrn->monitor->hsync[i].hi = 56.5;
-- i++;
-- }
-- if(ddc->timings1.t2 & 0x02)
-- {
-- pScrn->monitor->hsync[i].lo =
-- pScrn->monitor->hsync[i].hi = 60.0;
-- i++;
-- }
-- if(ddc->timings1.t2 & 0x01)
-- {
-- pScrn->monitor->hsync[i].lo =
-- pScrn->monitor->hsync[i].hi = 64.0;
-- i++;
-- }
-- pScrn->monitor->nHsync = i;
-- }
-- else /*Vrefresh*/
-- {
-- for(i=0; i<4; i++)
-- {
-- if(ddc->det_mon[i].type == DS_RANGES)
-- {
-- pScrn->monitor->nVrefresh = 1;
-- pScrn->monitor->vrefresh[0].lo =
-- ddc->det_mon[i].section.ranges.min_v;
-- pScrn->monitor->vrefresh[0].hi =
-- ddc->det_mon[i].section.ranges.max_v;
-- return;
-- }
-- }
-- i = 0;
-- if(ddc->timings1.t1 & 0x02) /*800x600@56*/
-- {
-- pScrn->monitor->vrefresh[i].lo =
-- pScrn->monitor->vrefresh[i].hi = 56;
-- i++;
-- }
-- if((ddc->timings1.t1 & 0x01) || (ddc->timings1.t2 & 0x08))
-- {
-- pScrn->monitor->vrefresh[i].lo =
-- pScrn->monitor->vrefresh[i].hi = 60;
-- i++;
-- }
-- if(ddc->timings1.t2 & 0x04)
-- {
-- pScrn->monitor->vrefresh[i].lo =
-- pScrn->monitor->vrefresh[i].hi = 70;
-- i++;
-- }
-- if((ddc->timings1.t1 & 0x08) || (ddc->timings1.t2 & 0x80))
-- {
-- pScrn->monitor->vrefresh[i].lo =
-- pScrn->monitor->vrefresh[i].hi = 72;
-- i++;
-- }
-- if((ddc->timings1.t1 & 0x04) || (ddc->timings1.t2 & 0x40)
-- || (ddc->timings1.t2 & 0x02) || (ddc->timings1.t2 & 0x01))
-- {
-- pScrn->monitor->vrefresh[i].lo =
-- pScrn->monitor->vrefresh[i].hi = 75;
-- i++;
-- }
-- pScrn->monitor->nVrefresh = i;
-- }
--}
--
--/***********
-- free's xf86ValidateModes routine deosn't work well with DFPs
-- here is our own validation routine. All modes between
-- 640<=XRes<=MaxRes and 480<=YRes<=MaxYRes will be permitted.
-- NOTE: RageProII doesn't support rmx, can only work with the
-- standard modes the monitor can support (scale).
--************/
--
--static int R128ValidateFPModes(ScrnInfoPtr pScrn)
--{
-- int i, j, count=0, width, height;
-- R128InfoPtr info = R128PTR(pScrn);
-- DisplayModePtr last = NULL, new = NULL, first = NULL;
-- xf86MonPtr ddc;
--
-- /* Free any allocated modes during configuration. We don't need them*/
-- while (pScrn->modes)
-- {
-- xf86DeleteMode(&pScrn->modes, pScrn->modes);
-- }
-- while (pScrn->modePool)
-- {
-- xf86DeleteMode(&pScrn->modePool, pScrn->modePool);
-- }
--
-- pScrn->virtualX = pScrn->display->virtualX;
-- pScrn->virtualY = pScrn->display->virtualY;
--
-- /* If no mode specified in config, we use native resolution*/
-- if(!pScrn->display->modes[0])
-- {
-- pScrn->display->modes[0] = xnfalloc(16);
-- sprintf(pScrn->display->modes[0], "%dx%d",
-- info->PanelXRes, info->PanelYRes);
-- }
--
-- for(i=0; pScrn->display->modes[i] != NULL; i++)
-- {
-- if (sscanf(pScrn->display->modes[i], "%dx%d", &width, &height) == 2)
-- {
--
-- if(width < 640 || width > info->PanelXRes ||
-- height < 480 || height > info->PanelYRes)
-- {
-- xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
-- "Mode %s is out of range.\n"
-- "Valid mode should be between 640x480-%dx%d\n",
-- pScrn->display->modes[i], info->PanelXRes, info->PanelYRes);
-- continue;
-- }
--
-- new = xnfcalloc(1, sizeof(DisplayModeRec));
-- new->prev = last;
-- new->name = xnfalloc(strlen(pScrn->display->modes[i]) + 1);
-- strcpy(new->name, pScrn->display->modes[i]);
-- new->HDisplay = new->CrtcHDisplay = width;
-- new->VDisplay = new->CrtcVDisplay = height;
--
-- ddc = pScrn->monitor->DDC;
-- for(j=0; j<DET_TIMINGS; j++)
-- {
-- /*We use native mode clock only*/
-- if(ddc->det_mon[j].type == 0){
-- new->Clock = ddc->det_mon[j].section.d_timings.clock / 1000;
-- break;
-- }
-- }
--
-- if(new->prev) new->prev->next = new;
-- last = new;
-- if(!first) first = new;
-- pScrn->display->virtualX =
-- pScrn->virtualX = MAX(pScrn->virtualX, width);
-- pScrn->display->virtualY =
-- pScrn->virtualY = MAX(pScrn->virtualY, height);
-- count++;
-- }
-- else
-- {
-- xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
-- "Mode name %s is invalid\n", pScrn->display->modes[i]);
-- continue;
-- }
-- }
--
-- if(last)
-- {
-- last->next = first;
-- first->prev = last;
-- pScrn->modes = first;
--
-- /*FIXME: May need to validate line pitch here*/
-- {
-- int dummy = 0;
-- switch(pScrn->depth / 8)
-- {
-- case 1:
-- dummy = 128 - pScrn->virtualX % 128;
-- break;
-- case 2:
-- dummy = 32 - pScrn->virtualX % 32;
-- break;
-- case 3:
-- case 4:
-- dummy = 16 - pScrn->virtualX % 16;
-- }
-- pScrn->displayWidth = pScrn->virtualX + dummy;
-- }
--
-- }
--
-- return count;
--}
--
--
--/* This is called by R128PreInit to validate modes and compute parameters
-- for all of the valid modes. */
--static Bool R128PreInitModes(ScrnInfoPtr pScrn)
--{
-- R128InfoPtr info = R128PTR(pScrn);
-- ClockRangePtr clockRanges;
-- int modesFound;
--
-- if(info->isDFP) {
-- R128MapMem(pScrn);
-- info->BIOSDisplay = R128_BIOS_DISPLAY_FP;
-- /* validate if DFP really connected. */
-- if(!R128GetDFPInfo(pScrn)) {
-- info->isDFP = FALSE;
-- info->BIOSDisplay = R128_BIOS_DISPLAY_CRT;
-- } else if(!info->isPro2) {
-- /* RageProII doesn't support rmx, we can't use native-mode
-- stretching for other non-native modes. It will rely on
-- whatever VESA modes monitor can support. */
-- modesFound = R128ValidateFPModes(pScrn);
-- if(modesFound < 1) {
-- xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-- "No valid mode found for this DFP/LCD\n");
-- R128UnmapMem(pScrn);
-- return FALSE;
--
-- }
-- }
-- R128UnmapMem(pScrn);
-- }
--
-- if(!info->isDFP || info->isPro2) {
-- /* Get mode information */
-- pScrn->progClock = TRUE;
-- clockRanges = xnfcalloc(sizeof(*clockRanges), 1);
-- clockRanges->next = NULL;
-- clockRanges->minClock = info->pll.min_pll_freq;
-- clockRanges->maxClock = info->pll.max_pll_freq * 10;
-- clockRanges->clockIndex = -1;
-- if (info->HasPanelRegs || info->isDFP) {
-- clockRanges->interlaceAllowed = FALSE;
-- clockRanges->doubleScanAllowed = FALSE;
-- } else {
-- clockRanges->interlaceAllowed = TRUE;
-- clockRanges->doubleScanAllowed = TRUE;
-- }
--
-- if(pScrn->monitor->DDC) {
-- /*if we still don't know sync range yet, let's try EDID.
-- Note that, since we can have dual heads, the Xconfigurator
-- may not be able to probe both monitors correctly through
-- vbe probe function (R128ProbeDDC). Here we provide an
-- additional way to auto-detect sync ranges if they haven't
-- been added to XF86Config manually.
-- **/
-- if(pScrn->monitor->nHsync <= 0)
-- R128SetSyncRangeFromEdid(pScrn, 1);
-- if(pScrn->monitor->nVrefresh <= 0)
-- R128SetSyncRangeFromEdid(pScrn, 0);
-- }
--
-- modesFound = xf86ValidateModes(pScrn,
-- pScrn->monitor->Modes,
-- pScrn->display->modes,
-- clockRanges,
-- NULL, /* linePitches */
-- 8 * 64, /* minPitch */
-- 8 * 1024, /* maxPitch */
--/*
-- * ATI docs say pitchInc must be 8 * 64, but this doesn't permit a pitch of
-- * 800 bytes, which is known to work on the Rage128 LF on clamshell iBooks
-- */
-- 8 * 32, /* pitchInc */
-- 128, /* minHeight */
-- 2048, /* maxHeight */
-- pScrn->display->virtualX,
-- pScrn->display->virtualY,
-- info->FbMapSize,
-- LOOKUP_BEST_REFRESH);
--
-- if (modesFound < 1 && info->FBDev) {
-- fbdevHWUseBuildinMode(pScrn);
-- pScrn->displayWidth = fbdevHWGetLineLength(pScrn)/(pScrn->bitsPerPixel/8);
-- modesFound = 1;
-- }
--
-- if (modesFound == -1) return FALSE;
-- xf86PruneDriverModes(pScrn);
-- if (!modesFound || !pScrn->modes) {
-- xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No valid modes found\n");
-- return FALSE;
-- }
-- xf86SetCrtcForModes(pScrn, 0);
-- }
-- /* Set DPI */
-- pScrn->currentMode = pScrn->modes;
-- xf86PrintModes(pScrn);
--
-- xf86SetDpi(pScrn, 0, 0);
--
-- /* Get ScreenInit function */
-- if (!xf86LoadSubModule(pScrn, "fb")) return FALSE;
--
-- info->CurrentLayout.displayWidth = pScrn->displayWidth;
-- info->CurrentLayout.mode = pScrn->currentMode;
--
-- return TRUE;
--}
--
- /* This is called by R128PreInit to initialize the hardware cursor. */
- static Bool R128PreInitCursor(ScrnInfoPtr pScrn)
- {
-@@ -1885,6 +1345,43 @@ static Bool R128PreInitDRI(ScrnInfoPtr pScrn)
- }
- #endif
-
-+static Bool R128PreInitControllers(ScrnInfoPtr pScrn, xf86Int10InfoPtr pInt10)
-+{
-+ R128InfoPtr info = R128PTR(pScrn);
-+ xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
-+ int i;
-+ int mask;
-+ int found = 0;
-+
-+ if (info->IsPrimary)
-+ mask = 1;
-+ else if (info->IsSecondary)
-+ mask = 2;
-+ else
-+ mask = 3;
-+
-+ if (!R128GetBIOSParameters(pScrn, pInt10))
-+ return FALSE;
-+
-+ if (!R128GetPLLParameters(pScrn))
-+ return FALSE;
-+
-+ if (!R128AllocateControllers(pScrn, mask))
-+ return FALSE;
-+
-+ if (!R128SetupConnectors(pScrn))
-+ return FALSE;
-+
-+ for (i = 0; i < config->num_output; i++) {
-+ xf86OutputPtr output = config->output[i];
-+
-+ output->status = (*output->funcs->detect) (output);
-+ if (output->status == XF86OutputStatusConnected)
-+ found++;
-+ }
-+ return !!found;
-+}
-+
- static void
- R128ProbeDDC(ScrnInfoPtr pScrn, int indx)
- {
-@@ -1899,6 +1396,17 @@ R128ProbeDDC(ScrnInfoPtr pScrn, int indx)
- #endif
- }
-
-+static Bool R128CRTCResize(ScrnInfoPtr pScrn, int width, int height)
-+{
-+ pScrn->virtualX = width;
-+ pScrn->virtualY = height;
-+ return TRUE;
-+}
-+
-+static const xf86CrtcConfigFuncsRec R128CRTCResizeFuncs = {
-+ R128CRTCResize
-+};
-+
- /* R128PreInit is called once at server startup. */
- Bool R128PreInit(ScrnInfoPtr pScrn, int flags)
- {
-@@ -1976,6 +1484,9 @@ Bool R128PreInit(ScrnInfoPtr pScrn, int flags)
- #endif
- pScrn->monitor = pScrn->confScreen->monitor;
-
-+ /* Allocate an xf86CrtcConfig */
-+ xf86CrtcConfigInit(pScrn, &R128CRTCResizeFuncs);
-+
- if (!R128PreInitVisual(pScrn)) goto fail;
-
- /* We can't do this until we have a
-@@ -2016,8 +1527,6 @@ Bool R128PreInit(ScrnInfoPtr pScrn, int flags)
- "module load skipped\n");
- #endif
-
--
--
- if (!R128PreInitWeight(pScrn)) goto fail;
-
- if(xf86GetOptValInteger(info->Options, OPTION_VIDEO_KEY, &(info->videoKey))) {
-@@ -2053,20 +1562,30 @@ Bool R128PreInit(ScrnInfoPtr pScrn, int flags)
- }
-
- if (!info->FBDev)
-- if (!R128PreInitInt10(pScrn, &pInt10)) goto fail;
--
-- if (!R128PreInitConfig(pScrn)) goto fail;
-+ if (!R128PreInitInt10(pScrn, &pInt10)) goto fail;
-
-- if (!R128GetBIOSParameters(pScrn, pInt10)) goto fail;
-+ if (!R128PreInitConfig(pScrn)) goto fail;
-
-- if (!R128GetPLLParameters(pScrn)) goto fail;
-+ xf86CrtcSetSizeRange(pScrn, 320, 200, 4096, 4096);
-
- /* Don't fail on this one */
-- R128PreInitDDC(pScrn, pInt10);
-+ info->DDC = R128PreInitDDC(pScrn, pInt10);
-
-- if (!R128PreInitGamma(pScrn)) goto fail;
-+ if (!R128PreInitControllers(pScrn, pInt10)) goto fail;
-+
-+ if (!xf86InitialConfiguration(pScrn, TRUE)) {
-+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No valid modes.\n");
-+ goto fail;
-+ }
-+ pScrn->displayWidth = (pScrn->virtualX + 63) & ~63;
-
-- if (!R128PreInitModes(pScrn)) goto fail;
-+ /* Set display resolution */
-+ xf86SetDpi(pScrn, 0, 0);
-+
-+ /* Get ScreenInit function */
-+ if (!xf86LoadSubModule(pScrn, "fb")) return FALSE;
-+
-+ if (!R128PreInitGamma(pScrn)) goto fail;
-
- if (!R128PreInitCursor(pScrn)) goto fail;
-
-@@ -2074,6 +1593,18 @@ Bool R128PreInit(ScrnInfoPtr pScrn, int flags)
- if (!R128PreInitDRI(pScrn)) goto fail;
- #endif
-
-+ info->CurrentLayout.displayWidth = pScrn->displayWidth;
-+
-+ if (!xf86RandR12PreInit(pScrn)) {
-+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "RandR initialization failure\n");
-+ goto fail;
-+ }
-+
-+ if (pScrn->modes == NULL) {
-+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No modes.\n");
-+ goto fail;
-+ }
-+
- /* Free the video bios (if applicable) */
- if (info->VBIOS) {
- free(info->VBIOS);
-@@ -2084,6 +1615,9 @@ Bool R128PreInit(ScrnInfoPtr pScrn, int flags)
- if (pInt10)
- xf86FreeInt10(pInt10);
-
-+ if (info->MMIO) R128UnmapMMIO(pScrn);
-+ info->MMIO = NULL;
-+
- xf86DrvMsg(pScrn->scrnIndex, X_NOTICE,
- "For information on using the multimedia capabilities\n\tof this"
- " adapter, please see http://gatos.sf.net.\n");
-@@ -2116,56 +1650,66 @@ static void R128LoadPalette(ScrnInfoPtr pScrn, int numColors,
- int *indices, LOCO *colors, VisualPtr pVisual)
- {
- R128InfoPtr info = R128PTR(pScrn);
-- unsigned char *R128MMIO = info->MMIO;
-- int i, j;
-- int idx;
-- unsigned char r, g, b;
--
-- /* If the second monitor is connected, we also
-- need to deal with the secondary palette*/
-- if (info->IsSecondary) j = 1;
-- else j = 0;
--
-- PAL_SELECT(j);
-+ xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
-+ int i, j;
-+ int c, index;
-+ CARD16 lut_r[256], lut_g[256], lut_b[256];
-+
-+ for (c = 0; c < xf86_config->num_crtc; c++) {
-+ xf86CrtcPtr crtc = xf86_config->crtc[c];
-+ R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
-+
-+ for (i = 0 ; i < 256; i++) {
-+ lut_r[i] = r128_crtc->lut_r[i] << 8;
-+ lut_g[i] = r128_crtc->lut_g[i] << 8;
-+ lut_b[i] = r128_crtc->lut_b[i] << 8;
-+ }
-
-+ switch (info->CurrentLayout.depth) {
-+ case 15:
-+ for (i = 0; i < numColors; i++) {
-+ index = indices[i];
-+ for (j = 0; j < 8; j++) {
-+ lut_r[index * 8 + j] = colors[index].red << 8;
-+ lut_g[index * 8 + j] = colors[index].green << 8;
-+ lut_b[index * 8 + j] = colors[index].blue << 8;
-+ }
-+ }
-+ case 16:
-+ for (i = 0; i < numColors; i++) {
-+ index = indices[i];
-+
-+ /* XXX: The old version of R128LoadPalette did not do this and
-+ * the old version of RADEONLoadPalette has a comment asking why.
-+ */
-+ if (i <= 31) {
-+ for (j = 0; j < 8; j++) {
-+ lut_r[index * 8 + j] = colors[index].red << 8;
-+ lut_b[index * 8 + j] = colors[index].blue << 8;
-+ }
-+ }
-
-- /* Select palette 0 (main CRTC) if using FP-enabled chip */
-- /*if (info->HasPanelRegs || info->isDFP) PAL_SELECT(0);*/
-+ for (j = 0; j < 4; j++) {
-+ lut_g[index * 4 + j] = colors[index].green << 8;
-+ }
-+ }
-+ default:
-+ for (i = 0; i < numColors; i++) {
-+ index = indices[i];
-+ lut_r[index] = colors[index].red << 8;
-+ lut_g[index] = colors[index].green << 8;
-+ lut_b[index] = colors[index].blue << 8;
-+ }
-+ break;
-+ }
-
-- if (info->CurrentLayout.depth == 15) {
-- /* 15bpp mode. This sends 32 values. */
-- for (i = 0; i < numColors; i++) {
-- idx = indices[i];
-- r = colors[idx].red;
-- g = colors[idx].green;
-- b = colors[idx].blue;
-- OUTPAL(idx * 8, r, g, b);
-- }
-- }
-- else if (info->CurrentLayout.depth == 16) {
-- /* 16bpp mode. This sends 64 values. */
-- /* There are twice as many green values as
-- there are values for red and blue. So,
-- we take each red and blue pair, and
-- combine it with each of the two green
-- values. */
-- for (i = 0; i < numColors; i++) {
-- idx = indices[i];
-- r = colors[idx / 2].red;
-- g = colors[idx].green;
-- b = colors[idx / 2].blue;
-- OUTPAL(idx * 4, r, g, b);
-- }
-- }
-- else {
-- /* 8bpp mode. This sends 256 values. */
-- for (i = 0; i < numColors; i++) {
-- idx = indices[i];
-- r = colors[idx].red;
-- b = colors[idx].blue;
-- g = colors[idx].green;
-- OUTPAL(idx, r, g, b);
-- }
-+ /* Make the change through RandR */
-+#ifdef RANDR_12_INTERFACE
-+ if (crtc->randr_crtc)
-+ RRCrtcGammaSet(crtc->randr_crtc, lut_r, lut_g, lut_b);
-+ else
-+#endif
-+ crtc->funcs->gamma_set(crtc, lut_r, lut_g, lut_b, 256);
- }
- }
-
-@@ -2296,14 +1840,6 @@ Bool R128ScreenInit(SCREEN_INIT_ARGS_DECL)
- info->PaletteSavedOnVT = FALSE;
-
- R128Save(pScrn);
-- if (info->FBDev) {
-- if (!fbdevHWModeInit(pScrn, pScrn->currentMode)) return FALSE;
-- } else {
-- if (!R128ModeInit(pScrn, pScrn->currentMode)) return FALSE;
-- }
--
-- R128SaveScreen(pScreen, SCREEN_SAVER_ON);
-- pScrn->AdjustFrame(ADJUST_FRAME_ARGS(pScrn, pScrn->frameX0, pScrn->frameY0));
-
- /* Visual setup */
- miClearVisualTypes();
-@@ -2701,6 +2237,19 @@ Bool R128ScreenInit(SCREEN_INIT_ARGS_DECL)
- #endif
- }
-
-+ pScrn->vtSema = TRUE;
-+ /* xf86CrtcRotate accesses pScrn->pScreen */
-+ pScrn->pScreen = pScreen;
-+
-+ if (info->FBDev) {
-+ if (!fbdevHWModeInit(pScrn, pScrn->currentMode)) return FALSE;
-+ } else {
-+ if (!xf86SetDesiredModes(pScrn)) return FALSE;
-+ }
-+
-+ R128SaveScreen(pScreen, SCREEN_SAVER_ON);
-+ //pScrn->AdjustFrame(ADJUST_FRAME_ARGS(pScrn, pScrn->frameX0, pScrn->frameY0));
-+
- /* DGA setup */
- R128DGAInit(pScreen);
-
-@@ -2737,28 +2286,11 @@ Bool R128ScreenInit(SCREEN_INIT_ARGS_DECL)
- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Using software cursor\n");
- }
-
-- /* Colormap setup */
-- if (!miCreateDefColormap(pScreen)) return FALSE;
-- if (!xf86HandleColormaps(pScreen, 256, info->dac6bits ? 6 : 8,
-- (info->FBDev ? fbdevHWLoadPaletteWeak() :
-- R128LoadPalette), NULL,
-- CMAP_PALETTED_TRUECOLOR
-- | CMAP_RELOAD_ON_MODE_SWITCH
--#if 0 /* This option messes up text mode! (eich@suse.de) */
-- | CMAP_LOAD_EVEN_IF_OFFSCREEN
--#endif
-- )) return FALSE;
--
- /* DPMS setup - FIXME: also for mirror mode in non-fbdev case? - Michel */
- if (info->FBDev)
- xf86DPMSInit(pScreen, fbdevHWDPMSSetWeak(), 0);
--
-- else {
-- if (info->DisplayType == MT_LCD)
-- xf86DPMSInit(pScreen, R128DisplayPowerManagementSetLCD, 0);
-- else
-- xf86DPMSInit(pScreen, R128DisplayPowerManagementSet, 0);
-- }
-+ else
-+ xf86DPMSInit(pScreen, xf86DPMSSet, 0);
-
- if (!info->IsSecondary)
- R128InitVideo(pScreen);
-@@ -2793,11 +2325,25 @@ Bool R128ScreenInit(SCREEN_INIT_ARGS_DECL)
- info->BlockHandler = pScreen->BlockHandler;
- pScreen->BlockHandler = R128BlockHandler;
-
-+ if (!xf86CrtcScreenInit(pScreen)) return FALSE;
-+
-+ /* Colormap setup */
-+ if (!miCreateDefColormap(pScreen)) return FALSE;
-+ if (!xf86HandleColormaps(pScreen, 256, info->dac6bits ? 6 : 8,
-+ (info->FBDev ? fbdevHWLoadPaletteWeak() :
-+ R128LoadPalette), NULL,
-+ CMAP_PALETTED_TRUECOLOR
-+ | CMAP_RELOAD_ON_MODE_SWITCH
-+#if 0 /* This option messes up text mode! (eich@suse.de) */
-+ | CMAP_LOAD_EVEN_IF_OFFSCREEN
-+#endif
-+ )) return FALSE;
-+
- return TRUE;
- }
-
- /* Write common registers (initialized to 0). */
--static void R128RestoreCommonRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
-+void R128RestoreCommonRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
- {
- R128InfoPtr info = R128PTR(pScrn);
- unsigned char *R128MMIO = info->MMIO;
-@@ -2821,7 +2367,7 @@ static void R128RestoreCommonRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
- }
-
- /* Write CRTC registers. */
--static void R128RestoreCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
-+void R128RestoreCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
- {
- R128InfoPtr info = R128PTR(pScrn);
- unsigned char *R128MMIO = info->MMIO;
-@@ -2844,7 +2390,7 @@ static void R128RestoreCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
- }
-
- /* Write CRTC2 registers. */
--static void R128RestoreCrtc2Registers(ScrnInfoPtr pScrn,
-+void R128RestoreCrtc2Registers(ScrnInfoPtr pScrn,
- R128SavePtr restore)
- {
- R128InfoPtr info = R128PTR(pScrn);
-@@ -2863,7 +2409,7 @@ static void R128RestoreCrtc2Registers(ScrnInfoPtr pScrn,
- }
-
- /* Write flat panel registers */
--static void R128RestoreFPRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
-+void R128RestoreFPRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
- {
- R128InfoPtr info = R128PTR(pScrn);
- unsigned char *R128MMIO = info->MMIO;
-@@ -2936,7 +2482,7 @@ static void R128PLL2WriteUpdate(ScrnInfoPtr pScrn)
- }
-
- /* Write PLL registers. */
--static void R128RestorePLLRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
-+void R128RestorePLLRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
- {
- R128InfoPtr info = R128PTR(pScrn);
- unsigned char *R128MMIO = info->MMIO;
-@@ -2999,7 +2545,7 @@ static void R128RestorePLLRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
- }
-
- /* Write PLL2 registers. */
--static void R128RestorePLL2Registers(ScrnInfoPtr pScrn, R128SavePtr restore)
-+void R128RestorePLL2Registers(ScrnInfoPtr pScrn, R128SavePtr restore)
- {
- R128InfoPtr info = R128PTR(pScrn);
- unsigned char *R128MMIO = info->MMIO;
-@@ -3068,7 +2614,7 @@ static void R128RestorePLL2Registers(ScrnInfoPtr pScrn, R128SavePtr restore)
- }
-
- /* Write DDA registers. */
--static void R128RestoreDDARegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
-+void R128RestoreDDARegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
- {
- R128InfoPtr info = R128PTR(pScrn);
- unsigned char *R128MMIO = info->MMIO;
-@@ -3078,7 +2624,7 @@ static void R128RestoreDDARegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
- }
-
- /* Write DDA registers. */
--static void R128RestoreDDA2Registers(ScrnInfoPtr pScrn, R128SavePtr restore)
-+void R128RestoreDDA2Registers(ScrnInfoPtr pScrn, R128SavePtr restore)
- {
- R128InfoPtr info = R128PTR(pScrn);
- unsigned char *R128MMIO = info->MMIO;
-@@ -3087,126 +2633,6 @@ static void R128RestoreDDA2Registers(ScrnInfoPtr pScrn, R128SavePtr restore)
- OUTREG(R128_DDA2_ON_OFF, restore->dda2_on_off);
- }
-
--/* Write palette data. */
--static void R128RestorePalette(ScrnInfoPtr pScrn, R128SavePtr restore)
--{
-- R128InfoPtr info = R128PTR(pScrn);
-- unsigned char *R128MMIO = info->MMIO;
-- int i;
--
-- if (!restore->palette_valid) return;
--
-- PAL_SELECT(1);
-- OUTPAL_START(0);
-- for (i = 0; i < 256; i++) {
-- R128WaitForFifo(pScrn, 32); /* delay */
-- OUTPAL_NEXT_CARD32(restore->palette2[i]);
-- }
--
-- PAL_SELECT(0);
-- OUTPAL_START(0);
-- for (i = 0; i < 256; i++) {
-- R128WaitForFifo(pScrn, 32); /* delay */
-- OUTPAL_NEXT_CARD32(restore->palette[i]);
-- }
--
--}
--
--/* Write out state to define a new video mode. */
--static void R128RestoreMode(ScrnInfoPtr pScrn, R128SavePtr restore)
--{
-- R128InfoPtr info = R128PTR(pScrn);
-- DevUnion* pPriv;
-- R128EntPtr pR128Ent;
-- static R128SaveRec restore0;
--
-- R128TRACE(("R128RestoreMode(%p)\n", restore));
-- if(!info->HasCRTC2)
-- {
-- R128RestoreCommonRegisters(pScrn, restore);
-- R128RestoreDDARegisters(pScrn, restore);
-- R128RestoreCrtcRegisters(pScrn, restore);
-- if((info->DisplayType == MT_DFP) ||
-- (info->DisplayType == MT_LCD))
-- {
-- R128RestoreFPRegisters(pScrn, restore);
-- }
-- R128RestorePLLRegisters(pScrn, restore);
-- return;
-- }
--
-- pPriv = xf86GetEntityPrivate(pScrn->entityList[0],
-- getR128EntityIndex());
-- pR128Ent = pPriv->ptr;
--
--
-- /*****
-- When changing mode with Dual-head card (VE/M6), care must
-- be taken for the special order in setting registers. CRTC2 has
-- to be set before changing CRTC_EXT register.
-- In the dual-head setup, X server calls this routine twice with
-- primary and secondary pScrn pointers respectively. The calls
-- can come with different order. Regardless the order of X server issuing
-- the calls, we have to ensure we set registers in the right order!!!
-- Otherwise we may get a blank screen.
-- *****/
--
-- if(info->IsSecondary)
-- {
-- if (!pR128Ent->RestorePrimary && !info->SwitchingMode)
-- R128RestoreCommonRegisters(pScrn, restore);
-- R128RestoreDDA2Registers(pScrn, restore);
-- R128RestoreCrtc2Registers(pScrn, restore);
-- R128RestorePLL2Registers(pScrn, restore);
--
-- if(info->SwitchingMode) return;
--
-- pR128Ent->IsSecondaryRestored = TRUE;
--
-- if(pR128Ent->RestorePrimary)
-- {
-- R128InfoPtr info0 = R128PTR(pR128Ent->pPrimaryScrn);
-- pR128Ent->RestorePrimary = FALSE;
--
-- R128RestoreCrtcRegisters(pScrn, &restore0);
-- if((info0->DisplayType == MT_DFP) ||
-- (info0->DisplayType == MT_LCD))
-- {
-- R128RestoreFPRegisters(pScrn, &restore0);
-- }
--
-- R128RestorePLLRegisters(pScrn, &restore0);
-- pR128Ent->IsSecondaryRestored = FALSE;
--
-- }
-- }
-- else
-- {
-- if (!pR128Ent->IsSecondaryRestored)
-- R128RestoreCommonRegisters(pScrn, restore);
-- R128RestoreDDARegisters(pScrn, restore);
-- if(!pR128Ent->HasSecondary || pR128Ent->IsSecondaryRestored
-- || info->SwitchingMode)
-- {
-- pR128Ent->IsSecondaryRestored = FALSE;
-- R128RestoreCrtcRegisters(pScrn, restore);
-- if((info->DisplayType == MT_DFP) ||
-- (info->DisplayType == MT_LCD))
-- {
-- R128RestoreFPRegisters(pScrn, restore);
-- }
-- R128RestorePLLRegisters(pScrn, restore);
-- }
-- else
-- {
-- memcpy(&restore0, restore, sizeof(restore0));
-- pR128Ent->RestorePrimary = TRUE;
-- }
-- }
--
-- R128RestorePalette(pScrn, restore);
--}
--
- /* Read common registers. */
- static void R128SaveCommonRegisters(ScrnInfoPtr pScrn, R128SavePtr save)
- {
-@@ -3450,9 +2876,19 @@ static void R128Restore(ScrnInfoPtr pScrn)
- OUTREG(R128_CLOCK_CNTL_INDEX, restore->clock_cntl_index);
- OUTREG(R128_GEN_RESET_CNTL, restore->gen_reset_cntl);
- OUTREG(R128_DP_DATATYPE, restore->dp_datatype);
-+
-+ R128RestoreCommonRegisters(pScrn, restore);
-+ if (info->HasCRTC2) {
-+ R128RestoreDDA2Registers(pScrn, restore);
-+ R128RestoreCrtc2Registers(pScrn, restore);
-+ R128RestorePLL2Registers(pScrn, restore);
-+ }
-+ R128RestoreDDARegisters(pScrn, restore);
-+ R128RestoreCrtcRegisters(pScrn, restore);
-+ R128RestorePLLRegisters(pScrn, restore);
-+ R128RestoreFPRegisters(pScrn, restore);
- }
-
-- R128RestoreMode(pScrn, restore);
- #ifdef WITH_VGAHW
- if (info->VGAAccess) {
- vgaHWPtr hwp = VGAHWPTR(pScrn);
-@@ -3492,7 +2928,7 @@ static void R128Restore(ScrnInfoPtr pScrn)
- }
-
- /* Define common registers for requested video mode. */
--static void R128InitCommonRegisters(R128SavePtr save, R128InfoPtr info)
-+void R128InitCommonRegisters(R128SavePtr save, R128InfoPtr info)
- {
- save->ovr_clr = 0;
- save->ovr_wid_left_right = 0;
-@@ -3518,8 +2954,64 @@ static void R128InitCommonRegisters(R128SavePtr save, R128InfoPtr info)
- save->bus_cntl |= R128_BUS_RD_DISCARD_EN | R128_BUS_RD_ABORT_EN;
- }
-
-+Bool R128InitCrtcBase(xf86CrtcPtr crtc, R128SavePtr save, int x, int y)
-+{
-+ ScrnInfoPtr pScrn = crtc->scrn;
-+ R128InfoPtr info = R128PTR(pScrn);
-+ int offset = y * info->CurrentLayout.displayWidth + x;
-+ int Base = pScrn->fbOffset;
-+
-+ switch (info->CurrentLayout.pixel_code) {
-+ case 15:
-+ case 16: offset *= 2; break;
-+ case 24: offset *= 3; break;
-+ case 32: offset *= 4; break;
-+ }
-+ Base += offset;
-+
-+ if (crtc->rotatedData != NULL)
-+ Base = pScrn->fbOffset + (char *)crtc->rotatedData - (char *)info->FB;
-+
-+ Base &= ~7; /* 3 lower bits are always 0 */
-+ if (info->CurrentLayout.pixel_code == 24)
-+ Base += 8 * (Base % 3); /* Must be multiple of 8 and 3 */
-+
-+ save->crtc_offset = Base;
-+ save->crtc_offset_cntl = 0;
-+
-+ return TRUE;
-+}
-+
-+Bool R128InitCrtc2Base(xf86CrtcPtr crtc, R128SavePtr save, int x, int y)
-+{
-+ ScrnInfoPtr pScrn = crtc->scrn;
-+ R128InfoPtr info = R128PTR(pScrn);
-+ int offset = y * info->CurrentLayout.displayWidth + x;
-+ int Base = pScrn->fbOffset;
-+
-+ switch (info->CurrentLayout.pixel_code) {
-+ case 15:
-+ case 16: offset *= 2; break;
-+ case 24: offset *= 3; break;
-+ case 32: offset *= 4; break;
-+ }
-+ Base += offset;
-+
-+ if (crtc->rotatedData != NULL)
-+ Base = pScrn->fbOffset + (char *)crtc->rotatedData - (char *)info->FB;
-+
-+ Base &= ~7; /* 3 lower bits are always 0 */
-+ if (info->CurrentLayout.pixel_code == 24)
-+ Base += 8 * (Base % 3); /* Must be multiple of 8 and 3 */
-+
-+ save->crtc2_offset = Base;
-+ save->crtc2_offset_cntl = 0;
-+
-+ return TRUE;
-+}
-+
- /* Define CRTC registers for requested video mode. */
--static Bool R128InitCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr save,
-+Bool R128InitCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr save,
- DisplayModePtr mode, R128InfoPtr info)
- {
- int format;
-@@ -3633,8 +3125,6 @@ static Bool R128InitCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr save,
- | ((mode->Flags & V_NVSYNC)
- ? R128_CRTC_V_SYNC_POL
- : 0));
-- save->crtc_offset = 0;
-- save->crtc_offset_cntl = 0;
- save->crtc_pitch = info->CurrentLayout.displayWidth / 8;
-
- R128TRACE(("Pitch = %d bytes (virtualX = %d, displayWidth = %d)\n",
-@@ -3654,7 +3144,7 @@ static Bool R128InitCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr save,
- }
-
- /* Define CRTC2 registers for requested video mode. */
--static Bool R128InitCrtc2Registers(ScrnInfoPtr pScrn, R128SavePtr save,
-+Bool R128InitCrtc2Registers(ScrnInfoPtr pScrn, R128SavePtr save,
- DisplayModePtr mode, R128InfoPtr info)
- {
- int format;
-@@ -3727,10 +3217,6 @@ static Bool R128InitCrtc2Registers(ScrnInfoPtr pScrn, R128SavePtr save,
- | ((mode->Flags & V_NVSYNC)
- ? R128_CRTC2_V_SYNC_POL
- : 0));
--
-- save->crtc2_offset = 0;
-- save->crtc2_offset_cntl = 0;
--
- save->crtc2_pitch = info->CurrentLayout.displayWidth / 8;
-
- R128TRACE(("Pitch = %d bytes (virtualX = %d, displayWidth = %d)\n",
-@@ -3740,7 +3226,7 @@ static Bool R128InitCrtc2Registers(ScrnInfoPtr pScrn, R128SavePtr save,
- }
-
- /* Define CRTC registers for requested video mode. */
--static void R128InitFPRegisters(R128SavePtr orig, R128SavePtr save,
-+void R128InitFPRegisters(R128SavePtr orig, R128SavePtr save,
- DisplayModePtr mode, R128InfoPtr info)
- {
- int xres = mode->CrtcHDisplay;
-@@ -3853,7 +3339,7 @@ static void R128InitFPRegisters(R128SavePtr orig, R128SavePtr save,
- }
-
- /* Define PLL registers for requested video mode. */
--static void R128InitPLLRegisters(ScrnInfoPtr pScrn, R128SavePtr save,
-+void R128InitPLLRegisters(ScrnInfoPtr pScrn, R128SavePtr save,
- R128PLLPtr pll, double dot_clock)
- {
- unsigned long freq = dot_clock * 100;
-@@ -3905,7 +3391,7 @@ static void R128InitPLLRegisters(ScrnInfoPtr pScrn, R128SavePtr save,
- }
-
- /* Define PLL2 registers for requested video mode. */
--static void R128InitPLL2Registers(ScrnInfoPtr pScrn, R128SavePtr save,
-+void R128InitPLL2Registers(ScrnInfoPtr pScrn, R128SavePtr save,
- R128PLLPtr pll, double dot_clock)
- {
- unsigned long freq = dot_clock * 100;
-@@ -3957,7 +3443,7 @@ static void R128InitPLL2Registers(ScrnInfoPtr pScrn, R128SavePtr save,
- }
-
- /* Define DDA registers for requested video mode. */
--static Bool R128InitDDARegisters(ScrnInfoPtr pScrn, R128SavePtr save,
-+Bool R128InitDDARegisters(ScrnInfoPtr pScrn, R128SavePtr save,
- R128PLLPtr pll, R128InfoPtr info,
- DisplayModePtr mode)
- {
-@@ -4026,7 +3512,7 @@ static Bool R128InitDDARegisters(ScrnInfoPtr pScrn, R128SavePtr save,
- }
-
- /* Define DDA2 registers for requested video mode. */
--static Bool R128InitDDA2Registers(ScrnInfoPtr pScrn, R128SavePtr save,
-+Bool R128InitDDA2Registers(ScrnInfoPtr pScrn, R128SavePtr save,
- R128PLLPtr pll, R128InfoPtr info,
- DisplayModePtr mode)
- {
-@@ -4106,122 +3592,6 @@ static void R128InitPalette(R128SavePtr save)
- }
- #endif
-
--/* Define registers for a requested video mode. */
--static Bool R128Init(ScrnInfoPtr pScrn, DisplayModePtr mode, R128SavePtr save)
--{
-- R128InfoPtr info = R128PTR(pScrn);
-- double dot_clock = mode->Clock/1000.0;
--
--#if R128_DEBUG
-- ErrorF("%-12.12s %7.2f %4d %4d %4d %4d %4d %4d %4d %4d (%d,%d)",
-- mode->name,
-- dot_clock,
--
-- mode->HDisplay,
-- mode->HSyncStart,
-- mode->HSyncEnd,
-- mode->HTotal,
--
-- mode->VDisplay,
-- mode->VSyncStart,
-- mode->VSyncEnd,
-- mode->VTotal,
-- pScrn->depth,
-- pScrn->bitsPerPixel);
-- if (mode->Flags & V_DBLSCAN) ErrorF(" D");
-- if (mode->Flags & V_CSYNC) ErrorF(" C");
-- if (mode->Flags & V_INTERLACE) ErrorF(" I");
-- if (mode->Flags & V_PHSYNC) ErrorF(" +H");
-- if (mode->Flags & V_NHSYNC) ErrorF(" -H");
-- if (mode->Flags & V_PVSYNC) ErrorF(" +V");
-- if (mode->Flags & V_NVSYNC) ErrorF(" -V");
-- ErrorF("\n");
-- ErrorF("%-12.12s %7.2f %4d %4d %4d %4d %4d %4d %4d %4d (%d,%d)",
-- mode->name,
-- dot_clock,
--
-- mode->CrtcHDisplay,
-- mode->CrtcHSyncStart,
-- mode->CrtcHSyncEnd,
-- mode->CrtcHTotal,
--
-- mode->CrtcVDisplay,
-- mode->CrtcVSyncStart,
-- mode->CrtcVSyncEnd,
-- mode->CrtcVTotal,
-- pScrn->depth,
-- pScrn->bitsPerPixel);
-- if (mode->Flags & V_DBLSCAN) ErrorF(" D");
-- if (mode->Flags & V_CSYNC) ErrorF(" C");
-- if (mode->Flags & V_INTERLACE) ErrorF(" I");
-- if (mode->Flags & V_PHSYNC) ErrorF(" +H");
-- if (mode->Flags & V_NHSYNC) ErrorF(" -H");
-- if (mode->Flags & V_PVSYNC) ErrorF(" +V");
-- if (mode->Flags & V_NVSYNC) ErrorF(" -V");
-- ErrorF("\n");
--#endif
--
-- info->Flags = mode->Flags;
--
-- if(info->IsSecondary)
-- {
-- if (!R128InitCrtc2Registers(pScrn, save,
-- pScrn->currentMode,info))
-- return FALSE;
-- R128InitPLL2Registers(pScrn, save, &info->pll, dot_clock);
-- if (!R128InitDDA2Registers(pScrn, save, &info->pll, info, mode))
-- return FALSE;
-- }
-- else
-- {
-- R128InitCommonRegisters(save, info);
-- if(!R128InitCrtcRegisters(pScrn, save, mode, info))
-- return FALSE;
-- if(dot_clock)
-- {
-- R128InitPLLRegisters(pScrn, save, &info->pll, dot_clock);
-- if (!R128InitDDARegisters(pScrn, save, &info->pll, info, mode))
-- return FALSE;
-- }
-- else
-- {
-- save->ppll_ref_div = info->SavedReg.ppll_ref_div;
-- save->ppll_div_3 = info->SavedReg.ppll_div_3;
-- save->htotal_cntl = info->SavedReg.htotal_cntl;
-- save->dda_config = info->SavedReg.dda_config;
-- save->dda_on_off = info->SavedReg.dda_on_off;
-- }
-- /* not used for now */
-- /*if (!info->PaletteSavedOnVT) RADEONInitPalette(save);*/
-- }
--
-- if (((info->DisplayType == MT_DFP) ||
-- (info->DisplayType == MT_LCD)))
-- {
-- R128InitFPRegisters(&info->SavedReg, save, mode, info);
-- }
--
-- R128TRACE(("R128Init returns %p\n", save));
-- return TRUE;
--}
--
--/* Initialize a new mode. */
--static Bool R128ModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
--{
-- R128InfoPtr info = R128PTR(pScrn);
--
-- if (!R128Init(pScrn, mode, &info->ModeReg)) return FALSE;
-- /* FIXME? DRILock/DRIUnlock here? */
-- pScrn->vtSema = TRUE;
-- R128Blank(pScrn);
-- R128RestoreMode(pScrn, &info->ModeReg);
-- R128Unblank(pScrn);
--
-- info->CurrentLayout.mode = mode;
--
-- return TRUE;
--}
--
- static Bool R128SaveScreen(ScreenPtr pScreen, int mode)
- {
- ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
-@@ -4252,7 +3622,7 @@ Bool R128SwitchMode(SWITCH_MODE_ARGS_DECL)
- Bool ret;
-
- info->SwitchingMode = TRUE;
-- ret = R128ModeInit(pScrn, mode);
-+ ret = xf86SetSingleMode(pScrn, mode, RR_Rotate_0);
- info->SwitchingMode = FALSE;
- return ret;
- }
-@@ -4379,10 +3749,16 @@ Bool R128EnterVT(VT_FUNC_ARGS_DECL)
- R128InfoPtr info = R128PTR(pScrn);
-
- R128TRACE(("R128EnterVT\n"));
-+
-+ pScrn->vtSema = TRUE;
- if (info->FBDev) {
- if (!fbdevHWEnterVT(VT_FUNC_ARGS)) return FALSE;
-- } else
-- if (!R128ModeInit(pScrn, pScrn->currentMode)) return FALSE;
-+ } else {
-+ if (!xf86SetDesiredModes(pScrn)) return FALSE;
-+ }
-+
-+ //if (!R128ModeInit(pScrn, pScrn->currentMode)) return FALSE;
-+
- if (info->accelOn)
- R128EngineInit(pScrn);
-
-@@ -4399,7 +3775,7 @@ Bool R128EnterVT(VT_FUNC_ARGS_DECL)
- #endif
-
- info->PaletteSavedOnVT = FALSE;
-- pScrn->AdjustFrame(ADJUST_FRAME_ARGS(pScrn, pScrn->frameX0, pScrn->frameY0));
-+ //pScrn->AdjustFrame(ADJUST_FRAME_ARGS(pScrn, pScrn->frameX0, pScrn->frameY0));
-
- return TRUE;
- }
-@@ -4504,130 +3880,3 @@ void R128FreeScreen(FREE_SCREEN_ARGS_DECL)
- #endif
- R128FreeRec(pScrn);
- }
--
--/* Sets VESA Display Power Management Signaling (DPMS) Mode. */
--static void R128DisplayPowerManagementSet(ScrnInfoPtr pScrn,
-- int PowerManagementMode, int flags)
--{
-- R128InfoPtr info = R128PTR(pScrn);
-- unsigned char *R128MMIO = info->MMIO;
-- int mask = (R128_CRTC_DISPLAY_DIS
-- | R128_CRTC_HSYNC_DIS
-- | R128_CRTC_VSYNC_DIS);
-- int mask2 = R128_CRTC2_DISP_DIS;
--
-- switch (PowerManagementMode) {
-- case DPMSModeOn:
-- /* Screen: On; HSync: On, VSync: On */
-- if (info->IsSecondary)
-- OUTREGP(R128_CRTC2_GEN_CNTL, 0, ~mask2);
-- else
-- OUTREGP(R128_CRTC_EXT_CNTL, 0, ~mask);
-- break;
-- case DPMSModeStandby:
-- /* Screen: Off; HSync: Off, VSync: On */
-- if (info->IsSecondary)
-- OUTREGP(R128_CRTC2_GEN_CNTL, R128_CRTC2_DISP_DIS, ~mask2);
-- else
-- OUTREGP(R128_CRTC_EXT_CNTL,
-- R128_CRTC_DISPLAY_DIS | R128_CRTC_HSYNC_DIS, ~mask);
-- break;
-- case DPMSModeSuspend:
-- /* Screen: Off; HSync: On, VSync: Off */
-- if (info->IsSecondary)
-- OUTREGP(R128_CRTC2_GEN_CNTL, R128_CRTC2_DISP_DIS, ~mask2);
-- else
-- OUTREGP(R128_CRTC_EXT_CNTL,
-- R128_CRTC_DISPLAY_DIS | R128_CRTC_VSYNC_DIS, ~mask);
-- break;
-- case DPMSModeOff:
-- /* Screen: Off; HSync: Off, VSync: Off */
-- if (info->IsSecondary)
-- OUTREGP(R128_CRTC2_GEN_CNTL, mask2, ~mask2);
-- else
-- OUTREGP(R128_CRTC_EXT_CNTL, mask, ~mask);
-- break;
-- }
-- if(info->isDFP) {
-- switch (PowerManagementMode) {
-- case DPMSModeOn:
-- OUTREG(R128_FP_GEN_CNTL, INREG(R128_FP_GEN_CNTL) | (R128_FP_FPON | R128_FP_TDMS_EN));
-- break;
-- case DPMSModeStandby:
-- case DPMSModeSuspend:
-- case DPMSModeOff:
-- OUTREG(R128_FP_GEN_CNTL, INREG(R128_FP_GEN_CNTL) & ~(R128_FP_FPON | R128_FP_TDMS_EN));
-- break;
-- }
-- }
--}
--
--static int r128_set_backlight_enable(ScrnInfoPtr pScrn, int on);
--
--static void R128DisplayPowerManagementSetLCD(ScrnInfoPtr pScrn,
-- int PowerManagementMode, int flags)
--{
-- R128InfoPtr info = R128PTR(pScrn);
-- unsigned char *R128MMIO = info->MMIO;
-- int mask = R128_LVDS_DISPLAY_DIS;
--
-- switch (PowerManagementMode) {
-- case DPMSModeOn:
-- /* Screen: On; HSync: On, VSync: On */
-- OUTREGP(R128_LVDS_GEN_CNTL, 0, ~mask);
-- r128_set_backlight_enable(pScrn, 1);
-- break;
-- case DPMSModeStandby:
-- /* Fall through */
-- case DPMSModeSuspend:
-- /* Fall through */
-- break;
-- case DPMSModeOff:
-- /* Screen: Off; HSync: Off, VSync: Off */
-- OUTREGP(R128_LVDS_GEN_CNTL, mask, ~mask);
-- r128_set_backlight_enable(pScrn, 0);
-- break;
-- }
--}
--
--static int r128_set_backlight_enable(ScrnInfoPtr pScrn, int on)
--{
-- R128InfoPtr info = R128PTR(pScrn);
-- unsigned char *R128MMIO = info->MMIO;
-- unsigned int lvds_gen_cntl = INREG(R128_LVDS_GEN_CNTL);
--
-- lvds_gen_cntl |= (/*R128_LVDS_BL_MOD_EN |*/ R128_LVDS_BLON);
-- if (on) {
-- lvds_gen_cntl |= R128_LVDS_DIGON;
-- if (!(lvds_gen_cntl & R128_LVDS_ON)) {
-- lvds_gen_cntl &= ~R128_LVDS_BLON;
-- OUTREG(R128_LVDS_GEN_CNTL, lvds_gen_cntl);
-- (void)INREG(R128_LVDS_GEN_CNTL);
-- usleep(10000);
-- lvds_gen_cntl |= R128_LVDS_BLON;
-- OUTREG(R128_LVDS_GEN_CNTL, lvds_gen_cntl);
-- }
--#if 0
-- lvds_gen_cntl &= ~R128_LVDS_BL_MOD_LEVEL_MASK;
-- lvds_gen_cntl |= (0xFF /* backlight_conv[level] */ <<
-- R128_LVDS_BL_MOD_LEVEL_SHIFT);
--#endif
-- lvds_gen_cntl |= (R128_LVDS_ON | R128_LVDS_EN);
-- lvds_gen_cntl &= ~R128_LVDS_DISPLAY_DIS;
-- } else {
--#if 0
-- lvds_gen_cntl &= ~R128_LVDS_BL_MOD_LEVEL_MASK;
-- lvds_gen_cntl |= (0xFF /* backlight_conv[0] */ <<
-- R128_LVDS_BL_MOD_LEVEL_SHIFT);
--#endif
-- lvds_gen_cntl |= R128_LVDS_DISPLAY_DIS;
-- OUTREG(R128_LVDS_GEN_CNTL, lvds_gen_cntl);
-- usleep(10);
-- lvds_gen_cntl &= ~(R128_LVDS_ON | R128_LVDS_EN | R128_LVDS_BLON
-- | R128_LVDS_DIGON);
-- }
--
-- OUTREG(R128_LVDS_GEN_CNTL, lvds_gen_cntl);
--
-- return 0;
--}
-diff --git a/src/r128_output.c b/src/r128_output.c
-new file mode 100644
-index 0000000..89a2958
---- /dev/null
-+++ b/src/r128_output.c
-@@ -0,0 +1,465 @@
-+/*
-+ * Copyright 2000 ATI Technologies Inc., Markham, Ontario, and
-+ * VA Linux Systems Inc., Fremont, California.
-+ *
-+ * All Rights Reserved.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining
-+ * a copy of this software and associated documentation files (the
-+ * "Software"), to deal in the Software without restriction, including
-+ * without limitation on the rights to use, copy, modify, merge,
-+ * publish, distribute, sublicense, and/or sell copies of the Software,
-+ * and to permit persons to whom the Software is furnished to do so,
-+ * subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice (including the
-+ * next paragraph) shall be included in all copies or substantial
-+ * portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-+ * NON-INFRINGEMENT. IN NO EVENT SHALL ATI, VA LINUX SYSTEMS AND/OR
-+ * THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+ * DEALINGS IN THE SOFTWARE.
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+#include "config.h"
-+#endif
-+
-+#include <string.h>
-+#include <stdio.h>
-+
-+#include "xf86.h"
-+#include "xf86Modes.h"
-+
-+#include "r128.h"
-+#include "r128_probe.h"
-+#include "r128_reg.h"
-+
-+static void R128ConnectorFindMonitor(ScrnInfoPtr pScrn, xf86OutputPtr output);
-+
-+static void r128_dpms(xf86OutputPtr output, int mode)
-+{
-+ switch(mode) {
-+ case DPMSModeOn:
-+ R128DPMSSetOn(output);
-+ break;
-+ case DPMSModeStandby:
-+ case DPMSModeSuspend:
-+ case DPMSModeOff:
-+ R128DPMSSetOff(output);
-+ break;
-+ }
-+}
-+
-+static void r128_save(xf86OutputPtr output)
-+{
-+}
-+
-+static void r128_restore(xf86OutputPtr output)
-+{
-+}
-+
-+static int r128_mode_valid(xf86OutputPtr output, DisplayModePtr mode)
-+{
-+ return MODE_OK;
-+}
-+
-+static Bool r128_mode_fixup(xf86OutputPtr output, DisplayModePtr mode, DisplayModePtr adjusted_mode)
-+{
-+ return TRUE;
-+}
-+
-+static void r128_mode_prepare(xf86OutputPtr output)
-+{
-+ r128_dpms(output, DPMSModeOff);
-+}
-+
-+static void r128_mode_set(xf86OutputPtr output, DisplayModePtr mode, DisplayModePtr adjusted_mode)
-+{
-+}
-+
-+static void r128_mode_commit(xf86OutputPtr output)
-+{
-+ r128_dpms(output, DPMSModeOn);
-+}
-+
-+static xf86OutputStatus r128_detect(xf86OutputPtr output)
-+{
-+ ScrnInfoPtr pScrn = output->scrn;
-+ R128OutputPrivatePtr r128_output = output->driver_private;
-+
-+ r128_output->MonType = MT_UNKNOWN;
-+ R128ConnectorFindMonitor(pScrn, output);
-+
-+ if (r128_output->MonType == MT_UNKNOWN) {
-+ output->subpixel_order = SubPixelUnknown;
-+ return XF86OutputStatusUnknown;
-+ } else if (r128_output->MonType == MT_NONE) {
-+ output->subpixel_order = SubPixelUnknown;
-+ return XF86OutputStatusDisconnected;
-+ } else {
-+ switch(r128_output->MonType) {
-+ case MT_LCD:
-+ case MT_DFP:
-+ output->subpixel_order = SubPixelHorizontalRGB;
-+ break;
-+ default:
-+ output->subpixel_order = SubPixelNone;
-+ break;
-+ }
-+
-+ return XF86OutputStatusConnected;
-+ }
-+}
-+
-+static DisplayModePtr r128_get_modes(xf86OutputPtr output)
-+{
-+ DisplayModePtr modes;
-+ modes = R128ProbeOutputModes(output);
-+ return modes;
-+}
-+
-+static void r128_destroy(xf86OutputPtr output)
-+{
-+ if (output->driver_private)
-+ free(output->driver_private);
-+}
-+
-+static const xf86OutputFuncsRec r128_output_funcs = {
-+ .dpms = r128_dpms,
-+ .save = r128_save,
-+ .restore = r128_restore,
-+ .mode_valid = r128_mode_valid,
-+ .mode_fixup = r128_mode_fixup,
-+ .prepare = r128_mode_prepare,
-+ .mode_set = r128_mode_set,
-+ .commit = r128_mode_commit,
-+ .detect = r128_detect,
-+ .get_modes = r128_get_modes,
-+ .destroy = r128_destroy,
-+};
-+
-+void R128DPMSSetOn(xf86OutputPtr output)
-+{
-+ ScrnInfoPtr pScrn = output->scrn;
-+ R128InfoPtr info = R128PTR(pScrn);
-+ unsigned char *R128MMIO = info->MMIO;
-+ R128OutputPrivatePtr r128_output = output->driver_private;
-+ R128MonitorType MonType = r128_output->MonType;
-+
-+ switch(MonType) {
-+ case MT_LCD:
-+ OUTREGP(R128_LVDS_GEN_CNTL, R128_LVDS_BLON, ~R128_LVDS_BLON);
-+ usleep(info->PanelPwrDly * 1000);
-+ OUTREGP(R128_LVDS_GEN_CNTL, R128_LVDS_ON, ~R128_LVDS_ON);
-+ break;
-+ case MT_DFP:
-+ OUTREGP(R128_FP_GEN_CNTL, (R128_FP_FPON | R128_FP_TDMS_EN), ~(R128_FP_FPON | R128_FP_TDMS_EN));
-+ break;
-+ default:
-+ break;
-+ }
-+}
-+
-+void R128DPMSSetOff(xf86OutputPtr output)
-+{
-+ ScrnInfoPtr pScrn = output->scrn;
-+ R128InfoPtr info = R128PTR(pScrn);
-+ unsigned char *R128MMIO = info->MMIO;
-+ R128OutputPrivatePtr r128_output = output->driver_private;
-+ R128MonitorType MonType = r128_output->MonType;
-+
-+ switch(MonType) {
-+ case MT_LCD:
-+ OUTREGP(R128_LVDS_GEN_CNTL, 0, ~(R128_LVDS_BLON | R128_LVDS_ON));
-+ break;
-+ case MT_DFP:
-+ OUTREGP(R128_FP_GEN_CNTL, 0, ~(R128_FP_FPON | R128_FP_TDMS_EN));
-+ break;
-+ default:
-+ break;
-+ }
-+}
-+
-+static R128MonitorType R128DisplayDDCConnected(xf86OutputPtr output)
-+{
-+ ScrnInfoPtr pScrn = output->scrn;
-+ R128InfoPtr info = R128PTR(pScrn);
-+ unsigned char *R128MMIO = info->MMIO;
-+ R128OutputPrivatePtr r128_output = output->driver_private;
-+
-+ R128MonitorType MonType = MT_NONE;
-+ xf86MonPtr *MonInfo = &output->MonInfo;
-+ CARD32 mask1, mask2;
-+
-+ if (r128_output->type == OUTPUT_LVDS) {
-+ return MT_LCD;
-+ } else if (r128_output->type == OUTPUT_VGA) {
-+ mask1 = R128_GPIO_MONID_MASK_1 | R128_GPIO_MONID_MASK_3;
-+ mask2 = R128_GPIO_MONID_A_1 | R128_GPIO_MONID_A_3;
-+ } else {
-+ mask1 = R128_GPIO_MONID_MASK_0 | R128_GPIO_MONID_MASK_3;
-+ mask2 = R128_GPIO_MONID_A_0 | R128_GPIO_MONID_A_3;
-+ }
-+
-+ if (r128_output->pI2CBus) {
-+ R128I2CBusPtr pR128I2CBus = &(r128_output->ddc_i2c);
-+
-+ /* XXX: Radeon does something here to appease old monitors. */
-+ OUTREG(pR128I2CBus->ddc_reg, INREG(pR128I2CBus->ddc_reg) | mask1);
-+ OUTREG(pR128I2CBus->ddc_reg, INREG(pR128I2CBus->ddc_reg) & ~mask2);
-+ *MonInfo = xf86DoEDID_DDC2(XF86_SCRN_ARG(pScrn), r128_output->pI2CBus);
-+ } else {
-+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "DDC2/I2C is not properly initialized\n");
-+ return MT_NONE;
-+ }
-+
-+ if (*MonInfo) {
-+ if (r128_output->type == OUTPUT_VGA) {
-+ MonType = MT_CRT;
-+ } else {
-+ if ((*MonInfo)->rawData[0x14] & 0x80)
-+ MonType = MT_DFP;
-+ else
-+ MonType = MT_CRT;
-+ }
-+ }
-+
-+ return MonType;
-+}
-+
-+static void R128ConnectorFindMonitor(ScrnInfoPtr pScrn, xf86OutputPtr output)
-+{
-+ R128OutputPrivatePtr r128_output = output->driver_private;
-+
-+ /* XXX: We should figure out how the DAC and BIOS scratch registers work
-+ * to handle the non-DDC case. */
-+ if (r128_output->MonType == MT_UNKNOWN)
-+ r128_output->MonType = R128DisplayDDCConnected(output);
-+}
-+
-+DisplayModePtr R128ProbeOutputModes(xf86OutputPtr output)
-+{
-+ ScrnInfoPtr pScrn = output->scrn;
-+ R128OutputPrivatePtr r128_output = output->driver_private;
-+ DisplayModePtr modes = NULL;
-+ DisplayModePtr mode;
-+ xf86MonPtr edid_mon;
-+
-+ if (r128_output->pI2CBus) {
-+ edid_mon = xf86OutputGetEDID(output, r128_output->pI2CBus);
-+ xf86OutputSetEDID(output, edid_mon);
-+ modes = xf86OutputGetEDIDModes(output);
-+ }
-+
-+ /* Letting this function return NULL would be a bad idea. With old cards
-+ * like r128, users often specify a small resolution in order to get DRI.
-+ * If the X server has to guess modes, the list it comes up with includes
-+ * high resolutions.
-+ */
-+ if (!modes)
-+ modes = xf86GetDefaultModes();
-+
-+ for (mode = modes; mode != NULL; mode = mode->next) {
-+ xf86SetModeCrtc(mode, INTERLACE_HALVE_V);
-+ if (mode->status == MODE_OK)
-+ mode->status = R128ValidMode(XF86_SCRN_ARG(pScrn), mode, TRUE, MODECHECK_FINAL);
-+ }
-+
-+ xf86ValidateModesUserConfig(pScrn, modes);
-+ xf86PruneInvalidModes(pScrn, &modes, FALSE);
-+
-+ return modes;
-+}
-+
-+static xf86OutputPtr R128OutputCreate(ScrnInfoPtr pScrn, const char *name, int i)
-+{
-+ char buf[32];
-+ sprintf(buf, name, i);
-+ return xf86OutputCreate(pScrn, &r128_output_funcs, buf);
-+}
-+
-+static void R128I2CGetBits(I2CBusPtr b, int *Clock, int *data)
-+{
-+ ScrnInfoPtr pScrn = xf86Screens[b->scrnIndex];
-+ R128InfoPtr info = R128PTR(pScrn);
-+ unsigned long val;
-+ unsigned char *R128MMIO = info->MMIO;
-+ R128I2CBusPtr pR128I2CBus = b->DriverPrivate.ptr;
-+
-+ /* Get the result. */
-+ val = INREG(pR128I2CBus->ddc_reg);
-+ *Clock = (val & pR128I2CBus->get_clk_mask) != 0;
-+ *data = (val & pR128I2CBus->get_data_mask) != 0;
-+}
-+
-+static void R128I2CPutBits(I2CBusPtr b, int Clock, int data)
-+{
-+ ScrnInfoPtr pScrn = xf86Screens[b->scrnIndex];
-+ R128InfoPtr info = R128PTR(pScrn);
-+ unsigned long val;
-+ unsigned char *R128MMIO = info->MMIO;
-+ R128I2CBusPtr pR128I2CBus = b->DriverPrivate.ptr;
-+
-+ val = INREG(pR128I2CBus->ddc_reg)
-+ & ~(CARD32)(pR128I2CBus->put_clk_mask | pR128I2CBus->put_data_mask);
-+ val |= (Clock ? 0 : pR128I2CBus->put_clk_mask);
-+ val |= (data ? 0 : pR128I2CBus->put_data_mask);
-+ OUTREG(pR128I2CBus->ddc_reg, val);
-+}
-+
-+static Bool R128I2CInit(xf86OutputPtr output, I2CBusPtr *bus_ptr, char *name)
-+{
-+ ScrnInfoPtr pScrn = output->scrn;
-+ R128OutputPrivatePtr r128_output = output->driver_private;
-+ R128I2CBusPtr pR128I2CBus = &(r128_output->ddc_i2c);
-+ I2CBusPtr pI2CBus;
-+
-+ pI2CBus = xf86CreateI2CBusRec();
-+ if(!pI2CBus) return FALSE;
-+
-+ pI2CBus->BusName = name;
-+ pI2CBus->scrnIndex = pScrn->scrnIndex;
-+ pI2CBus->I2CPutBits = R128I2CPutBits;
-+ pI2CBus->I2CGetBits = R128I2CGetBits;
-+ pI2CBus->AcknTimeout = 5;
-+
-+ pI2CBus->DriverPrivate.ptr = (pointer)pR128I2CBus;
-+ if (!xf86I2CBusInit(pI2CBus)) return FALSE;
-+
-+ *bus_ptr = pI2CBus;
-+ return TRUE;
-+}
-+
-+void R128SetOutputType(ScrnInfoPtr pScrn, R128OutputPrivatePtr r128_output)
-+{
-+ R128OutputType output = OUTPUT_NONE;
-+
-+ switch (r128_output->ConnectorType) {
-+ case CONNECTOR_VGA:
-+ output = OUTPUT_VGA;
-+ break;
-+ case CONNECTOR_LVDS:
-+ output = OUTPUT_LVDS;
-+ break;
-+ case CONNECTOR_DVI_D:
-+ case CONNECTOR_DVI_I:
-+ case CONNECTOR_DVI_A:
-+ output = OUTPUT_DVI;
-+ break;
-+ default:
-+ output = OUTPUT_NONE;
-+ }
-+
-+ r128_output->type = output;
-+}
-+
-+void R128SetupGenericConnectors(ScrnInfoPtr pScrn)
-+{
-+ R128InfoPtr info = R128PTR(pScrn);
-+
-+ if (!info->HasCRTC2 && !info->isDFP) {
-+ info->BiosConnector[0].ConnectorType = CONNECTOR_VGA;
-+ info->BiosConnector[0].valid = TRUE;
-+ return;
-+ } else if (!info->HasCRTC2) {
-+ info->BiosConnector[0].ConnectorType = CONNECTOR_DVI_D;
-+ info->BiosConnector[0].valid = TRUE;
-+ return;
-+ }
-+
-+ info->BiosConnector[0].ConnectorType = CONNECTOR_LVDS;
-+ info->BiosConnector[0].valid = TRUE;
-+
-+ info->BiosConnector[1].ConnectorType = CONNECTOR_VGA;
-+ info->BiosConnector[1].valid = TRUE;
-+}
-+
-+Bool R128SetupConnectors(ScrnInfoPtr pScrn)
-+{
-+ R128InfoPtr info = R128PTR(pScrn);
-+ xf86OutputPtr output;
-+ int num_vga = 0;
-+ int num_dvi = 0;
-+ int i;
-+
-+ for (i = 0; i < R128_MAX_BIOS_CONNECTOR; i++) {
-+ info->BiosConnector[i].valid = FALSE;
-+ info->BiosConnector[i].ConnectorType = CONNECTOR_NONE;
-+ }
-+
-+ /* XXX: Can we make R128GetConnectorInfoFromBIOS()? */
-+ R128SetupGenericConnectors(pScrn);
-+
-+ for (i = 0; i < R128_MAX_BIOS_CONNECTOR; i++) {
-+ if (info->BiosConnector[i].valid) {
-+ if ((info->BiosConnector[i].ConnectorType == CONNECTOR_DVI_D) ||
-+ (info->BiosConnector[i].ConnectorType == CONNECTOR_DVI_I) ||
-+ (info->BiosConnector[i].ConnectorType == CONNECTOR_DVI_A)) {
-+ num_dvi++;
-+ } else if (info->BiosConnector[i].ConnectorType == CONNECTOR_VGA) {
-+ num_vga++;
-+ }
-+ }
-+ }
-+
-+ for (i = 0; i < R128_MAX_BIOS_CONNECTOR; i++) {
-+ if (info->BiosConnector[i].valid) {
-+ R128I2CBusRec i2c;
-+ R128OutputPrivatePtr r128_output;
-+ R128ConnectorType conntype = info->BiosConnector[i].ConnectorType;
-+
-+ if (conntype == CONNECTOR_NONE)
-+ continue;
-+
-+ r128_output = xnfcalloc(sizeof(R128OutputPrivateRec), 1);
-+ if (!r128_output) return FALSE;
-+
-+ r128_output->MonType = MT_UNKNOWN;
-+ r128_output->ConnectorType = conntype;
-+ r128_output->num = i;
-+
-+ if (conntype == CONNECTOR_LVDS) {
-+ output = R128OutputCreate(pScrn, "LVDS", 0);
-+ } else if (conntype == CONNECTOR_VGA) {
-+ output = R128OutputCreate(pScrn, "VGA-%d", --num_vga);
-+ } else {
-+ output = R128OutputCreate(pScrn, "DVI-%d", --num_dvi);
-+ }
-+
-+ if (!output) return FALSE;
-+ output->interlaceAllowed = TRUE;
-+ output->doubleScanAllowed = TRUE;
-+ output->driver_private = r128_output;
-+ output->possible_clones = 0;
-+ if (conntype == CONNECTOR_LVDS || !info->HasCRTC2)
-+ output->possible_crtcs = 1;
-+ else
-+ output->possible_crtcs = 2;
-+
-+ if (conntype != CONNECTOR_LVDS && info->DDC) {
-+ i2c.ddc_reg = R128_GPIO_MONID;
-+ i2c.put_clk_mask = R128_GPIO_MONID_EN_3;
-+ i2c.get_clk_mask = R128_GPIO_MONID_Y_3;
-+ if (conntype == CONNECTOR_VGA) {
-+ i2c.put_data_mask = R128_GPIO_MONID_EN_1;
-+ i2c.get_data_mask = R128_GPIO_MONID_Y_1;
-+ } else {
-+ i2c.put_data_mask = R128_GPIO_MONID_EN_0;
-+ i2c.get_data_mask = R128_GPIO_MONID_Y_0;
-+ }
-+ r128_output->ddc_i2c = i2c;
-+ R128I2CInit(output, &r128_output->pI2CBus, output->name);
-+ }
-+
-+ R128SetOutputType(pScrn, r128_output);
-+ }
-+ }
-+
-+ return TRUE;
-+}
-diff --git a/src/r128_probe.c b/src/r128_probe.c
-index 12e0c1c..e623bc9 100644
---- a/src/r128_probe.c
-+++ b/src/r128_probe.c
-@@ -48,7 +48,6 @@
- #include "xf86Resources.h"
- #endif
-
--#include "compat-api.h"
- #include "r128_probe.h"
-
- #ifndef XSERVER_LIBPCIACCESS
-diff --git a/src/r128_probe.h b/src/r128_probe.h
-index 7b55e71..f521a13 100644
---- a/src/r128_probe.h
-+++ b/src/r128_probe.h
-@@ -37,6 +37,15 @@
- #define _R128_PROBE_H_ 1
-
- #include "xf86str.h"
-+#include "xf86DDC.h"
-+#include "randrstr.h"
-+#include "xf86Crtc.h"
-+
-+#include "compat-api.h"
-+
-+#ifdef USE_EXA
-+#include "exa.h"
-+#endif
-
- /* Chip definitions */
- #define PCI_VENDOR_ATI 0x1002
-@@ -90,6 +99,73 @@
-
- extern DriverRec R128;
-
-+typedef enum
-+{
-+ MT_UNKNOWN = -1,
-+ MT_NONE = 0,
-+ MT_CRT = 1,
-+ MT_LCD = 2,
-+ MT_DFP = 3,
-+ MT_CTV = 4,
-+ MT_STV = 5
-+} R128MonitorType;
-+
-+typedef enum
-+{
-+ CONNECTOR_NONE,
-+ CONNECTOR_VGA,
-+ CONNECTOR_DVI_I,
-+ CONNECTOR_DVI_D,
-+ CONNECTOR_DVI_A,
-+ CONNECTOR_LVDS
-+} R128ConnectorType;
-+
-+typedef enum
-+{
-+ OUTPUT_NONE,
-+ OUTPUT_VGA,
-+ OUTPUT_DVI,
-+ OUTPUT_LVDS
-+} R128OutputType;
-+
-+typedef struct {
-+ CARD32 ddc_reg;
-+ CARD32 put_clk_mask;
-+ CARD32 put_data_mask;
-+ CARD32 get_clk_mask;
-+ CARD32 get_data_mask;
-+} R128I2CBusRec, *R128I2CBusPtr;
-+
-+typedef struct _R128CrtcPrivateRec {
-+#ifdef HAVE_XAA_H
-+ FBLinearPtr rotate_mem_xaa;
-+#endif
-+#ifdef USE_EXA
-+ ExaOffscreenArea *rotate_mem_exa;
-+#endif
-+ int crtc_id;
-+ CARD32 cursor_offset;
-+ /* Lookup table values to be set when the CRTC is enabled */
-+ CARD8 lut_r[256], lut_g[256], lut_b[256];
-+} R128CrtcPrivateRec, *R128CrtcPrivatePtr;
-+
-+typedef struct {
-+ R128ConnectorType ConnectorType;
-+ Bool valid;
-+} R128BIOSConnector;
-+
-+typedef struct _R128OutputPrivateRec {
-+ int num;
-+ R128OutputType type;
-+ R128ConnectorType ConnectorType;
-+ R128MonitorType MonType;
-+ I2CBusPtr pI2CBus;
-+ R128I2CBusRec ddc_i2c;
-+} R128OutputPrivateRec, *R128OutputPrivatePtr;
-+
-+#define R128_MAX_CRTC 2
-+#define R128_MAX_BIOS_CONNECTOR 2
-+
- typedef struct
- {
- Bool IsDRIEnabled;
-@@ -101,6 +177,9 @@ typedef struct
- Bool IsSecondaryRestored;
- Bool RestorePrimary;
-
-+ xf86CrtcPtr pCrtc[R128_MAX_CRTC];
-+ R128CrtcPrivatePtr Controller[R128_MAX_CRTC];
-+
- ScrnInfoPtr pSecondaryScrn;
- ScrnInfoPtr pPrimaryScrn;
- } R128EntRec, *R128EntPtr;
-diff --git a/src/r128_video.c b/src/r128_video.c
-index dccaa42..6439a24 100644
---- a/src/r128_video.c
-+++ b/src/r128_video.c
-@@ -226,7 +226,7 @@ R128SetupImageVideo(ScreenPtr pScreen)
- return NULL;
-
- adapt->type = XvWindowMask | XvInputMask | XvImageMask;
-- adapt->flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT;
-+ adapt->flags = VIDEO_OVERLAID_IMAGES /*| VIDEO_CLIP_TO_VIEWPORT*/;
- adapt->name = "ATI Rage128 Video Overlay";
- adapt->nEncodings = 1;
- adapt->pEncodings = &DummyEncoding;
-@@ -849,6 +849,13 @@ R128PutImage(
- int top, left, npixels, nlines;
- BoxRec dstBox;
- CARD32 tmp;
-+
-+ /* Currently, the video is only visible on the first monitor.
-+ * In the future we could try to make this smarter, or just implement
-+ * textured video. */
-+ xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
-+ xf86CrtcPtr crtc = xf86_config->crtc[0];
-+
- #if X_BYTE_ORDER == X_BIG_ENDIAN
- unsigned char *R128MMIO = info->MMIO;
- CARD32 config_cntl = INREG(R128_CONFIG_CNTL);
-@@ -893,10 +900,10 @@ R128PutImage(
- clipBoxes, width, height))
- return Success;
-
-- dstBox.x1 -= pScrn->frameX0;
-- dstBox.x2 -= pScrn->frameX0;
-- dstBox.y1 -= pScrn->frameY0;
-- dstBox.y2 -= pScrn->frameY0;
-+ dstBox.x1 -= crtc->x;
-+ dstBox.x2 -= crtc->x;
-+ dstBox.y1 -= crtc->y;
-+ dstBox.y2 -= crtc->y;
-
- switch(id) {
- case FOURCC_YV12:
---
-2.2.2
-
-
-From 539320429ff1cf8918862da3f950c8740ba63ec4 Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Fri, 4 Jul 2014 12:44:30 -0700
-Subject: Only enable CRTCs for DPMSModeOn
-
-This was suggested as a power saving tip.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
-Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
----
- src/r128_crtc.c | 14 ++++++++++++++
- 1 file changed, 14 insertions(+)
-
-diff --git a/src/r128_crtc.c b/src/r128_crtc.c
-index 35e1fee..8a6ec44 100644
---- a/src/r128_crtc.c
-+++ b/src/r128_crtc.c
-@@ -84,6 +84,20 @@ static void r128_crtc_dpms(xf86CrtcPtr crtc, int mode)
- break;
- }
-
-+ if (mode != DPMSModeOn) {
-+ if (r128_crtc->crtc_id) {
-+ OUTREGP(R128_CRTC2_GEN_CNTL, 0, ~R128_CRTC2_EN);
-+ } else {
-+ OUTREGP(R128_CRTC_GEN_CNTL, 0, ~R128_CRTC_EN);
-+ }
-+ } else {
-+ if (r128_crtc->crtc_id) {
-+ OUTREGP(R128_CRTC2_GEN_CNTL, R128_CRTC2_EN, ~R128_CRTC2_EN);
-+ } else {
-+ OUTREGP(R128_CRTC_GEN_CNTL, R128_CRTC_EN, ~R128_CRTC_EN);
-+ }
-+ }
-+
- if (mode != DPMSModeOff)
- r128_crtc_load_lut(crtc);
- }
---
-2.2.2
-
-
-From 4c6457e1893e16546c03ca85a2fa7378b6c927f3 Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Mon, 7 Jul 2014 18:49:15 -0700
-Subject: Map and unmap the MMIO better
-
-Now that the MMIO stays mapped during several function calls, we need to
-remember to unmap it if any of them fail. This also fixes a PowerPC code
-path that was not updated to work with the longer lived MMIO.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
----
- src/r128_driver.c | 11 +++++------
- 1 file changed, 5 insertions(+), 6 deletions(-)
-
-diff --git a/src/r128_driver.c b/src/r128_driver.c
-index 9205328..e7833ed 100644
---- a/src/r128_driver.c
-+++ b/src/r128_driver.c
-@@ -641,15 +641,10 @@ static Bool R128GetPLLParameters(ScrnInfoPtr pScrn)
- pll->min_pll_freq = 12500;
- pll->max_pll_freq = 25000;
-
-- /* need to memory map the io to use INPLL since it
-- has not been done yet at this point in the startup */
-- R128MapMMIO(pScrn);
- x_mpll_ref_fb_div = INPLL(pScrn, R128_X_MPLL_REF_FB_DIV);
- xclk_cntl = INPLL(pScrn, R128_XCLK_CNTL) & 0x7;
- pll->reference_div =
- INPLL(pScrn,R128_PPLL_REF_DIV) & R128_PPLL_REF_DIV_MASK;
-- /* unmap it again */
-- R128UnmapMMIO(pScrn);
-
- Nx = (x_mpll_ref_fb_div & 0x00FF00) >> 8;
- M = (x_mpll_ref_fb_div & 0x0000FF);
-@@ -959,7 +954,7 @@ static Bool R128PreInitConfig(ScrnInfoPtr pScrn)
-
- /* Read registers used to determine options */
- from = X_PROBED;
-- R128MapMMIO(pScrn);
-+ if (!R128MapMMIO(pScrn)) return FALSE;
- R128MMIO = info->MMIO;
-
- if (info->FBDev)
-@@ -1641,6 +1636,10 @@ Bool R128PreInit(ScrnInfoPtr pScrn, int flags)
- if (info->VGAAccess)
- vgaHWFreeHWRec(pScrn);
- #endif
-+
-+ if (info->MMIO) R128UnmapMMIO(pScrn);
-+ info->MMIO = NULL;
-+
- R128FreeRec(pScrn);
- return FALSE;
- }
---
-2.2.2
-
-
-From de7fa61b06c887df7a89154bf0f07703a665263a Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Wed, 9 Jul 2014 11:37:12 -0700
-Subject: Split up output register functions
-
-The old code was writing registers more often than it needed to. TMDS
-writes were triggered by changing the mode for an LVDS panel and RMX
-writes were triggered by changing the mode for the second crtc. This
-splits TMDS, LVDS, DAC and RMX calls into their own functions.
-
-Also note that routing bits have been specified. R128_FP_SEL_CRTC2 and
-R128_LVDS_SEL_CRTC2 are always unset to make the panels use the first
-crtc. R128_DAC_CRT_SEL_CRTC2 is unset unless LVDS is already using the
-first crtc.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
-Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
----
- src/r128.h | 8 +-
- src/r128_crtc.c | 20 -----
- src/r128_driver.c | 217 ++++++++++++++++++++++++++++++------------------------
- src/r128_output.c | 30 +++++++-
- src/r128_probe.h | 2 +
- 5 files changed, 157 insertions(+), 120 deletions(-)
-
-diff --git a/src/r128.h b/src/r128.h
-index fe757f8..d01b5c1 100644
---- a/src/r128.h
-+++ b/src/r128.h
-@@ -554,7 +554,10 @@ extern int R128MinBits(int val);
- extern void R128InitVideo(ScreenPtr pScreen);
-
- extern void R128InitCommonRegisters(R128SavePtr save, R128InfoPtr info);
--extern void R128InitFPRegisters(R128SavePtr orig, R128SavePtr save, DisplayModePtr mode, R128InfoPtr info);
-+extern void R128InitDACRegisters(R128SavePtr orig, R128SavePtr save, xf86OutputPtr output);
-+extern void R128InitRMXRegisters(R128SavePtr orig, R128SavePtr save, xf86OutputPtr output, DisplayModePtr mode);
-+extern void R128InitFPRegisters(R128SavePtr orig, R128SavePtr save, xf86OutputPtr output);
-+extern void R128InitLVDSRegisters(R128SavePtr orig, R128SavePtr save, xf86OutputPtr output);
- extern Bool R128InitCrtcBase(xf86CrtcPtr crtc, R128SavePtr save, int x, int y);
- extern Bool R128InitCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr save, DisplayModePtr mode, R128InfoPtr info);
- extern void R128InitPLLRegisters(ScrnInfoPtr pScrn, R128SavePtr save, R128PLLPtr pll, double dot_clock);
-@@ -564,7 +567,10 @@ extern Bool R128InitCrtc2Registers(ScrnInfoPtr pScrn, R128SavePtr save, D
- extern void R128InitPLL2Registers(ScrnInfoPtr pScrn, R128SavePtr save, R128PLLPtr pll, double dot_clock);
- extern Bool R128InitDDA2Registers(ScrnInfoPtr pScrn, R128SavePtr save, R128PLLPtr pll, R128InfoPtr info, DisplayModePtr mode);
- extern void R128RestoreCommonRegisters(ScrnInfoPtr pScrn, R128SavePtr restore);
-+extern void R128RestoreDACRegisters(ScrnInfoPtr pScrn, R128SavePtr restore);
-+extern void R128RestoreRMXRegisters(ScrnInfoPtr pScrn, R128SavePtr restore);
- extern void R128RestoreFPRegisters(ScrnInfoPtr pScrn, R128SavePtr restore);
-+extern void R128RestoreLVDSRegisters(ScrnInfoPtr pScrn, R128SavePtr restore);
- extern void R128RestoreCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr restore);
- extern void R128RestorePLLRegisters(ScrnInfoPtr pScrn, R128SavePtr restore);
- extern void R128RestoreDDARegisters(ScrnInfoPtr pScrn, R128SavePtr restore);
-diff --git a/src/r128_crtc.c b/src/r128_crtc.c
-index 8a6ec44..9c3d0a9 100644
---- a/src/r128_crtc.c
-+++ b/src/r128_crtc.c
-@@ -133,26 +133,14 @@ static void r128_crtc_mode_prepare(xf86CrtcPtr crtc)
- static void r128_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode, DisplayModePtr adjusted_mode, int x, int y)
- {
- ScrnInfoPtr pScrn = crtc->scrn;
-- xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
- R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
- R128InfoPtr info = R128PTR(pScrn);
-- R128OutputType otype = OUTPUT_NONE;
--
- double dot_clock = adjusted_mode->Clock / 1000.0;
-- int i;
-
- if (r128_crtc->cursor_offset) r128_crtc_hide_cursor(crtc);
- xf86PrintModeline(pScrn->scrnIndex, adjusted_mode);
- R128InitCommonRegisters(&info->ModeReg, info);
-
-- for (i = 0; i < xf86_config->num_output; i++) {
-- xf86OutputPtr output = xf86_config->output[i];
-- R128OutputPrivatePtr r128_output = output->driver_private;
--
-- if (output->crtc == crtc)
-- otype = r128_output->type;
-- }
--
- switch (r128_crtc->crtc_id) {
- case 0:
- R128InitCrtcRegisters(pScrn, &info->ModeReg, adjusted_mode, info);
-@@ -178,8 +166,6 @@ static void r128_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode, DisplayMod
- break;
- }
-
-- if (otype == OUTPUT_DVI || otype == OUTPUT_LVDS)
-- R128InitFPRegisters(&info->SavedReg, &info->ModeReg, adjusted_mode, info);
- R128RestoreCommonRegisters(pScrn, &info->ModeReg);
-
- switch (r128_crtc->crtc_id) {
-@@ -195,12 +181,6 @@ static void r128_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode, DisplayMod
- break;
- }
-
-- if (otype == OUTPUT_DVI || otype == OUTPUT_LVDS)
-- R128RestoreFPRegisters(pScrn, &info->ModeReg);
--
-- /* XXX: InitFPRegisters looks similar to radeon's InitRMXRegisters so
-- * maybe it should be called from mode_set in the output code.
-- */
- if (r128_crtc->cursor_offset) r128_crtc_show_cursor(crtc);
- }
-
-diff --git a/src/r128_driver.c b/src/r128_driver.c
-index e7833ed..8e15b0c 100644
---- a/src/r128_driver.c
-+++ b/src/r128_driver.c
-@@ -2376,9 +2376,6 @@ void R128RestoreCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
- OUTREGP(R128_CRTC_EXT_CNTL, restore->crtc_ext_cntl,
- R128_CRTC_VSYNC_DIS | R128_CRTC_HSYNC_DIS | R128_CRTC_DISPLAY_DIS);
-
-- OUTREGP(R128_DAC_CNTL, restore->dac_cntl,
-- R128_DAC_RANGE_CNTL | R128_DAC_BLANKING);
--
- OUTREG(R128_CRTC_H_TOTAL_DISP, restore->crtc_h_total_disp);
- OUTREG(R128_CRTC_H_SYNC_STRT_WID, restore->crtc_h_sync_strt_wid);
- OUTREG(R128_CRTC_V_TOTAL_DISP, restore->crtc_v_total_disp);
-@@ -2389,8 +2386,7 @@ void R128RestoreCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
- }
-
- /* Write CRTC2 registers. */
--void R128RestoreCrtc2Registers(ScrnInfoPtr pScrn,
-- R128SavePtr restore)
-+void R128RestoreCrtc2Registers(ScrnInfoPtr pScrn, R128SavePtr restore)
- {
- R128InfoPtr info = R128PTR(pScrn);
- unsigned char *R128MMIO = info->MMIO;
-@@ -2407,26 +2403,48 @@ void R128RestoreCrtc2Registers(ScrnInfoPtr pScrn,
- OUTREG(R128_CRTC2_PITCH, restore->crtc2_pitch);
- }
-
--/* Write flat panel registers */
--void R128RestoreFPRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
-+/* Write DAC registers */
-+void R128RestoreDACRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
-+{
-+ R128InfoPtr info = R128PTR(pScrn);
-+ unsigned char *R128MMIO = info->MMIO;
-+
-+ OUTREGP(R128_DAC_CNTL, restore->dac_cntl,
-+ R128_DAC_RANGE_CNTL | R128_DAC_BLANKING);
-+}
-+
-+/* Write RMX registers */
-+void R128RestoreRMXRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
- {
- R128InfoPtr info = R128PTR(pScrn);
- unsigned char *R128MMIO = info->MMIO;
-- CARD32 tmp;
-
-- if (info->BIOSDisplay != R128_DUALHEAD)
-- OUTREG(R128_CRTC2_GEN_CNTL, restore->crtc2_gen_cntl);
- OUTREG(R128_FP_HORZ_STRETCH, restore->fp_horz_stretch);
- OUTREG(R128_FP_VERT_STRETCH, restore->fp_vert_stretch);
- OUTREG(R128_FP_CRTC_H_TOTAL_DISP, restore->fp_crtc_h_total_disp);
- OUTREG(R128_FP_CRTC_V_TOTAL_DISP, restore->fp_crtc_v_total_disp);
- OUTREG(R128_FP_H_SYNC_STRT_WID, restore->fp_h_sync_strt_wid);
- OUTREG(R128_FP_V_SYNC_STRT_WID, restore->fp_v_sync_strt_wid);
-- OUTREG(R128_TMDS_CRC, restore->tmds_crc);
-- OUTREG(R128_FP_PANEL_CNTL, restore->fp_panel_cntl);
-+}
-+
-+/* Write flat panel registers */
-+void R128RestoreFPRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
-+{
-+ R128InfoPtr info = R128PTR(pScrn);
-+ unsigned char *R128MMIO = info->MMIO;
-+
-+ OUTREG(R128_TMDS_CRC, restore->tmds_crc);
-+ OUTREG(R128_TMDS_TRANSMITTER_CNTL, restore->tmds_transmitter_cntl);
-+ OUTREG(R128_FP_PANEL_CNTL, restore->fp_panel_cntl);
- OUTREG(R128_FP_GEN_CNTL, restore->fp_gen_cntl & ~(CARD32)R128_FP_BLANK_DIS);
-+}
-
-- if(info->isDFP) return;
-+/* Write LVDS registers */
-+void R128RestoreLVDSRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
-+{
-+ R128InfoPtr info = R128PTR(pScrn);
-+ unsigned char *R128MMIO = info->MMIO;
-+ CARD32 tmp;
-
- tmp = INREG(R128_LVDS_GEN_CNTL);
- if ((tmp & (R128_LVDS_ON | R128_LVDS_BLON)) ==
-@@ -2885,7 +2903,10 @@ static void R128Restore(ScrnInfoPtr pScrn)
- R128RestoreDDARegisters(pScrn, restore);
- R128RestoreCrtcRegisters(pScrn, restore);
- R128RestorePLLRegisters(pScrn, restore);
-+ R128RestoreDACRegisters(pScrn, restore);
-+ R128RestoreRMXRegisters(pScrn, restore);
- R128RestoreFPRegisters(pScrn, restore);
-+ R128RestoreLVDSRegisters(pScrn, restore);
- }
-
- #ifdef WITH_VGAHW
-@@ -3058,21 +3079,14 @@ Bool R128InitCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr save,
- if((info->DisplayType == MT_DFP) ||
- (info->DisplayType == MT_LCD))
- {
-- save->crtc_ext_cntl = R128_VGA_ATI_LINEAR |
-- R128_XCRT_CNT_EN;
- save->crtc_gen_cntl &= ~(R128_CRTC_DBL_SCAN_EN |
- R128_CRTC_INTERLACE_EN);
- }
-- else
-- save->crtc_ext_cntl = R128_VGA_ATI_LINEAR |
-+
-+ save->crtc_ext_cntl = R128_VGA_ATI_LINEAR |
- R128_XCRT_CNT_EN |
- R128_CRTC_CRT_ON;
-
-- save->dac_cntl = (R128_DAC_MASK_ALL
-- | R128_DAC_VGA_ADR_EN
-- | (info->dac6bits ? 0 : R128_DAC_8BIT_EN));
--
--
- if(info->isDFP && !info->isPro2)
- {
- if(info->PanelXRes < mode->CrtcHDisplay)
-@@ -3224,36 +3238,50 @@ Bool R128InitCrtc2Registers(ScrnInfoPtr pScrn, R128SavePtr save,
- return TRUE;
- }
-
--/* Define CRTC registers for requested video mode. */
--void R128InitFPRegisters(R128SavePtr orig, R128SavePtr save,
-- DisplayModePtr mode, R128InfoPtr info)
-+/* Define DAC registers for the requested video mode. */
-+void R128InitDACRegisters(R128SavePtr orig, R128SavePtr save, xf86OutputPtr output)
-+{
-+ ScrnInfoPtr pScrn = output->scrn;
-+ R128InfoPtr info = R128PTR(pScrn);
-+ xf86CrtcPtr crtc = output->crtc;
-+ R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
-+
-+ save->dac_cntl = (R128_DAC_MASK_ALL | R128_DAC_VGA_ADR_EN |
-+ (!r128_crtc->crtc_id ? 0 : R128_DAC_CRT_SEL_CRTC2) |
-+ (info->dac6bits ? 0 : R128_DAC_8BIT_EN));
-+}
-+
-+/* Define RMX registers for the requested video mode. */
-+void R128InitRMXRegisters(R128SavePtr orig, R128SavePtr save,
-+ xf86OutputPtr output, DisplayModePtr mode)
- {
-+ R128OutputPrivatePtr r128_output = output->driver_private;
-+
- int xres = mode->CrtcHDisplay;
- int yres = mode->CrtcVDisplay;
- float Hratio, Vratio;
-
-- if (info->BIOSDisplay == R128_BIOS_DISPLAY_CRT) {
-- save->crtc_ext_cntl |= R128_CRTC_CRT_ON;
-- save->crtc2_gen_cntl = 0;
-- save->fp_gen_cntl = orig->fp_gen_cntl;
-- save->fp_gen_cntl &= ~(R128_FP_FPON |
-- R128_FP_CRTC_USE_SHADOW_VEND |
-- R128_FP_CRTC_HORZ_DIV2_EN |
-- R128_FP_CRTC_HOR_CRT_DIV2_DIS |
-- R128_FP_USE_SHADOW_EN);
-- save->fp_gen_cntl |= (R128_FP_SEL_CRTC2 |
-- R128_FP_CRTC_DONT_SHADOW_VPAR);
-- save->fp_panel_cntl = orig->fp_panel_cntl & (CARD32)~R128_FP_DIGON;
-- save->lvds_gen_cntl = orig->lvds_gen_cntl &
-- (CARD32)~(R128_LVDS_ON | R128_LVDS_BLON);
-+ save->fp_crtc_h_total_disp = save->crtc_h_total_disp;
-+ save->fp_crtc_v_total_disp = save->crtc_v_total_disp;
-+ save->fp_h_sync_strt_wid = save->crtc_h_sync_strt_wid;
-+ save->fp_v_sync_strt_wid = save->crtc_v_sync_strt_wid;
-+
-+ if (r128_output->type != OUTPUT_DVI && r128_output->type != OUTPUT_LVDS)
- return;
-- }
-
-- if (xres > info->PanelXRes) xres = info->PanelXRes;
-- if (yres > info->PanelYRes) yres = info->PanelYRes;
-+ if (r128_output->PanelXRes == 0 || r128_output->PanelYRes == 0) {
-+ xres = r128_output->PanelXRes;
-+ yres = r128_output->PanelYRes;
-+
-+ Hratio = 1.0;
-+ Vratio = 1.0;
-+ } else {
-+ if (xres > r128_output->PanelXRes) xres = r128_output->PanelXRes;
-+ if (yres > r128_output->PanelYRes) yres = r128_output->PanelYRes;
-
-- Hratio = (float)xres/(float)info->PanelXRes;
-- Vratio = (float)yres/(float)info->PanelYRes;
-+ Hratio = (float)xres/(float)r128_output->PanelXRes;
-+ Vratio = (float)yres/(float)r128_output->PanelYRes;
-+ }
-
- save->fp_horz_stretch =
- (((((int)(Hratio * R128_HORZ_STRETCH_RATIO_MAX + 0.5))
-@@ -3263,7 +3291,7 @@ void R128InitFPRegisters(R128SavePtr orig, R128SavePtr save,
- R128_HORZ_STRETCH_RESERVED)));
- save->fp_horz_stretch &= ~R128_HORZ_AUTO_RATIO_FIX_EN;
- save->fp_horz_stretch &= ~R128_AUTO_HORZ_RATIO;
-- if (xres == info->PanelXRes)
-+ if (xres == r128_output->PanelXRes)
- save->fp_horz_stretch &= ~(R128_HORZ_STRETCH_BLEND | R128_HORZ_STRETCH_ENABLE);
- else
- save->fp_horz_stretch |= (R128_HORZ_STRETCH_BLEND | R128_HORZ_STRETCH_ENABLE);
-@@ -3274,67 +3302,60 @@ void R128InitFPRegisters(R128SavePtr orig, R128SavePtr save,
- (orig->fp_vert_stretch & (R128_VERT_PANEL_SIZE |
- R128_VERT_STRETCH_RESERVED)));
- save->fp_vert_stretch &= ~R128_VERT_AUTO_RATIO_EN;
-- if (yres == info->PanelYRes)
-+ if (yres == r128_output->PanelYRes)
- save->fp_vert_stretch &= ~(R128_VERT_STRETCH_ENABLE | R128_VERT_STRETCH_BLEND);
- else
- save->fp_vert_stretch |= (R128_VERT_STRETCH_ENABLE | R128_VERT_STRETCH_BLEND);
-+}
-
-- save->fp_gen_cntl = (orig->fp_gen_cntl &
-- (CARD32)~(R128_FP_SEL_CRTC2 |
-- R128_FP_CRTC_USE_SHADOW_VEND |
-- R128_FP_CRTC_HORZ_DIV2_EN |
-- R128_FP_CRTC_HOR_CRT_DIV2_DIS |
-- R128_FP_USE_SHADOW_EN));
--
-- save->fp_panel_cntl = orig->fp_panel_cntl;
-- save->lvds_gen_cntl = orig->lvds_gen_cntl;
-- save->tmds_crc = orig->tmds_crc;
--
-- /* Disable CRT output by disabling CRT output and setting the CRT
-- DAC to use CRTC2, which we set to 0's. In the future, we will
-- want to use the dual CRTC capabilities of the R128 to allow both
-- the flat panel and external CRT to either simultaneously display
-- the same image or display two different images. */
--
--
-- if(!info->isDFP){
-- if (info->BIOSDisplay == R128_BIOS_DISPLAY_FP_CRT) {
-- save->crtc_ext_cntl |= R128_CRTC_CRT_ON;
-- } else if (info->BIOSDisplay == R128_DUALHEAD) {
-- save->crtc_ext_cntl |= R128_CRTC_CRT_ON;
-- save->dac_cntl |= R128_DAC_CRT_SEL_CRTC2;
-- save->dac_cntl |= R128_DAC_PALETTE2_SNOOP_EN;
-- } else {
-- save->crtc_ext_cntl &= ~R128_CRTC_CRT_ON;
-- save->dac_cntl |= R128_DAC_CRT_SEL_CRTC2;
-- save->crtc2_gen_cntl = 0;
-- }
-- }
-+/* Define flat panel registers for the requested video mode. */
-+void R128InitFPRegisters(R128SavePtr orig, R128SavePtr save, xf86OutputPtr output)
-+{
-+ xf86CrtcPtr crtc = output->crtc;
-+ R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
-
- /* WARNING: Be careful about turning on the flat panel */
-- if(info->isDFP){
-- save->fp_gen_cntl = orig->fp_gen_cntl;
--
-- save->fp_gen_cntl &= ~(R128_FP_CRTC_USE_SHADOW_VEND |
-- R128_FP_CRTC_USE_SHADOW_ROWCUR |
-- R128_FP_CRTC_HORZ_DIV2_EN |
-- R128_FP_CRTC_HOR_CRT_DIV2_DIS |
-- R128_FP_CRT_SYNC_SEL |
-- R128_FP_USE_SHADOW_EN);
--
-- save->fp_panel_cntl |= (R128_FP_DIGON | R128_FP_BLON);
-- save->fp_gen_cntl |= (R128_FP_FPON | R128_FP_TDMS_EN |
-- R128_FP_CRTC_DONT_SHADOW_VPAR | R128_FP_CRTC_DONT_SHADOW_HEND);
-- save->tmds_transmitter_cntl = (orig->tmds_transmitter_cntl
-- & ~(CARD32)R128_TMDS_PLLRST) | R128_TMDS_PLLEN;
-- }
-+ save->fp_gen_cntl = orig->fp_gen_cntl;
-+ save->fp_panel_cntl = orig->fp_panel_cntl;
-+ save->tmds_transmitter_cntl = orig->tmds_transmitter_cntl;
-+ save->tmds_crc = orig->tmds_crc;
-+
-+ if (r128_crtc->crtc_id)
-+ save->fp_gen_cntl |= R128_FP_SEL_CRTC2;
- else
-- save->lvds_gen_cntl |= (R128_LVDS_ON | R128_LVDS_BLON);
-+ save->fp_gen_cntl &= ~R128_FP_SEL_CRTC2;
-
-- save->fp_crtc_h_total_disp = save->crtc_h_total_disp;
-- save->fp_crtc_v_total_disp = save->crtc_v_total_disp;
-- save->fp_h_sync_strt_wid = save->crtc_h_sync_strt_wid;
-- save->fp_v_sync_strt_wid = save->crtc_v_sync_strt_wid;
-+ save->fp_gen_cntl &= ~(R128_FP_CRTC_USE_SHADOW_VEND |
-+ R128_FP_CRTC_USE_SHADOW_ROWCUR |
-+ R128_FP_CRTC_HORZ_DIV2_EN |
-+ R128_FP_CRTC_HOR_CRT_DIV2_DIS |
-+ R128_FP_CRT_SYNC_SEL |
-+ R128_FP_USE_SHADOW_EN);
-+
-+ save->fp_gen_cntl |= (R128_FP_FPON |
-+ R128_FP_TDMS_EN |
-+ R128_FP_CRTC_DONT_SHADOW_VPAR |
-+ R128_FP_CRTC_DONT_SHADOW_HEND);
-+
-+ save->fp_panel_cntl |= (R128_FP_DIGON | R128_FP_BLON);
-+ save->tmds_transmitter_cntl &= ~R128_TMDS_PLLRST;
-+ save->tmds_transmitter_cntl |= R128_TMDS_PLLEN;
-+}
-+
-+/* Define LVDS registers for the requested video mode. */
-+void R128InitLVDSRegisters(R128SavePtr orig, R128SavePtr save, xf86OutputPtr output)
-+{
-+ xf86CrtcPtr crtc = output->crtc;
-+ R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
-+
-+ save->lvds_gen_cntl = orig->lvds_gen_cntl;
-+
-+ if (r128_crtc->crtc_id)
-+ save->lvds_gen_cntl |= R128_LVDS_SEL_CRTC2;
-+ else
-+ save->lvds_gen_cntl &= ~R128_LVDS_SEL_CRTC2;
-+
-+ save->lvds_gen_cntl |= (R128_LVDS_ON | R128_LVDS_BLON);
- }
-
- /* Define PLL registers for requested video mode. */
-diff --git a/src/r128_output.c b/src/r128_output.c
-index 89a2958..4638067 100644
---- a/src/r128_output.c
-+++ b/src/r128_output.c
-@@ -81,6 +81,31 @@ static void r128_mode_prepare(xf86OutputPtr output)
-
- static void r128_mode_set(xf86OutputPtr output, DisplayModePtr mode, DisplayModePtr adjusted_mode)
- {
-+ ScrnInfoPtr pScrn = output->scrn;
-+ R128InfoPtr info = R128PTR(pScrn);
-+ R128OutputPrivatePtr r128_output = output->driver_private;
-+ xf86CrtcPtr crtc = output->crtc;
-+ R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
-+
-+ if (r128_crtc->crtc_id == 0)
-+ R128InitRMXRegisters(&info->SavedReg, &info->ModeReg, output, adjusted_mode);
-+
-+ if (r128_output->type == OUTPUT_DVI)
-+ R128InitFPRegisters(&info->SavedReg, &info->ModeReg, output);
-+ else if (r128_output->type == OUTPUT_LVDS)
-+ R128InitLVDSRegisters(&info->SavedReg, &info->ModeReg, output);
-+ else if (r128_output->type == OUTPUT_VGA)
-+ R128InitDACRegisters(&info->SavedReg, &info->ModeReg, output);
-+
-+ if (r128_crtc->crtc_id == 0)
-+ R128RestoreRMXRegisters(pScrn, &info->ModeReg);
-+
-+ if (r128_output->type == OUTPUT_DVI)
-+ R128RestoreFPRegisters(pScrn, &info->ModeReg);
-+ else if (r128_output->type == OUTPUT_LVDS)
-+ R128RestoreLVDSRegisters(pScrn, &info->ModeReg);
-+ else if (r128_output->type == OUTPUT_VGA)
-+ R128RestoreDACRegisters(pScrn, &info->ModeReg);
- }
-
- static void r128_mode_commit(xf86OutputPtr output)
-@@ -455,7 +480,10 @@ Bool R128SetupConnectors(ScrnInfoPtr pScrn)
- }
- r128_output->ddc_i2c = i2c;
- R128I2CInit(output, &r128_output->pI2CBus, output->name);
-- }
-+ } else if (conntype == CONNECTOR_LVDS) {
-+ r128_output->PanelXRes = info->PanelXRes;
-+ r128_output->PanelYRes = info->PanelYRes;
-+ }
-
- R128SetOutputType(pScrn, r128_output);
- }
-diff --git a/src/r128_probe.h b/src/r128_probe.h
-index f521a13..95988ec 100644
---- a/src/r128_probe.h
-+++ b/src/r128_probe.h
-@@ -161,6 +161,8 @@ typedef struct _R128OutputPrivateRec {
- R128MonitorType MonType;
- I2CBusPtr pI2CBus;
- R128I2CBusRec ddc_i2c;
-+ int PanelXRes;
-+ int PanelYRes;
- } R128OutputPrivateRec, *R128OutputPrivatePtr;
-
- #define R128_MAX_CRTC 2
---
-2.2.2
-
-
-From 3bbce42414abea6c9977ff2b023ce3210d78f008 Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Wed, 9 Jul 2014 11:40:35 -0700
-Subject: Move display enabling code to DPMS
-
-This ensures that DAC, TMDS and LVDS enable bits are properly saved and
-only set in the dpms hook.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
-Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
----
- src/r128_driver.c | 10 ++--------
- src/r128_output.c | 18 ++++++++++++++++--
- 2 files changed, 18 insertions(+), 10 deletions(-)
-
-diff --git a/src/r128_driver.c b/src/r128_driver.c
-index 8e15b0c..4c03060 100644
---- a/src/r128_driver.c
-+++ b/src/r128_driver.c
-@@ -3083,9 +3083,7 @@ Bool R128InitCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr save,
- R128_CRTC_INTERLACE_EN);
- }
-
-- save->crtc_ext_cntl = R128_VGA_ATI_LINEAR |
-- R128_XCRT_CNT_EN |
-- R128_CRTC_CRT_ON;
-+ save->crtc_ext_cntl |= R128_VGA_ATI_LINEAR | R128_XCRT_CNT_EN;
-
- if(info->isDFP && !info->isPro2)
- {
-@@ -3332,9 +3330,7 @@ void R128InitFPRegisters(R128SavePtr orig, R128SavePtr save, xf86OutputPtr outpu
- R128_FP_CRT_SYNC_SEL |
- R128_FP_USE_SHADOW_EN);
-
-- save->fp_gen_cntl |= (R128_FP_FPON |
-- R128_FP_TDMS_EN |
-- R128_FP_CRTC_DONT_SHADOW_VPAR |
-+ save->fp_gen_cntl |= (R128_FP_CRTC_DONT_SHADOW_VPAR |
- R128_FP_CRTC_DONT_SHADOW_HEND);
-
- save->fp_panel_cntl |= (R128_FP_DIGON | R128_FP_BLON);
-@@ -3354,8 +3350,6 @@ void R128InitLVDSRegisters(R128SavePtr orig, R128SavePtr save, xf86OutputPtr out
- save->lvds_gen_cntl |= R128_LVDS_SEL_CRTC2;
- else
- save->lvds_gen_cntl &= ~R128_LVDS_SEL_CRTC2;
--
-- save->lvds_gen_cntl |= (R128_LVDS_ON | R128_LVDS_BLON);
- }
-
- /* Define PLL registers for requested video mode. */
-diff --git a/src/r128_output.c b/src/r128_output.c
-index 4638067..79c80bf 100644
---- a/src/r128_output.c
-+++ b/src/r128_output.c
-@@ -176,15 +176,22 @@ void R128DPMSSetOn(xf86OutputPtr output)
- unsigned char *R128MMIO = info->MMIO;
- R128OutputPrivatePtr r128_output = output->driver_private;
- R128MonitorType MonType = r128_output->MonType;
-+ R128SavePtr save = &info->ModeReg;
-
- switch(MonType) {
- case MT_LCD:
- OUTREGP(R128_LVDS_GEN_CNTL, R128_LVDS_BLON, ~R128_LVDS_BLON);
- usleep(info->PanelPwrDly * 1000);
- OUTREGP(R128_LVDS_GEN_CNTL, R128_LVDS_ON, ~R128_LVDS_ON);
-+ save->lvds_gen_cntl |= (R128_LVDS_ON | R128_LVDS_BLON);
- break;
- case MT_DFP:
-- OUTREGP(R128_FP_GEN_CNTL, (R128_FP_FPON | R128_FP_TDMS_EN), ~(R128_FP_FPON | R128_FP_TDMS_EN));
-+ OUTREGP(R128_FP_GEN_CNTL, (R128_FP_FPON | R128_FP_TDMS_EN), ~(R128_FP_FPON | R128_FP_TDMS_EN));
-+ save->fp_gen_cntl |= (R128_FP_FPON | R128_FP_TDMS_EN);
-+ break;
-+ case MT_CRT:
-+ OUTREGP(R128_CRTC_EXT_CNTL, R128_CRTC_CRT_ON, ~R128_CRTC_CRT_ON);
-+ save->crtc_ext_cntl |= R128_CRTC_CRT_ON;
- break;
- default:
- break;
-@@ -198,13 +205,20 @@ void R128DPMSSetOff(xf86OutputPtr output)
- unsigned char *R128MMIO = info->MMIO;
- R128OutputPrivatePtr r128_output = output->driver_private;
- R128MonitorType MonType = r128_output->MonType;
-+ R128SavePtr save = &info->ModeReg;
-
- switch(MonType) {
- case MT_LCD:
- OUTREGP(R128_LVDS_GEN_CNTL, 0, ~(R128_LVDS_BLON | R128_LVDS_ON));
-+ save->lvds_gen_cntl &= ~(R128_LVDS_BLON | R128_LVDS_ON);
- break;
- case MT_DFP:
-- OUTREGP(R128_FP_GEN_CNTL, 0, ~(R128_FP_FPON | R128_FP_TDMS_EN));
-+ OUTREGP(R128_FP_GEN_CNTL, 0, ~(R128_FP_FPON | R128_FP_TDMS_EN));
-+ save->fp_gen_cntl &= ~(R128_FP_FPON | R128_FP_TDMS_EN);
-+ break;
-+ case MT_CRT:
-+ OUTREGP(R128_CRTC_EXT_CNTL, 0, ~(R128_CRTC_CRT_ON));
-+ save->crtc_ext_cntl &= ~(R128_CRTC_CRT_ON);
- break;
- default:
- break;
---
-2.2.2
-
-
-From e9ea36390ea0478c4b867df3bffdf2b122e0cb15 Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Wed, 16 Jul 2014 00:57:18 -0700
-Subject: Change register name
-
-Surely this is a typo.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
----
- src/r128_output.c | 8 ++++----
- src/r128_reg.h | 2 +-
- 2 files changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/src/r128_output.c b/src/r128_output.c
-index 79c80bf..d7a1c55 100644
---- a/src/r128_output.c
-+++ b/src/r128_output.c
-@@ -186,8 +186,8 @@ void R128DPMSSetOn(xf86OutputPtr output)
- save->lvds_gen_cntl |= (R128_LVDS_ON | R128_LVDS_BLON);
- break;
- case MT_DFP:
-- OUTREGP(R128_FP_GEN_CNTL, (R128_FP_FPON | R128_FP_TDMS_EN), ~(R128_FP_FPON | R128_FP_TDMS_EN));
-- save->fp_gen_cntl |= (R128_FP_FPON | R128_FP_TDMS_EN);
-+ OUTREGP(R128_FP_GEN_CNTL, (R128_FP_FPON | R128_FP_TMDS_EN), ~(R128_FP_FPON | R128_FP_TMDS_EN));
-+ save->fp_gen_cntl |= (R128_FP_FPON | R128_FP_TMDS_EN);
- break;
- case MT_CRT:
- OUTREGP(R128_CRTC_EXT_CNTL, R128_CRTC_CRT_ON, ~R128_CRTC_CRT_ON);
-@@ -213,8 +213,8 @@ void R128DPMSSetOff(xf86OutputPtr output)
- save->lvds_gen_cntl &= ~(R128_LVDS_BLON | R128_LVDS_ON);
- break;
- case MT_DFP:
-- OUTREGP(R128_FP_GEN_CNTL, 0, ~(R128_FP_FPON | R128_FP_TDMS_EN));
-- save->fp_gen_cntl &= ~(R128_FP_FPON | R128_FP_TDMS_EN);
-+ OUTREGP(R128_FP_GEN_CNTL, 0, ~(R128_FP_FPON | R128_FP_TMDS_EN));
-+ save->fp_gen_cntl &= ~(R128_FP_FPON | R128_FP_TMDS_EN);
- break;
- case MT_CRT:
- OUTREGP(R128_CRTC_EXT_CNTL, 0, ~(R128_CRTC_CRT_ON));
-diff --git a/src/r128_reg.h b/src/r128_reg.h
-index dac22e6..9ba0de5 100644
---- a/src/r128_reg.h
-+++ b/src/r128_reg.h
-@@ -599,7 +599,7 @@
- #define R128_FP_GEN_CNTL 0x0284
- # define R128_FP_FPON (1 << 0)
- # define R128_FP_BLANK_DIS (1 << 1)
--# define R128_FP_TDMS_EN (1 << 2)
-+# define R128_FP_TMDS_EN (1 << 2)
- # define R128_FP_DETECT_SENSE (1 << 8)
- # define R128_FP_SEL_CRTC2 (1 << 13)
- # define R128_FP_CRTC_DONT_SHADOW_VPAR (1 << 16)
---
-2.2.2
-
-
-From c95ce4251921f09101911ca5c4ff3940c38cc6b5 Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Wed, 16 Jul 2014 01:29:19 -0700
-Subject: Get entity without code duplication
-
-This fixes the parts of the code that were not using the helper function
-to find the entity.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
----
- src/r128_accel.c | 8 ++------
- src/r128_driver.c | 34 ++++++----------------------------
- 2 files changed, 8 insertions(+), 34 deletions(-)
-
-diff --git a/src/r128_accel.c b/src/r128_accel.c
-index 7ffd15f..4d666c7 100644
---- a/src/r128_accel.c
-+++ b/src/r128_accel.c
-@@ -1853,12 +1853,8 @@ static void R128MMIOAccelInit(ScrnInfoPtr pScrn, XAAInfoRecPtr a)
-
- if(xf86IsEntityShared(pScrn->entityList[0]))
- {
-- DevUnion* pPriv;
-- R128EntPtr pR128Ent;
-- pPriv = xf86GetEntityPrivate(pScrn->entityList[0],
-- getR128EntityIndex());
-- pR128Ent = pPriv->ptr;
--
-+ R128EntPtr pR128Ent = R128EntPriv(pScrn);
-+
- /*if there are more than one devices sharing this entity, we
- have to assign this call back, otherwise the XAA will be
- disabled */
-diff --git a/src/r128_driver.c b/src/r128_driver.c
-index 4c03060..c62a1af 100644
---- a/src/r128_driver.c
-+++ b/src/r128_driver.c
-@@ -241,9 +241,7 @@ static Bool R128MapMMIO(ScrnInfoPtr pScrn)
- /* If the primary screen has already mapped the MMIO region,
- use its pointer instead of mapping it a second time. */
- if (info->IsSecondary) {
-- DevUnion* pPriv = xf86GetEntityPrivate(pScrn->entityList[0],
-- getR128EntityIndex());
-- R128EntPtr pR128Ent = pPriv->ptr;
-+ R128EntPtr pR128Ent = R128EntPriv(pScrn);
- R128InfoPtr info0 = R128PTR(pR128Ent->pPrimaryScrn);
- info->MMIO=info0->MMIO;
- if (info->MMIO) return TRUE;
-@@ -482,11 +480,7 @@ static Bool R128GetBIOSParameters(ScrnInfoPtr pScrn, xf86Int10InfoPtr pInt10)
-
- if(info->DisplayType > MT_NONE)
- {
-- DevUnion* pPriv;
-- R128EntPtr pR128Ent;
-- pPriv = xf86GetEntityPrivate(pScrn->entityList[0],
-- getR128EntityIndex());
-- pR128Ent = pPriv->ptr;
-+ R128EntPtr pR128Ent = R128EntPriv(pScrn);
- pR128Ent->HasSecondary = TRUE;
-
- }
-@@ -506,11 +500,7 @@ static Bool R128GetBIOSParameters(ScrnInfoPtr pScrn, xf86Int10InfoPtr pInt10)
- If something on CRT port, treat it as primary*/
- if(xf86IsEntityShared(pScrn->entityList[0]))
- {
-- DevUnion* pPriv;
-- R128EntPtr pR128Ent;
-- pPriv = xf86GetEntityPrivate(pScrn->entityList[0],
-- getR128EntityIndex());
-- pR128Ent = pPriv->ptr;
-+ R128EntPtr pR128Ent = R128EntPriv(pScrn);
- pR128Ent->BypassSecondary = TRUE;
- }
-
-@@ -1427,24 +1417,16 @@ Bool R128PreInit(ScrnInfoPtr pScrn, int flags)
- {
- if(xf86IsPrimInitDone(pScrn->entityList[0]))
- {
-- DevUnion* pPriv;
-- R128EntPtr pR128Ent;
-+ R128EntPtr pR128Ent = R128EntPriv(pScrn);
- info->IsSecondary = TRUE;
-- pPriv = xf86GetEntityPrivate(pScrn->entityList[0],
-- getR128EntityIndex());
-- pR128Ent = pPriv->ptr;
- if(pR128Ent->BypassSecondary) return FALSE;
- pR128Ent->pSecondaryScrn = pScrn;
- }
- else
- {
-- DevUnion* pPriv;
-- R128EntPtr pR128Ent;
-+ R128EntPtr pR128Ent = R128EntPriv(pScrn);
- info->IsPrimary = TRUE;
- xf86SetPrimInitDone(pScrn->entityList[0]);
-- pPriv = xf86GetEntityPrivate(pScrn->entityList[0],
-- getR128EntityIndex());
-- pR128Ent = pPriv->ptr;
- pR128Ent->pPrimaryScrn = pScrn;
- pR128Ent->IsDRIEnabled = FALSE;
- pR128Ent->BypassSecondary = FALSE;
-@@ -1894,11 +1876,7 @@ Bool R128ScreenInit(SCREEN_INIT_ARGS_DECL)
- R128DRIScreenInit(pScreen);
- if(xf86IsEntityShared(pScrn->entityList[0]))
- {
-- DevUnion* pPriv;
-- R128EntPtr pR128Ent;
-- pPriv = xf86GetEntityPrivate(pScrn->entityList[0],
-- getR128EntityIndex());
-- pR128Ent = pPriv->ptr;
-+ R128EntPtr pR128Ent = R128EntPriv(pScrn);
- pR128Ent->IsDRIEnabled = info->directRenderingEnabled;
- }
- }
---
-2.2.2
-
-
-From d05123eab19705d23310d06a299e61093abbe6cc Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Wed, 16 Jul 2014 17:23:37 -0700
-Subject: Cleanup entity struct
-
-This moves HasCRTC2 into the entity to make it more similar to radeon.
-It also removes IsDRIEnabled for being dead code.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
----
- src/r128.h | 1 -
- src/r128_crtc.c | 3 +--
- src/r128_driver.c | 21 ++++++++-------------
- src/r128_output.c | 12 +++++++-----
- src/r128_probe.c | 1 -
- src/r128_probe.h | 3 +--
- 6 files changed, 17 insertions(+), 24 deletions(-)
-
-diff --git a/src/r128.h b/src/r128.h
-index d01b5c1..0308130 100644
---- a/src/r128.h
-+++ b/src/r128.h
-@@ -520,7 +520,6 @@ typedef struct {
- R128BIOSConnector BiosConnector[R128_MAX_BIOS_CONNECTOR];
-
- /****** Added for dualhead support *******************/
-- BOOL HasCRTC2; /* M3/M4 */
- BOOL IsSecondary; /* second Screen */
- BOOL IsPrimary; /* primary Screen */
- BOOL UseCRT; /* force use CRT port as primary */
-diff --git a/src/r128_crtc.c b/src/r128_crtc.c
-index 9c3d0a9..e48e4d5 100644
---- a/src/r128_crtc.c
-+++ b/src/r128_crtc.c
-@@ -388,7 +388,6 @@ static const xf86CrtcFuncsRec r128_crtc_funcs = {
- Bool R128AllocateControllers(ScrnInfoPtr pScrn, int mask)
- {
- R128EntPtr pR128Ent = R128EntPriv(pScrn);
-- R128InfoPtr info = R128PTR(pScrn);
-
- if (mask & 1) {
- if (pR128Ent->Controller[0])
-@@ -407,7 +406,7 @@ Bool R128AllocateControllers(ScrnInfoPtr pScrn, int mask)
- }
-
- if (mask & 2) {
-- if (!info->HasCRTC2)
-+ if (!pR128Ent->HasCRTC2)
- return TRUE;
-
- pR128Ent->pCrtc[1] = xf86CrtcCreate(pScrn, &r128_crtc_funcs);
-diff --git a/src/r128_driver.c b/src/r128_driver.c
-index c62a1af..3cd3773 100644
---- a/src/r128_driver.c
-+++ b/src/r128_driver.c
-@@ -469,8 +469,9 @@ static Bool R128GetBIOSParameters(ScrnInfoPtr pScrn, xf86Int10InfoPtr pInt10)
- xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
- "Video BIOS not found!\n");
- }
-+ R128EntPtr pR128Ent = R128EntPriv(pScrn);
-
-- if(info->HasCRTC2)
-+ if(pR128Ent->HasCRTC2)
- {
- if(info->IsSecondary)
- {
-@@ -480,7 +481,6 @@ static Bool R128GetBIOSParameters(ScrnInfoPtr pScrn, xf86Int10InfoPtr pInt10)
-
- if(info->DisplayType > MT_NONE)
- {
-- R128EntPtr pR128Ent = R128EntPriv(pScrn);
- pR128Ent->HasSecondary = TRUE;
-
- }
-@@ -771,6 +771,7 @@ static Bool R128PreInitWeight(ScrnInfoPtr pScrn)
- static Bool R128PreInitConfig(ScrnInfoPtr pScrn)
- {
- R128InfoPtr info = R128PTR(pScrn);
-+ R128EntPtr pR128Ent = R128EntPriv(pScrn);
- unsigned char *R128MMIO = info->MMIO;
- EntityInfoPtr pEnt = info->pEnt;
- GDevPtr dev = pEnt->device;
-@@ -865,7 +866,7 @@ static Bool R128PreInitConfig(ScrnInfoPtr pScrn)
- } else {
- info->isDFP = FALSE;
- info->isPro2 = FALSE;
-- info->HasCRTC2 = FALSE;
-+ pR128Ent->HasCRTC2 = FALSE;
- switch (info->Chipset) {
- /* R128 Pro and Pro2 can have DFP, we will deal with it.
- No support for dual-head/xinerama yet.
-@@ -918,7 +919,7 @@ static Bool R128PreInitConfig(ScrnInfoPtr pScrn)
- case PCI_CHIP_RAGE128ML:
- info->HasPanelRegs = TRUE;
- /* which chips support dualhead? */
-- info->HasCRTC2 = TRUE;
-+ pR128Ent->HasCRTC2 = TRUE;
- break;
- case PCI_CHIP_RAGE128RE:
- case PCI_CHIP_RAGE128RF:
-@@ -1428,7 +1429,6 @@ Bool R128PreInit(ScrnInfoPtr pScrn, int flags)
- info->IsPrimary = TRUE;
- xf86SetPrimInitDone(pScrn->entityList[0]);
- pR128Ent->pPrimaryScrn = pScrn;
-- pR128Ent->IsDRIEnabled = FALSE;
- pR128Ent->BypassSecondary = FALSE;
- pR128Ent->HasSecondary = FALSE;
- pR128Ent->RestorePrimary = FALSE;
-@@ -1872,13 +1872,7 @@ Bool R128ScreenInit(SCREEN_INIT_ARGS_DECL)
- "section in your XFConfig file.\n");
- }
- else
-- info->directRenderingEnabled =
-- R128DRIScreenInit(pScreen);
-- if(xf86IsEntityShared(pScrn->entityList[0]))
-- {
-- R128EntPtr pR128Ent = R128EntPriv(pScrn);
-- pR128Ent->IsDRIEnabled = info->directRenderingEnabled;
-- }
-+ info->directRenderingEnabled = R128DRIScreenInit(pScreen);
- }
- }
- }
-@@ -2854,6 +2848,7 @@ static void R128Save(ScrnInfoPtr pScrn)
- static void R128Restore(ScrnInfoPtr pScrn)
- {
- R128InfoPtr info = R128PTR(pScrn);
-+ R128EntPtr pR128Ent = R128EntPriv(pScrn);
- unsigned char *R128MMIO = info->MMIO;
- R128SavePtr restore = &info->SavedReg;
-
-@@ -2873,7 +2868,7 @@ static void R128Restore(ScrnInfoPtr pScrn)
- OUTREG(R128_DP_DATATYPE, restore->dp_datatype);
-
- R128RestoreCommonRegisters(pScrn, restore);
-- if (info->HasCRTC2) {
-+ if (pR128Ent->HasCRTC2) {
- R128RestoreDDA2Registers(pScrn, restore);
- R128RestoreCrtc2Registers(pScrn, restore);
- R128RestorePLL2Registers(pScrn, restore);
-diff --git a/src/r128_output.c b/src/r128_output.c
-index d7a1c55..e5306d6 100644
---- a/src/r128_output.c
-+++ b/src/r128_output.c
-@@ -400,13 +400,14 @@ void R128SetOutputType(ScrnInfoPtr pScrn, R128OutputPrivatePtr r128_output)
-
- void R128SetupGenericConnectors(ScrnInfoPtr pScrn)
- {
-- R128InfoPtr info = R128PTR(pScrn);
-+ R128InfoPtr info = R128PTR(pScrn);
-+ R128EntPtr pR128Ent = R128EntPriv(pScrn);
-
-- if (!info->HasCRTC2 && !info->isDFP) {
-+ if (!pR128Ent->HasCRTC2 && !info->isDFP) {
- info->BiosConnector[0].ConnectorType = CONNECTOR_VGA;
- info->BiosConnector[0].valid = TRUE;
- return;
-- } else if (!info->HasCRTC2) {
-+ } else if (!pR128Ent->HasCRTC2) {
- info->BiosConnector[0].ConnectorType = CONNECTOR_DVI_D;
- info->BiosConnector[0].valid = TRUE;
- return;
-@@ -421,7 +422,8 @@ void R128SetupGenericConnectors(ScrnInfoPtr pScrn)
-
- Bool R128SetupConnectors(ScrnInfoPtr pScrn)
- {
-- R128InfoPtr info = R128PTR(pScrn);
-+ R128InfoPtr info = R128PTR(pScrn);
-+ R128EntPtr pR128Ent = R128EntPriv(pScrn);
- xf86OutputPtr output;
- int num_vga = 0;
- int num_dvi = 0;
-@@ -476,7 +478,7 @@ Bool R128SetupConnectors(ScrnInfoPtr pScrn)
- output->doubleScanAllowed = TRUE;
- output->driver_private = r128_output;
- output->possible_clones = 0;
-- if (conntype == CONNECTOR_LVDS || !info->HasCRTC2)
-+ if (conntype == CONNECTOR_LVDS || !pR128Ent->HasCRTC2)
- output->possible_crtcs = 1;
- else
- output->possible_crtcs = 2;
-diff --git a/src/r128_probe.c b/src/r128_probe.c
-index e623bc9..348d15b 100644
---- a/src/r128_probe.c
-+++ b/src/r128_probe.c
-@@ -288,7 +288,6 @@ r128_get_scrninfo(int entity_num)
- R128EntPtr pR128Ent;
- pPriv->ptr = xnfcalloc(sizeof(R128EntRec), 1);
- pR128Ent = pPriv->ptr;
-- pR128Ent->IsDRIEnabled = FALSE;
- pR128Ent->BypassSecondary = FALSE;
- pR128Ent->HasSecondary = FALSE;
- pR128Ent->IsSecondaryRestored = FALSE;
-diff --git a/src/r128_probe.h b/src/r128_probe.h
-index 95988ec..426840a 100644
---- a/src/r128_probe.h
-+++ b/src/r128_probe.h
-@@ -170,9 +170,8 @@ typedef struct _R128OutputPrivateRec {
-
- typedef struct
- {
-- Bool IsDRIEnabled;
--
- Bool HasSecondary;
-+ Bool HasCRTC2;
- Bool BypassSecondary;
- /*These two registers are used to make sure the CRTC2 is
- retored before CRTC_EXT, otherwise it could lead to blank screen.*/
---
-2.2.2
-
-
-From 866d0ad5295a7ca819b990f607d3e68582144b3b Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Wed, 16 Jul 2014 17:39:59 -0700
-Subject: Cleanup info struct
-
-This removes some dead code from info. It also fixes some indentation
-errors that were likely caused by sed.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
----
- src/r128.h | 35 +++++++++++------------------------
- src/r128_dri.c | 6 ------
- src/r128_driver.c | 13 -------------
- 3 files changed, 11 insertions(+), 43 deletions(-)
-
-diff --git a/src/r128.h b/src/r128.h
-index 0308130..b9fcc0a 100644
---- a/src/r128.h
-+++ b/src/r128.h
-@@ -296,7 +296,6 @@ typedef struct {
- PCITAG PciTag;
- #endif
- int Chipset;
-- Bool Primary;
-
- Bool FBDev;
-
-@@ -306,27 +305,20 @@ typedef struct {
-
- void *MMIO; /* Map of MMIO region */
- void *FB; /* Map of frame buffer */
-+ CARD8 *VBIOS; /* Video BIOS for mode validation on FPs */
-+ int FPBIOSstart; /* Start of the flat panel info */
-
- CARD32 MemCntl;
- CARD32 BusCntl;
- unsigned long FbMapSize; /* Size of frame buffer, in bytes */
-- int Flags; /* Saved copy of mode flags */
-
- CARD8 BIOSDisplay; /* Device the BIOS is set to display to */
-
- Bool HasPanelRegs; /* Current chip can connect to a FP */
-- CARD8 *VBIOS; /* Video BIOS for mode validation on FPs */
-- int FPBIOSstart; /* Start of the flat panel info */
-
- /* Computed values for FPs */
- int PanelXRes;
- int PanelYRes;
-- int HOverPlus;
-- int HSyncWidth;
-- int HBlank;
-- int VOverPlus;
-- int VSyncWidth;
-- int VBlank;
- int PanelPwrDly;
-
- R128PLLRec pll;
-@@ -343,7 +335,6 @@ typedef struct {
- XAAInfoRecPtr accel;
- #endif
- Bool accelOn;
--
- Bool useEXA;
- Bool RenderAccel;
- #ifdef USE_EXA
-@@ -352,10 +343,6 @@ typedef struct {
- struct r128_2d_state state_2d;
- #endif
-
-- xf86CursorInfoPtr cursor;
-- unsigned long cursor_start;
-- unsigned long cursor_end;
--
- /*
- * XAAForceTransBlit is used to change the behavior of the XAA
- * SetupForScreenToScreenCopy function, to make it DGA-friendly.
-@@ -405,19 +392,19 @@ typedef struct {
- Bool directRenderingEnabled;
- DRIInfoPtr pDRIInfo;
- int drmFD;
-- drm_context_t drmCtx;
-+ drm_context_t drmCtx;
- int numVisualConfigs;
- __GLXvisualConfig *pVisualConfigs;
- R128ConfigPrivPtr pVisualConfigsPriv;
-
-- drm_handle_t fbHandle;
-+ drm_handle_t fbHandle;
-
- drmSize registerSize;
-- drm_handle_t registerHandle;
-+ drm_handle_t registerHandle;
-
- Bool IsPCI; /* Current card is a PCI card */
- drmSize pciSize;
-- drm_handle_t pciMemHandle;
-+ drm_handle_t pciMemHandle;
- drmAddress PCI; /* Map */
-
- Bool allowPageFlip; /* Enable 3d page flipping */
-@@ -425,7 +412,7 @@ typedef struct {
- int drmMinor;
-
- drmSize agpSize;
-- drm_handle_t agpMemHandle; /* Handle from drmAgpAlloc */
-+ drm_handle_t agpMemHandle; /* Handle from drmAgpAlloc */
- unsigned long agpOffset;
- drmAddress AGP; /* Map */
- int agpMode;
-@@ -438,20 +425,20 @@ typedef struct {
-
- /* CCE ring buffer data */
- unsigned long ringStart; /* Offset into AGP space */
-- drm_handle_t ringHandle; /* Handle from drmAddMap */
-+ drm_handle_t ringHandle; /* Handle from drmAddMap */
- drmSize ringMapSize; /* Size of map */
- int ringSize; /* Size of ring (in MB) */
- drmAddress ring; /* Map */
- int ringSizeLog2QW;
-
- unsigned long ringReadOffset; /* Offset into AGP space */
-- drm_handle_t ringReadPtrHandle; /* Handle from drmAddMap */
-+ drm_handle_t ringReadPtrHandle;/* Handle from drmAddMap */
- drmSize ringReadMapSize; /* Size of map */
- drmAddress ringReadPtr; /* Map */
-
- /* CCE vertex/indirect buffer data */
- unsigned long bufStart; /* Offset into AGP space */
-- drm_handle_t bufHandle; /* Handle from drmAddMap */
-+ drm_handle_t bufHandle; /* Handle from drmAddMap */
- drmSize bufMapSize; /* Size of map */
- int bufSize; /* Size of buffers (in MB) */
- drmAddress buf; /* Map */
-@@ -460,7 +447,7 @@ typedef struct {
-
- /* CCE AGP Texture data */
- unsigned long agpTexStart; /* Offset into AGP space */
-- drm_handle_t agpTexHandle; /* Handle from drmAddMap */
-+ drm_handle_t agpTexHandle; /* Handle from drmAddMap */
- drmSize agpTexMapSize; /* Size of map */
- int agpTexSize; /* Size of AGP tex space (in MB) */
- drmAddress agpTex; /* Map */
-diff --git a/src/r128_dri.c b/src/r128_dri.c
-index 2c905a4..f924331 100644
---- a/src/r128_dri.c
-+++ b/src/r128_dri.c
-@@ -1525,9 +1525,6 @@ static void R128DRITransitionTo3d(ScreenPtr pScreen)
- R128EnablePageFlip(pScreen);
-
- info->have3DWindows = 1;
--
-- if (info->cursor_start)
-- xf86ForceHWCursor(pScreen, TRUE);
- }
-
- static void R128DRITransitionTo2d(ScreenPtr pScreen)
-@@ -1550,7 +1547,4 @@ static void R128DRITransitionTo2d(ScreenPtr pScreen)
- }
-
- info->have3DWindows = 0;
--
-- if (info->cursor_start)
-- xf86ForceHWCursor(pScreen, FALSE);
- }
-diff --git a/src/r128_driver.c b/src/r128_driver.c
-index 3cd3773..d17951d 100644
---- a/src/r128_driver.c
-+++ b/src/r128_driver.c
-@@ -2238,9 +2238,6 @@ Bool R128ScreenInit(SCREEN_INIT_ARGS_DECL)
- if (R128CursorInit(pScreen)) {
- int width, height;
-
-- xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-- "Using hardware cursor (scanline %ld)\n",
-- info->cursor_start / pScrn->displayWidth);
- if (xf86QueryLargestOffscreenArea(pScreen, &width, &height,
- 0, 0, 0)) {
- xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-@@ -2253,7 +2250,6 @@ Bool R128ScreenInit(SCREEN_INIT_ARGS_DECL)
- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Using software cursor\n");
- }
- } else {
-- info->cursor_start = 0;
- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Using software cursor\n");
- }
-
-@@ -3064,12 +3060,6 @@ Bool R128InitCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr save,
- mode->HDisplay = mode->CrtcHDisplay = info->PanelXRes;
- if(info->PanelYRes < mode->CrtcVDisplay)
- mode->VDisplay = mode->CrtcVDisplay = info->PanelYRes;
-- mode->CrtcHTotal = mode->CrtcHDisplay + info->HBlank;
-- mode->CrtcHSyncStart = mode->CrtcHDisplay + info->HOverPlus;
-- mode->CrtcHSyncEnd = mode->CrtcHSyncStart + info->HSyncWidth;
-- mode->CrtcVTotal = mode->CrtcVDisplay + info->VBlank;
-- mode->CrtcVSyncStart = mode->CrtcVDisplay + info->VOverPlus;
-- mode->CrtcVSyncEnd = mode->CrtcVSyncStart + info->VSyncWidth;
- }
-
- save->crtc_h_total_disp = ((((mode->CrtcHTotal / 8) - 1) & 0xffff)
-@@ -3834,9 +3824,6 @@ static Bool R128CloseScreen(CLOSE_SCREEN_ARGS_DECL)
- if (info->scratch_save) free(info->scratch_save);
- info->scratch_save = NULL;
-
-- if (info->cursor) xf86DestroyCursorInfoRec(info->cursor);
-- info->cursor = NULL;
--
- if (info->DGAModes) free(info->DGAModes);
- info->DGAModes = NULL;
-
---
-2.2.2
-
-
-From b632e89b923179b16d0d38128209427f666b963c Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Wed, 16 Jul 2014 02:20:18 -0700
-Subject: Remove pointless output
-
-This removes a debug line to fix a compiler warning and make the
-crtc1 and crtc2 code more symmetric. The number of bits per pixel is
-easy to find out anyway.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
----
- src/r128_driver.c | 14 ++++++--------
- 1 file changed, 6 insertions(+), 8 deletions(-)
-
-diff --git a/src/r128_driver.c b/src/r128_driver.c
-index d17951d..6cd669a 100644
---- a/src/r128_driver.c
-+++ b/src/r128_driver.c
-@@ -3126,22 +3126,20 @@ Bool R128InitCrtc2Registers(ScrnInfoPtr pScrn, R128SavePtr save,
- int hsync_wid;
- int hsync_fudge;
- int vsync_wid;
-- int bytpp;
- int hsync_fudge_default[] = { 0x00, 0x12, 0x09, 0x09, 0x06, 0x05 };
-
- switch (info->CurrentLayout.pixel_code) {
-- case 4: format = 1; bytpp = 0; break;
-- case 8: format = 2; bytpp = 1; break;
-- case 15: format = 3; bytpp = 2; break; /* 555 */
-- case 16: format = 4; bytpp = 2; break; /* 565 */
-- case 24: format = 5; bytpp = 3; break; /* RGB */
-- case 32: format = 6; bytpp = 4; break; /* xRGB */
-+ case 4: format = 1; break;
-+ case 8: format = 2; break;
-+ case 15: format = 3; break; /* 555 */
-+ case 16: format = 4; break; /* 565 */
-+ case 24: format = 5; break; /* RGB */
-+ case 32: format = 6; break; /* xRGB */
- default:
- xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
- "Unsupported pixel depth (%d)\n", info->CurrentLayout.bitsPerPixel);
- return FALSE;
- }
-- R128TRACE(("Format = %d (%d bytes per pixel)\n", format, bytpp));
-
- hsync_fudge = hsync_fudge_default[format-1];
-
---
-2.2.2
-
-
-From 0d901460b375599c727928634d5f1067d2279844 Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Wed, 16 Jul 2014 17:47:44 -0700
-Subject: Use standard integers
-
-To fix another warning, we need to be consistent about when we use
-CARD32 an when we use uint32_t. Xorg developers have decided on the
-latter as a convention.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
----
- src/r128.h | 168 +++++++++++++++++++++++++-------------------------
- src/r128_accel.c | 20 +++---
- src/r128_crtc.c | 2 +-
- src/r128_cursor.c | 14 ++---
- src/r128_dga.c | 6 +-
- src/r128_dri.c | 14 ++---
- src/r128_driver.c | 14 ++---
- src/r128_exa_render.c | 8 +--
- src/r128_output.c | 4 +-
- src/r128_probe.h | 14 ++---
- src/r128_reg.h | 12 ++--
- src/r128_video.c | 14 ++---
- 12 files changed, 145 insertions(+), 145 deletions(-)
-
-diff --git a/src/r128.h b/src/r128.h
-index b9fcc0a..f361c2a 100644
---- a/src/r128.h
-+++ b/src/r128.h
-@@ -151,105 +151,105 @@ typedef struct { /* All values in XCLKS */
-
- typedef struct {
- /* Common registers */
-- CARD32 ovr_clr;
-- CARD32 ovr_wid_left_right;
-- CARD32 ovr_wid_top_bottom;
-- CARD32 ov0_scale_cntl;
-- CARD32 mpp_tb_config;
-- CARD32 mpp_gp_config;
-- CARD32 subpic_cntl;
-- CARD32 viph_control;
-- CARD32 i2c_cntl_1;
-- CARD32 gen_int_cntl;
-- CARD32 cap0_trig_cntl;
-- CARD32 cap1_trig_cntl;
-- CARD32 bus_cntl;
-- CARD32 config_cntl;
-+ uint32_t ovr_clr;
-+ uint32_t ovr_wid_left_right;
-+ uint32_t ovr_wid_top_bottom;
-+ uint32_t ov0_scale_cntl;
-+ uint32_t mpp_tb_config;
-+ uint32_t mpp_gp_config;
-+ uint32_t subpic_cntl;
-+ uint32_t viph_control;
-+ uint32_t i2c_cntl_1;
-+ uint32_t gen_int_cntl;
-+ uint32_t cap0_trig_cntl;
-+ uint32_t cap1_trig_cntl;
-+ uint32_t bus_cntl;
-+ uint32_t config_cntl;
-
- /* Other registers to save for VT switches */
-- CARD32 dp_datatype;
-- CARD32 gen_reset_cntl;
-- CARD32 clock_cntl_index;
-- CARD32 amcgpio_en_reg;
-- CARD32 amcgpio_mask;
-+ uint32_t dp_datatype;
-+ uint32_t gen_reset_cntl;
-+ uint32_t clock_cntl_index;
-+ uint32_t amcgpio_en_reg;
-+ uint32_t amcgpio_mask;
-
- /* CRTC registers */
-- CARD32 crtc_gen_cntl;
-- CARD32 crtc_ext_cntl;
-- CARD32 dac_cntl;
-- CARD32 crtc_h_total_disp;
-- CARD32 crtc_h_sync_strt_wid;
-- CARD32 crtc_v_total_disp;
-- CARD32 crtc_v_sync_strt_wid;
-- CARD32 crtc_offset;
-- CARD32 crtc_offset_cntl;
-- CARD32 crtc_pitch;
-+ uint32_t crtc_gen_cntl;
-+ uint32_t crtc_ext_cntl;
-+ uint32_t dac_cntl;
-+ uint32_t crtc_h_total_disp;
-+ uint32_t crtc_h_sync_strt_wid;
-+ uint32_t crtc_v_total_disp;
-+ uint32_t crtc_v_sync_strt_wid;
-+ uint32_t crtc_offset;
-+ uint32_t crtc_offset_cntl;
-+ uint32_t crtc_pitch;
-
- /* CRTC2 registers */
-- CARD32 crtc2_gen_cntl;
-- CARD32 crtc2_h_total_disp;
-- CARD32 crtc2_h_sync_strt_wid;
-- CARD32 crtc2_v_total_disp;
-- CARD32 crtc2_v_sync_strt_wid;
-- CARD32 crtc2_offset;
-- CARD32 crtc2_offset_cntl;
-- CARD32 crtc2_pitch;
-+ uint32_t crtc2_gen_cntl;
-+ uint32_t crtc2_h_total_disp;
-+ uint32_t crtc2_h_sync_strt_wid;
-+ uint32_t crtc2_v_total_disp;
-+ uint32_t crtc2_v_sync_strt_wid;
-+ uint32_t crtc2_offset;
-+ uint32_t crtc2_offset_cntl;
-+ uint32_t crtc2_pitch;
-
- /* Flat panel registers */
-- CARD32 fp_crtc_h_total_disp;
-- CARD32 fp_crtc_v_total_disp;
-- CARD32 fp_gen_cntl;
-- CARD32 fp_h_sync_strt_wid;
-- CARD32 fp_horz_stretch;
-- CARD32 fp_panel_cntl;
-- CARD32 fp_v_sync_strt_wid;
-- CARD32 fp_vert_stretch;
-- CARD32 lvds_gen_cntl;
-- CARD32 tmds_crc;
-- CARD32 tmds_transmitter_cntl;
-+ uint32_t fp_crtc_h_total_disp;
-+ uint32_t fp_crtc_v_total_disp;
-+ uint32_t fp_gen_cntl;
-+ uint32_t fp_h_sync_strt_wid;
-+ uint32_t fp_horz_stretch;
-+ uint32_t fp_panel_cntl;
-+ uint32_t fp_v_sync_strt_wid;
-+ uint32_t fp_vert_stretch;
-+ uint32_t lvds_gen_cntl;
-+ uint32_t tmds_crc;
-+ uint32_t tmds_transmitter_cntl;
-
- /* Computed values for PLL */
-- CARD32 dot_clock_freq;
-- CARD32 pll_output_freq;
-+ uint32_t dot_clock_freq;
-+ uint32_t pll_output_freq;
- int feedback_div;
- int post_div;
-
- /* PLL registers */
-- CARD32 ppll_ref_div;
-- CARD32 ppll_div_3;
-- CARD32 htotal_cntl;
-+ uint32_t ppll_ref_div;
-+ uint32_t ppll_div_3;
-+ uint32_t htotal_cntl;
-
- /* Computed values for PLL2 */
-- CARD32 dot_clock_freq_2;
-- CARD32 pll_output_freq_2;
-+ uint32_t dot_clock_freq_2;
-+ uint32_t pll_output_freq_2;
- int feedback_div_2;
- int post_div_2;
-
- /* PLL2 registers */
-- CARD32 p2pll_ref_div;
-- CARD32 p2pll_div_0;
-- CARD32 htotal_cntl2;
-+ uint32_t p2pll_ref_div;
-+ uint32_t p2pll_div_0;
-+ uint32_t htotal_cntl2;
-
- /* DDA register */
-- CARD32 dda_config;
-- CARD32 dda_on_off;
-+ uint32_t dda_config;
-+ uint32_t dda_on_off;
-
- /* DDA2 register */
-- CARD32 dda2_config;
-- CARD32 dda2_on_off;
-+ uint32_t dda2_config;
-+ uint32_t dda2_on_off;
-
- /* Pallet */
- Bool palette_valid;
-- CARD32 palette[256];
-- CARD32 palette2[256];
-+ uint32_t palette[256];
-+ uint32_t palette2[256];
- } R128SaveRec, *R128SavePtr;
-
- typedef struct {
-- CARD16 reference_freq;
-- CARD16 reference_div;
-+ uint16_t reference_freq;
-+ uint16_t reference_div;
- unsigned min_pll_freq;
- unsigned max_pll_freq;
-- CARD16 xclk;
-+ uint16_t xclk;
- } R128PLLRec, *R128PLLPtr;
-
- typedef struct {
-@@ -305,14 +305,14 @@ typedef struct {
-
- void *MMIO; /* Map of MMIO region */
- void *FB; /* Map of frame buffer */
-- CARD8 *VBIOS; /* Video BIOS for mode validation on FPs */
-+ uint8_t *VBIOS; /* Video BIOS for mode validation on FPs */
- int FPBIOSstart; /* Start of the flat panel info */
-
-- CARD32 MemCntl;
-- CARD32 BusCntl;
-+ uint32_t MemCntl;
-+ uint32_t BusCntl;
- unsigned long FbMapSize; /* Size of frame buffer, in bytes */
-
-- CARD8 BIOSDisplay; /* Device the BIOS is set to display to */
-+ uint8_t BIOSDisplay; /* Device the BIOS is set to display to */
-
- Bool HasPanelRegs; /* Current chip can connect to a FP */
-
-@@ -356,7 +356,7 @@ typedef struct {
- /* Computed values for Rage 128 */
- int pitch;
- int datatype;
-- CARD32 dp_gui_master_cntl;
-+ uint32_t dp_gui_master_cntl;
-
- /* Saved values for ScreenToScreenCopy */
- int xdir;
-@@ -477,18 +477,18 @@ typedef struct {
- int log2TexGran;
-
- /* Saved scissor values */
-- CARD32 sc_left;
-- CARD32 sc_right;
-- CARD32 sc_top;
-- CARD32 sc_bottom;
-+ uint32_t sc_left;
-+ uint32_t sc_right;
-+ uint32_t sc_top;
-+ uint32_t sc_bottom;
-
-- CARD32 re_top_left;
-- CARD32 re_width_height;
-+ uint32_t re_top_left;
-+ uint32_t re_width_height;
-
-- CARD32 aux_sc_cntl;
-+ uint32_t aux_sc_cntl;
-
- int irq;
-- CARD32 gen_int_cntl;
-+ uint32_t gen_int_cntl;
-
- Bool DMAForXv;
- #endif
-@@ -643,7 +643,7 @@ extern void R128DoPrepareCopy(ScrnInfoPtr pScrn, uint32_t src_pitch_offset,
-
- #define R128_VERBOSE 0
-
--#define RING_LOCALS CARD32 *__head; int __count;
-+#define RING_LOCALS uint32_t *__head; int __count;
-
- #define R128CCE_REFRESH(pScrn, info) \
- do { \
-@@ -684,12 +684,12 @@ do { \
- xf86DrvMsg( pScrn->scrnIndex, X_INFO, \
- "ADVANCE_RING() used: %d+%d=%d/%d\n", \
- info->indirectBuffer->used - info->indirectStart, \
-- __count * (int)sizeof(CARD32), \
-+ __count * (int)sizeof(uint32_t), \
- info->indirectBuffer->used - info->indirectStart + \
-- __count * (int)sizeof(CARD32), \
-+ __count * (int)sizeof(uint32_t), \
- info->indirectBuffer->total - info->indirectStart ); \
- } \
-- info->indirectBuffer->used += __count * (int)sizeof(CARD32); \
-+ info->indirectBuffer->used += __count * (int)sizeof(uint32_t); \
- } while (0)
-
- #define OUT_RING( x ) do { \
-diff --git a/src/r128_accel.c b/src/r128_accel.c
-index 4d666c7..99bfb20 100644
---- a/src/r128_accel.c
-+++ b/src/r128_accel.c
-@@ -145,9 +145,9 @@ void R128EngineReset(ScrnInfoPtr pScrn)
- {
- R128InfoPtr info = R128PTR(pScrn);
- unsigned char *R128MMIO = info->MMIO;
-- CARD32 clock_cntl_index;
-- CARD32 mclk_cntl;
-- CARD32 gen_reset_cntl;
-+ uint32_t clock_cntl_index;
-+ uint32_t mclk_cntl;
-+ uint32_t gen_reset_cntl;
-
- R128EngineFlush(pScrn);
-
-@@ -161,7 +161,7 @@ void R128EngineReset(ScrnInfoPtr pScrn)
- OUTREG(R128_GEN_RESET_CNTL, gen_reset_cntl | R128_SOFT_RESET_GUI);
- INREG(R128_GEN_RESET_CNTL);
- OUTREG(R128_GEN_RESET_CNTL,
-- gen_reset_cntl & (CARD32)(~R128_SOFT_RESET_GUI));
-+ gen_reset_cntl & (uint32_t)(~R128_SOFT_RESET_GUI));
- INREG(R128_GEN_RESET_CNTL);
-
- OUTPLL(R128_MCLK_CNTL, mclk_cntl);
-@@ -450,7 +450,7 @@ static void R128SetupForDashedLine(ScrnInfoPtr pScrn,
- {
- R128InfoPtr info = R128PTR(pScrn);
- unsigned char *R128MMIO = info->MMIO;
-- CARD32 pat = *(CARD32 *)(pointer)pattern;
-+ uint32_t pat = *(uint32_t *)(pointer)pattern;
-
- #if X_BYTE_ORDER == X_LITTLE_ENDIAN
- # define PAT_SHIFT(pat,n) pat << n
-@@ -847,10 +847,10 @@ static void R128SubsequentColorExpandScanline(ScrnInfoPtr pScrn, int bufno)
- {
- R128InfoPtr info = R128PTR(pScrn);
- unsigned char *R128MMIO = info->MMIO;
-- CARD32 *p = (pointer)info->scratch_buffer[bufno];
-+ uint32_t *p = (pointer)info->scratch_buffer[bufno];
- int i;
- int left = info->scanline_words;
-- volatile CARD32 *d;
-+ volatile uint32_t *d;
-
- if (info->scanline_direct) return;
- --info->scanline_h;
-@@ -977,10 +977,10 @@ static void R128SubsequentImageWriteScanline(ScrnInfoPtr pScrn, int bufno)
- {
- R128InfoPtr info = R128PTR(pScrn);
- unsigned char *R128MMIO = info->MMIO;
-- CARD32 *p = (pointer)info->scratch_buffer[bufno];
-+ uint32_t *p = (pointer)info->scratch_buffer[bufno];
- int i;
- int left = info->scanline_words;
-- volatile CARD32 *d;
-+ volatile uint32_t *d;
-
- if (info->scanline_direct) return;
- --info->scanline_h;
-@@ -1438,7 +1438,7 @@ static void R128CCESetupForDashedLine(ScrnInfoPtr pScrn,
- int length, unsigned char *pattern)
- {
- R128InfoPtr info = R128PTR(pScrn);
-- CARD32 pat = *(CARD32 *)(pointer)pattern;
-+ uint32_t pat = *(uint32_t *)(pointer)pattern;
- RING_LOCALS;
-
- R128CCE_REFRESH( pScrn, info );
-diff --git a/src/r128_crtc.c b/src/r128_crtc.c
-index e48e4d5..5f076cd 100644
---- a/src/r128_crtc.c
-+++ b/src/r128_crtc.c
-@@ -189,7 +189,7 @@ static void r128_crtc_mode_commit(xf86CrtcPtr crtc)
- r128_crtc_dpms(crtc, DPMSModeOn);
- }
-
--static void r128_crtc_gamma_set(xf86CrtcPtr crtc, CARD16 *red, CARD16 *green, CARD16 *blue, int size)
-+static void r128_crtc_gamma_set(xf86CrtcPtr crtc, uint16_t *red, uint16_t *green, uint16_t *blue, int size)
- {
- R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
- int i;
-diff --git a/src/r128_cursor.c b/src/r128_cursor.c
-index ad6752f..d42bea6 100644
---- a/src/r128_cursor.c
-+++ b/src/r128_cursor.c
-@@ -179,18 +179,18 @@ void r128_crtc_load_cursor_image(xf86CrtcPtr crtc, unsigned char *src)
-
- R128InfoPtr info = R128PTR(pScrn);
- unsigned char *R128MMIO = info->MMIO;
-- CARD32 *s = (pointer)src;
-- CARD32 *d = (pointer)(info->FB + r128_crtc->cursor_offset + pScrn->fbOffset);
-- CARD32 save1 = 0;
-- CARD32 save2 = 0;
-+ uint32_t *s = (pointer)src;
-+ uint32_t *d = (pointer)(info->FB + r128_crtc->cursor_offset + pScrn->fbOffset);
-+ uint32_t save1 = 0;
-+ uint32_t save2 = 0;
- int y;
-
- if (crtc_id == 0) {
- save1 = INREG(R128_CRTC_GEN_CNTL);
-- OUTREG(R128_CRTC_GEN_CNTL, save1 & (CARD32)~R128_CRTC_CUR_EN);
-+ OUTREG(R128_CRTC_GEN_CNTL, save1 & (uint32_t)~R128_CRTC_CUR_EN);
- } else if (crtc_id == 1) {
- save2 = INREG(R128_CRTC2_GEN_CNTL);
-- OUTREG(R128_CRTC2_GEN_CNTL, save2 & (CARD32)~R128_CRTC2_CUR_EN);
-+ OUTREG(R128_CRTC2_GEN_CNTL, save2 & (uint32_t)~R128_CRTC2_CUR_EN);
- }
-
- #if X_BYTE_ORDER == X_BIG_ENDIAN
-@@ -255,7 +255,7 @@ Bool R128CursorInit(ScreenPtr pScreen)
- void* osArea = NULL;
- #endif
- xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
-- CARD32 cursor_offset = 0;
-+ uint32_t cursor_offset = 0;
- int cpp = info->CurrentLayout.pixel_bytes;
- int width;
- int width_bytes;
-diff --git a/src/r128_dga.c b/src/r128_dga.c
-index d7fee02..bb4a1a6 100644
---- a/src/r128_dga.c
-+++ b/src/r128_dga.c
-@@ -332,7 +332,7 @@ R128_FillRect (
- ){
- R128InfoPtr info = R128PTR(pScrn);
-
-- (*info->accel->SetupForSolidFill)(pScrn, color, GXcopy, (CARD32)(~0));
-+ (*info->accel->SetupForSolidFill)(pScrn, color, GXcopy, (uint32_t)(~0));
- (*info->accel->SubsequentSolidFillRect)(pScrn, x, y, w, h);
-
- if (pScrn->bitsPerPixel == info->CurrentLayout.bitsPerPixel)
-@@ -351,7 +351,7 @@ R128_BlitRect(
- int ydir = (srcy < dsty) ? -1 : 1;
-
- (*info->accel->SetupForScreenToScreenCopy)(
-- pScrn, xdir, ydir, GXcopy, (CARD32)(~0), -1);
-+ pScrn, xdir, ydir, GXcopy, (uint32_t)(~0), -1);
- (*info->accel->SubsequentScreenToScreenCopy)(
- pScrn, srcx, srcy, dstx, dsty, w, h);
-
-@@ -375,7 +375,7 @@ R128_BlitTransRect(
- info->XAAForceTransBlit = TRUE;
-
- (*info->accel->SetupForScreenToScreenCopy)(
-- pScrn, xdir, ydir, GXcopy, (CARD32)(~0), color);
-+ pScrn, xdir, ydir, GXcopy, (uint32_t)(~0), color);
-
- info->XAAForceTransBlit = FALSE;
-
-diff --git a/src/r128_dri.c b/src/r128_dri.c
-index f924331..467cd88 100644
---- a/src/r128_dri.c
-+++ b/src/r128_dri.c
-@@ -397,7 +397,7 @@ static void R128DRIInitBuffers(WindowPtr pWin, RegionPtr prgn, CARD32 indx)
- pboxSave = pbox = REGION_RECTS(prgn);
- nboxSave = nbox = REGION_NUM_RECTS(prgn);
-
-- (*info->accel->SetupForSolidFill)(pScrn, 0, GXcopy, (CARD32)(-1));
-+ (*info->accel->SetupForSolidFill)(pScrn, 0, GXcopy, (uint32_t)(-1));
- for (; nbox; nbox--, pbox++) {
- (*info->accel->SubsequentSolidFillRect)(pScrn,
- pbox->x1 + info->fbX,
-@@ -415,7 +415,7 @@ static void R128DRIInitBuffers(WindowPtr pWin, RegionPtr prgn, CARD32 indx)
- nbox = nboxSave;
-
- /* FIXME: this needs to consider depth tiling. */
-- (*info->accel->SetupForSolidFill)(pScrn, depth, GXcopy, (CARD32)(-1));
-+ (*info->accel->SetupForSolidFill)(pScrn, depth, GXcopy, (uint32_t)(-1));
- for (; nbox; nbox--, pbox++)
- (*info->accel->SubsequentSolidFillRect)(pScrn,
- pbox->x1 + info->depthX,
-@@ -647,7 +647,7 @@ static Bool R128DRIAgpInit(R128InfoPtr info, ScreenPtr pScreen)
- static Bool R128DRIPciInit(R128InfoPtr info, ScreenPtr pScreen)
- {
- unsigned char *R128MMIO = info->MMIO;
-- CARD32 chunk;
-+ uint32_t chunk;
- int ret;
- int flags;
-
-@@ -1413,12 +1413,12 @@ static void R128DRIRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox)
- if (!info->useEXA) {
- (*info->accel->SetupForScreenToScreenCopy)(pScrn,
- 1, 1, GXcopy,
-- (CARD32)(-1), -1);
-+ (uint32_t)(-1), -1);
- }
- #endif
- #ifdef USE_EXA
- if (info->useEXA) {
-- CARD32 src_pitch_offset, dst_pitch_offset, datatype;
-+ uint32_t src_pitch_offset, dst_pitch_offset, datatype;
-
- R128GetPixmapOffsetPitch(pPix, &src_pitch_offset);
- dst_pitch_offset = src_pitch_offset + (info->backOffset >> 5);
-@@ -1465,7 +1465,7 @@ static void R128EnablePageFlip(ScreenPtr pScreen)
- if (!info->useEXA) {
- (*info->accel->SetupForScreenToScreenCopy)(pScrn,
- 1, 1, GXcopy,
-- (CARD32)(-1), -1);
-+ (uint32_t)(-1), -1);
-
- (*info->accel->SubsequentScreenToScreenCopy)(pScrn,
- 0,
-@@ -1478,7 +1478,7 @@ static void R128EnablePageFlip(ScreenPtr pScreen)
- #endif
- #ifdef USE_EXA
- if (info->useEXA) {
-- CARD32 src_pitch_offset, dst_pitch_offset, datatype;
-+ uint32_t src_pitch_offset, dst_pitch_offset, datatype;
-
- R128GetPixmapOffsetPitch(pPix, &src_pitch_offset);
- dst_pitch_offset = src_pitch_offset + (info->backOffset >> 5);
-diff --git a/src/r128_driver.c b/src/r128_driver.c
-index 6cd669a..c541bfa 100644
---- a/src/r128_driver.c
-+++ b/src/r128_driver.c
-@@ -657,8 +657,8 @@ static Bool R128GetPLLParameters(ScrnInfoPtr pScrn)
- pll->max_pll_freq = 25000;
- pll->xclk = 10300;
- } else {
-- CARD16 bios_header = R128_BIOS16(0x48);
-- CARD16 pll_info_block = R128_BIOS16(bios_header + 0x30);
-+ uint16_t bios_header = R128_BIOS16(0x48);
-+ uint16_t pll_info_block = R128_BIOS16(bios_header + 0x30);
- R128TRACE(("Header at 0x%04x; PLL Information at 0x%04x\n",
- bios_header, pll_info_block));
-
-@@ -1634,7 +1634,7 @@ static void R128LoadPalette(ScrnInfoPtr pScrn, int numColors,
- xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
- int i, j;
- int c, index;
-- CARD16 lut_r[256], lut_g[256], lut_b[256];
-+ uint16_t lut_r[256], lut_g[256], lut_b[256];
-
- for (c = 0; c < xf86_config->num_crtc; c++) {
- xf86CrtcPtr crtc = xf86_config->crtc[c];
-@@ -2404,7 +2404,7 @@ void R128RestoreFPRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
- OUTREG(R128_TMDS_CRC, restore->tmds_crc);
- OUTREG(R128_TMDS_TRANSMITTER_CNTL, restore->tmds_transmitter_cntl);
- OUTREG(R128_FP_PANEL_CNTL, restore->fp_panel_cntl);
-- OUTREG(R128_FP_GEN_CNTL, restore->fp_gen_cntl & ~(CARD32)R128_FP_BLANK_DIS);
-+ OUTREG(R128_FP_GEN_CNTL, restore->fp_gen_cntl & ~(uint32_t)R128_FP_BLANK_DIS);
- }
-
- /* Write LVDS registers */
-@@ -2412,7 +2412,7 @@ void R128RestoreLVDSRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
- {
- R128InfoPtr info = R128PTR(pScrn);
- unsigned char *R128MMIO = info->MMIO;
-- CARD32 tmp;
-+ uint32_t tmp;
-
- tmp = INREG(R128_LVDS_GEN_CNTL);
- if ((tmp & (R128_LVDS_ON | R128_LVDS_BLON)) ==
-@@ -2421,7 +2421,7 @@ void R128RestoreLVDSRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
- } else {
- if (restore->lvds_gen_cntl & (R128_LVDS_ON | R128_LVDS_BLON)) {
- OUTREG(R128_LVDS_GEN_CNTL,
-- restore->lvds_gen_cntl & (CARD32)~R128_LVDS_BLON);
-+ restore->lvds_gen_cntl & (uint32_t)~R128_LVDS_BLON);
- usleep(R128PTR(pScrn)->PanelPwrDly * 1000);
- OUTREG(R128_LVDS_GEN_CNTL, restore->lvds_gen_cntl);
- } else {
-@@ -3643,7 +3643,7 @@ ModeStatus R128ValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode,
- if (R128_BIOS16(j+5)) j = R128_BIOS16(j+5);
- else j += 9;
-
-- mode->Clock = (CARD32)R128_BIOS16(j) * 10;
-+ mode->Clock = (uint32_t)R128_BIOS16(j) * 10;
-
- mode->HDisplay = mode->CrtcHDisplay =
- ((R128_BIOS16(j+10) & 0x01ff)+1)*8;
-diff --git a/src/r128_exa_render.c b/src/r128_exa_render.c
-index f00daf7..c0d3688 100644
---- a/src/r128_exa_render.c
-+++ b/src/r128_exa_render.c
-@@ -40,8 +40,8 @@
- static struct {
- Bool dst_alpha;
- Bool src_alpha;
-- CARD32 sblend;
-- CARD32 dblend;
-+ uint32_t sblend;
-+ uint32_t dblend;
- } R128BlendOp[] = {
- /* Clear */
- {0, 0, R128_ALPHA_BLEND_ZERO , R128_ALPHA_BLEND_ZERO},
-@@ -582,9 +582,9 @@ R128CCEPrepareComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
- return TRUE;
- }
-
--typedef union { float f; CARD32 i; } fi_type;
-+typedef union { float f; uint32_t i; } fi_type;
-
--static inline CARD32
-+static inline uint32_t
- R128FloatAsInt(float val)
- {
- fi_type fi;
-diff --git a/src/r128_output.c b/src/r128_output.c
-index e5306d6..7bb2e2a 100644
---- a/src/r128_output.c
-+++ b/src/r128_output.c
-@@ -234,7 +234,7 @@ static R128MonitorType R128DisplayDDCConnected(xf86OutputPtr output)
-
- R128MonitorType MonType = MT_NONE;
- xf86MonPtr *MonInfo = &output->MonInfo;
-- CARD32 mask1, mask2;
-+ uint32_t mask1, mask2;
-
- if (r128_output->type == OUTPUT_LVDS) {
- return MT_LCD;
-@@ -346,7 +346,7 @@ static void R128I2CPutBits(I2CBusPtr b, int Clock, int data)
- R128I2CBusPtr pR128I2CBus = b->DriverPrivate.ptr;
-
- val = INREG(pR128I2CBus->ddc_reg)
-- & ~(CARD32)(pR128I2CBus->put_clk_mask | pR128I2CBus->put_data_mask);
-+ & ~(uint32_t)(pR128I2CBus->put_clk_mask | pR128I2CBus->put_data_mask);
- val |= (Clock ? 0 : pR128I2CBus->put_clk_mask);
- val |= (data ? 0 : pR128I2CBus->put_data_mask);
- OUTREG(pR128I2CBus->ddc_reg, val);
-diff --git a/src/r128_probe.h b/src/r128_probe.h
-index 426840a..40fe82b 100644
---- a/src/r128_probe.h
-+++ b/src/r128_probe.h
-@@ -129,11 +129,11 @@ typedef enum
- } R128OutputType;
-
- typedef struct {
-- CARD32 ddc_reg;
-- CARD32 put_clk_mask;
-- CARD32 put_data_mask;
-- CARD32 get_clk_mask;
-- CARD32 get_data_mask;
-+ uint32_t ddc_reg;
-+ uint32_t put_clk_mask;
-+ uint32_t put_data_mask;
-+ uint32_t get_clk_mask;
-+ uint32_t get_data_mask;
- } R128I2CBusRec, *R128I2CBusPtr;
-
- typedef struct _R128CrtcPrivateRec {
-@@ -144,9 +144,9 @@ typedef struct _R128CrtcPrivateRec {
- ExaOffscreenArea *rotate_mem_exa;
- #endif
- int crtc_id;
-- CARD32 cursor_offset;
-+ uint32_t cursor_offset;
- /* Lookup table values to be set when the CRTC is enabled */
-- CARD8 lut_r[256], lut_g[256], lut_b[256];
-+ uint8_t lut_r[256], lut_g[256], lut_b[256];
- } R128CrtcPrivateRec, *R128CrtcPrivatePtr;
-
- typedef struct {
-diff --git a/src/r128_reg.h b/src/r128_reg.h
-index 9ba0de5..eee5fb1 100644
---- a/src/r128_reg.h
-+++ b/src/r128_reg.h
-@@ -57,12 +57,12 @@
- #define OUTREG16(addr, val) MMIO_OUT16(R128MMIO, addr, val)
- #define OUTREG(addr, val) MMIO_OUT32(R128MMIO, addr, val)
-
--#define ADDRREG(addr) ((volatile CARD32 *)(pointer)(R128MMIO + (addr)))
-+#define ADDRREG(addr) ((volatile uint32_t *)(pointer)(R128MMIO + (addr)))
-
-
- #define OUTREGP(addr, val, mask) \
- do { \
-- CARD32 tmp = INREG(addr); \
-+ uint32_t tmp = INREG(addr); \
- tmp &= (mask); \
- tmp |= ((val) & ~(mask)); \
- OUTREG(addr, tmp); \
-@@ -78,7 +78,7 @@
-
- #define OUTPLLP(pScrn, addr, val, mask) \
- do { \
-- CARD32 tmp = INPLL(pScrn, addr); \
-+ uint32_t tmp = INPLL(pScrn, addr); \
- tmp &= (mask); \
- tmp |= ((val) & ~(mask)); \
- OUTPLL(addr, tmp); \
-@@ -94,7 +94,7 @@
- OUTREG(R128_PALETTE_DATA, ((r) << 16) | ((g) << 8) | (b)); \
- } while (0)
-
--#define OUTPAL_NEXT_CARD32(v) \
-+#define OUTPAL_NEXT_uint32_t(v) \
- do { \
- OUTREG(R128_PALETTE_DATA, (v & 0x00ffffff)); \
- } while (0)
-@@ -114,12 +114,12 @@
-
- #define PAL_SELECT(idx) \
- do { \
-- CARD32 tmp = INREG(R128_DAC_CNTL); \
-+ uint32_t tmp = INREG(R128_DAC_CNTL); \
- if (idx) { \
- OUTREG(R128_DAC_CNTL, tmp | R128_DAC_PALETTE_ACC_CTL); \
- } else { \
- OUTREG(R128_DAC_CNTL, tmp & \
-- (CARD32)~R128_DAC_PALETTE_ACC_CTL); \
-+ (uint32_t)~R128_DAC_PALETTE_ACC_CTL); \
- } \
- } while (0)
-
-diff --git a/src/r128_video.c b/src/r128_video.c
-index 6439a24..bcf36fc 100644
---- a/src/r128_video.c
-+++ b/src/r128_video.c
-@@ -59,8 +59,8 @@ typedef struct {
- void* BufferHandle;
- int videoOffset;
- RegionRec clip;
-- CARD32 colorKey;
-- CARD32 videoStatus;
-+ uint32_t colorKey;
-+ uint32_t videoStatus;
- Time offTime;
- Time freeTime;
- int ecp_div;
-@@ -405,7 +405,7 @@ R128DMA(
- #define BUFSIZE (R128_BUFFER_SIZE - R128_HOSTDATA_BLIT_OFFSET)
- #define MAXPASSES (MAXHEIGHT/(BUFSIZE/(MAXWIDTH*2))+1)
-
-- unsigned char *fb = (CARD8*)info->FB;
-+ unsigned char *fb = (uint8_t*)info->FB;
- unsigned char *buf;
- int err=-1, i, idx, offset, hpass, passes, srcpassbytes, dstpassbytes;
- int sizes[MAXPASSES], list[MAXPASSES];
-@@ -572,7 +572,7 @@ R128CopyData420(
- }
-
-
--static CARD32
-+static uint32_t
- R128AllocateMemory(
- ScrnInfoPtr pScrn,
- void **mem_struct,
-@@ -841,14 +841,14 @@ R128PutImage(
- ){
- R128InfoPtr info = R128PTR(pScrn);
- R128PortPrivPtr pPriv = (R128PortPrivPtr)data;
-- unsigned char *fb = (CARD8*)info->FB;
-+ unsigned char *fb = (uint8_t*)info->FB;
- INT32 xa, xb, ya, yb;
- int new_size, offset, s1offset, s2offset, s3offset;
- int srcPitch, srcPitch2, dstPitch;
- int d1line, d2line, d3line, d1offset, d2offset, d3offset;
- int top, left, npixels, nlines;
- BoxRec dstBox;
-- CARD32 tmp;
-+ uint32_t tmp;
-
- /* Currently, the video is only visible on the first monitor.
- * In the future we could try to make this smarter, or just implement
-@@ -858,7 +858,7 @@ R128PutImage(
-
- #if X_BYTE_ORDER == X_BIG_ENDIAN
- unsigned char *R128MMIO = info->MMIO;
-- CARD32 config_cntl = INREG(R128_CONFIG_CNTL);
-+ uint32_t config_cntl = INREG(R128_CONFIG_CNTL);
-
- /* We need to disable byte swapping, or the data gets mangled */
- OUTREG(R128_CONFIG_CNTL, config_cntl &
---
-2.2.2
-
-
-From 48e9b2359e8ab07095e1cb024e61b223a67cbc1a Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Thu, 24 Jul 2014 00:00:24 -0700
-Subject: Unify allocators
-
-RandR and Xv were using almost the same code to grab offscreen memory
-from EXA and XAA.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
-Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
----
- src/r128.h | 1 +
- src/r128_crtc.c | 72 ++++----------------------------------
- src/r128_probe.h | 7 +---
- src/r128_video.c | 103 ++++++++++++++++++++++++++++---------------------------
- 4 files changed, 62 insertions(+), 121 deletions(-)
-
-diff --git a/src/r128.h b/src/r128.h
-index f361c2a..6df1b51 100644
---- a/src/r128.h
-+++ b/src/r128.h
-@@ -570,6 +570,7 @@ extern void r128_crtc_show_cursor(xf86CrtcPtr crtc);
- extern void r128_crtc_hide_cursor(xf86CrtcPtr crtc);
- extern void r128_crtc_load_cursor_image(xf86CrtcPtr crtc, unsigned char *src);
-
-+extern uint32_t R128AllocateMemory(ScrnInfoPtr pScrn, void **mem_struct, int size, int align, Bool need_accel);
- extern Bool R128SetupConnectors(ScrnInfoPtr pScrn);
- extern Bool R128AllocateControllers(ScrnInfoPtr pScrn, int mask);
- extern void R128Blank(ScrnInfoPtr pScrn);
-diff --git a/src/r128_crtc.c b/src/r128_crtc.c
-index 5f076cd..92a6c30 100644
---- a/src/r128_crtc.c
-+++ b/src/r128_crtc.c
-@@ -233,33 +233,9 @@ static void r128_crtc_unlock(xf86CrtcPtr crtc)
- #endif
- }
-
--#ifdef HAVE_XAA_H
--static FBLinearPtr r128_xf86AllocateOffscreenLinear(ScreenPtr pScreen, int length, int granularity,
-- MoveLinearCallbackProcPtr moveCB,
-- RemoveLinearCallbackProcPtr removeCB,
-- pointer privData)
--{
-- FBLinearPtr linear;
-- int max_size;
--
-- linear = xf86AllocateOffscreenLinear(pScreen, length, granularity, moveCB, removeCB, privData);
-- if (linear != NULL) return linear;
--
-- /* The above allocation did not succeed, so purge unlocked stuff and try again. */
-- xf86QueryLargestOffscreenLinear(pScreen, &max_size, granularity, PRIORITY_EXTREME);
--
-- if (max_size < length) return NULL;
-- xf86PurgeUnlockedOffscreenAreas(pScreen);
--
-- linear = xf86AllocateOffscreenLinear(pScreen, length, granularity, moveCB, removeCB, privData);
-- return linear;
--}
--#endif
--
- static void *r128_crtc_shadow_allocate(xf86CrtcPtr crtc, int width, int height)
- {
- ScrnInfoPtr pScrn = crtc->scrn;
-- ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
- R128InfoPtr info = R128PTR(pScrn);
-
- R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
-@@ -271,38 +247,7 @@ static void *r128_crtc_shadow_allocate(xf86CrtcPtr crtc, int width, int height)
-
- rotate_pitch = pScrn->displayWidth * cpp;
- size = rotate_pitch * height;
--
--#ifdef USE_EXA
-- if (info->ExaDriver) {
-- assert(r128_crtc->rotate_mem_exa == NULL);
-- r128_crtc->rotate_mem_exa = exaOffscreenAlloc(pScreen, size, align, TRUE, NULL, NULL);
--
-- if (r128_crtc->rotate_mem_exa == NULL) {
-- xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-- "Couldn't allocate shadow memory for rotated CRTC\n");
-- return NULL;
-- }
--
-- rotate_offset = r128_crtc->rotate_mem_exa->offset;
-- }
--#endif
--#ifdef HAVE_XAA_H
-- if (info->accel) {
-- size = (size + cpp - 1) / cpp;
-- align = (align + cpp - 1) / cpp;
--
-- assert(r128_crtc->rotate_mem_xaa == NULL);
-- r128_crtc->rotate_mem_xaa = r128_xf86AllocateOffscreenLinear(pScreen, size, align, NULL, NULL, NULL);
--
-- if (r128_crtc->rotate_mem_exa == NULL) {
-- xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-- "Couldn't allocate shadow memory for rotated CRTC\n");
-- return NULL;
-- }
--
-- rotate_offset = r128_crtc->rotate_mem_xaa->offset * cpp;
-- }
--#endif
-+ rotate_offset = R128AllocateMemory(pScrn, &(r128_crtc->rotate_mem), size, align, TRUE);
-
- /* If allocations failed or if there was no accel. */
- if (rotate_offset == 0)
-@@ -347,19 +292,16 @@ static void r128_crtc_shadow_destroy(xf86CrtcPtr crtc, PixmapPtr rotate_pixmap,
-
- if (rotate_pixmap) FreeScratchPixmapHeader(rotate_pixmap);
-
-- if (data) {
-+ if (data && r128_crtc->rotate_mem != NULL) {
- #ifdef USE_EXA
-- if (info->ExaDriver && r128_crtc->rotate_mem_exa != NULL) {
-- exaOffscreenFree(pScreen, r128_crtc->rotate_mem_exa);
-- r128_crtc->rotate_mem_exa = NULL;
-- }
-+ if (info->ExaDriver)
-+ exaOffscreenFree(pScreen, (ExaOffscreenArea *) r128_crtc->rotate_mem);
- #endif
- #ifdef HAVE_XAA_H
-- if (info->accel) {
-- xf86FreeOffscreenLinear(r128_crtc->rotate_mem_xaa);
-- r128_crtc->rotate_mem_xaa = NULL;
-- }
-+ if (info->accel)
-+ xf86FreeOffscreenLinear((FBLinearPtr) r128_crtc->rotate_mem);
- #endif
-+ r128_crtc->rotate_mem = NULL;
- }
- }
-
-diff --git a/src/r128_probe.h b/src/r128_probe.h
-index 40fe82b..433463b 100644
---- a/src/r128_probe.h
-+++ b/src/r128_probe.h
-@@ -137,12 +137,7 @@ typedef struct {
- } R128I2CBusRec, *R128I2CBusPtr;
-
- typedef struct _R128CrtcPrivateRec {
--#ifdef HAVE_XAA_H
-- FBLinearPtr rotate_mem_xaa;
--#endif
--#ifdef USE_EXA
-- ExaOffscreenArea *rotate_mem_exa;
--#endif
-+ void *rotate_mem;
- int crtc_id;
- uint32_t cursor_offset;
- /* Lookup table values to be set when the CRTC is enabled */
-diff --git a/src/r128_video.c b/src/r128_video.c
-index bcf36fc..b0059b5 100644
---- a/src/r128_video.c
-+++ b/src/r128_video.c
-@@ -572,76 +572,78 @@ R128CopyData420(
- }
-
-
--static uint32_t
-+uint32_t
- R128AllocateMemory(
- ScrnInfoPtr pScrn,
- void **mem_struct,
-- int size
-+ int size,
-+ int align,
-+ Bool need_accel
- ){
- R128InfoPtr info = R128PTR(pScrn);
- ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
-- int offset = 0;
-+ Bool do_linear = !need_accel;
-+ uint32_t offset = 0;
-
-- if(!info->useEXA) {
-+#ifdef HAVE_XAA_H
-+ if (!info->accel && need_accel)
-+ do_linear = FALSE;
-+ else
-+ do_linear = TRUE;
-+#endif
-+#ifdef USE_EXA
-+ if (info->ExaDriver) {
-+ ExaOffscreenArea *area = *mem_struct;
-+
-+ if (area != NULL) {
-+ if (area->size >= size) return area->offset;
-+
-+ exaOffscreenFree(pScreen, area);
-+ }
-+
-+ area = exaOffscreenAlloc(pScreen, size, align, TRUE, NULL, NULL);
-+ *mem_struct = area;
-+
-+ if (area == NULL) return 0;
-+ offset = area->offset;
-+ }
-+#endif
-+ if (!info->useEXA && do_linear) {
- FBLinearPtr linear = *mem_struct;
- int cpp = info->CurrentLayout.pixel_bytes;
-
-- /* XAA allocates in units of pixels at the screen bpp, so adjust size appropriately. */
-- size = (size + cpp - 1) / cpp;
-+ /* XAA allocates in units of pixels at the screen bpp, so adjust size appropriately. */
-+ size = (size + cpp - 1) / cpp;
-+ align = (align + cpp - 1) / cpp;
-
- if(linear) {
-- if(linear->size >= size)
-- return linear->offset * cpp;
-+ if(linear->size >= size)
-+ return linear->offset * cpp;
-
-- if(xf86ResizeOffscreenLinear(linear, size))
-- return linear->offset * cpp;
-+ if(xf86ResizeOffscreenLinear(linear, size))
-+ return linear->offset * cpp;
-
-- xf86FreeOffscreenLinear(linear);
-+ xf86FreeOffscreenLinear(linear);
- }
-
--
-- linear = xf86AllocateOffscreenLinear(pScreen, size, 8,
-- NULL, NULL, NULL);
-+ linear = xf86AllocateOffscreenLinear(pScreen, size, align, NULL, NULL, NULL);
- *mem_struct = linear;
-
- if(!linear) {
-- int max_size;
--
-- xf86QueryLargestOffscreenLinear(pScreen, &max_size, 8,
-- PRIORITY_EXTREME);
-+ int max_size;
-
-- if(max_size < size)
-- return 0;
-+ xf86QueryLargestOffscreenLinear(pScreen, &max_size, align, PRIORITY_EXTREME);
-+ if(max_size < size) return 0;
-
-- xf86PurgeUnlockedOffscreenAreas(pScreen);
-- linear = xf86AllocateOffscreenLinear(pScreen, size, 8,
-- NULL, NULL, NULL);
-+ xf86PurgeUnlockedOffscreenAreas(pScreen);
-+ linear = xf86AllocateOffscreenLinear(pScreen, size, align, NULL, NULL, NULL);
-
-- if(!linear) return 0;
-+ *mem_struct = linear;
-+ if(!linear) return 0;
- }
-
-- offset = linear->offset * cpp;
-+ offset = linear->offset * cpp;
- }
--#ifdef USE_EXA
-- else {
-- /* EXA support based on mga driver */
-- ExaOffscreenArea *area = *mem_struct;
--
-- if(area) {
-- if(area->size >= size)
-- return area->offset;
--
-- exaOffscreenFree(pScrn->pScreen, area);
-- }
--
-- area = exaOffscreenAlloc(pScrn->pScreen, size, 64, TRUE, NULL, NULL);
-- *mem_struct = area;
--
-- if(!area) return 0;
--
-- offset = area->offset;
-- }
--#endif
-
- return offset;
- }
-@@ -929,11 +931,12 @@ R128PutImage(
- break;
- }
-
-- if(!(pPriv->videoOffset = R128AllocateMemory(pScrn, &(pPriv->BufferHandle),
-- pPriv->doubleBuffer ? (new_size << 1) : new_size)))
-- {
-- return BadAlloc;
-- }
-+ pPriv->videoOffset = R128AllocateMemory(pScrn, &(pPriv->BufferHandle),
-+ pPriv->doubleBuffer ? (new_size << 1) : new_size,
-+ 64, FALSE);
-+
-+ if (pPriv->videoOffset == 0)
-+ return BadAlloc;
-
- pPriv->currentBuffer ^= 1;
-
---
-2.2.2
-
-
-From 6dc5e9ab12dc31ae5de24f1d5c10c4fe80e7fe07 Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Thu, 24 Jul 2014 00:01:46 -0700
-Subject: Unify byte swappers
-
-The cursor loading function was using a lot of code to swap bytes for
-big endian systems. For awhile now, the solid picture support for EXA
-has had a more optimized function that does the same thing.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
-Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
----
- src/r128_cursor.c | 67 +++++++------------------------------------------------
- 1 file changed, 8 insertions(+), 59 deletions(-)
-
-diff --git a/src/r128_cursor.c b/src/r128_cursor.c
-index d42bea6..048e6c1 100644
---- a/src/r128_cursor.c
-+++ b/src/r128_cursor.c
-@@ -62,20 +62,6 @@
- #define CURSOR_WIDTH 64
- #define CURSOR_HEIGHT 64
-
--#if X_BYTE_ORDER == X_BIG_ENDIAN
--#define P_SWAP32( a , b ) \
-- ((char *)a)[0] = ((char *)b)[3]; \
-- ((char *)a)[1] = ((char *)b)[2]; \
-- ((char *)a)[2] = ((char *)b)[1]; \
-- ((char *)a)[3] = ((char *)b)[0]
--
--#define P_SWAP16( a , b ) \
-- ((char *)a)[0] = ((char *)b)[1]; \
-- ((char *)a)[1] = ((char *)b)[0]; \
-- ((char *)a)[2] = ((char *)b)[3]; \
-- ((char *)a)[3] = ((char *)b)[2]
--#endif
--
- void r128_crtc_show_cursor(xf86CrtcPtr crtc)
- {
- ScrnInfoPtr pScrn = crtc->scrn;
-@@ -176,14 +162,10 @@ void r128_crtc_load_cursor_image(xf86CrtcPtr crtc, unsigned char *src)
- R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
- int crtc_id = r128_crtc->crtc_id;
-
--
- R128InfoPtr info = R128PTR(pScrn);
- unsigned char *R128MMIO = info->MMIO;
-- uint32_t *s = (pointer)src;
-- uint32_t *d = (pointer)(info->FB + r128_crtc->cursor_offset + pScrn->fbOffset);
- uint32_t save1 = 0;
- uint32_t save2 = 0;
-- int y;
-
- if (crtc_id == 0) {
- save1 = INREG(R128_CRTC_GEN_CNTL);
-@@ -194,48 +176,15 @@ void r128_crtc_load_cursor_image(xf86CrtcPtr crtc, unsigned char *src)
- }
-
- #if X_BYTE_ORDER == X_BIG_ENDIAN
-- switch(info->CurrentLayout.pixel_bytes) {
-- case 4:
-- case 3:
-- for (y = 0; y < 64; y++) {
-- P_SWAP32(d,s);
-- d++; s++;
-- P_SWAP32(d,s);
-- d++; s++;
-- P_SWAP32(d,s);
-- d++; s++;
-- P_SWAP32(d,s);
-- d++; s++;
-- }
-- break;
-- case 2:
-- for (y = 0; y < 64; y++) {
-- P_SWAP16(d,s);
-- d++; s++;
-- P_SWAP16(d,s);
-- d++; s++;
-- P_SWAP16(d,s);
-- d++; s++;
-- P_SWAP16(d,s);
-- d++; s++;
-- }
-- break;
-- default:
-- for (y = 0; y < 64; y++) {
-- *d++ = *s++;
-- *d++ = *s++;
-- *d++ = *s++;
-- *d++ = *s++;
-- }
-- }
--#else
-- for (y = 0; y < 64; y++) {
-- *d++ = *s++;
-- *d++ = *s++;
-- *d++ = *s++;
-- *d++ = *s++;
-- }
-+ if (info->CurrentLayout.pixel_bytes == 4 || info->CurrentLayout.pixel_bytes == 3)
-+ R128CopySwap(info->FB + r128_crtc->cursor_offset + pScrn->fbOffset, src,
-+ CURSOR_WIDTH * CURSOR_HEIGHT / 4, APER_0_BIG_ENDIAN_32BPP_SWAP);
-+ else if (info->CurrentLayout.pixel_bytes == 2)
-+ R128CopySwap(info->FB + r128_crtc->cursor_offset + pScrn->fbOffset, src,
-+ CURSOR_WIDTH * CURSOR_HEIGHT / 4, APER_0_BIG_ENDIAN_16BPP_SWAP);
-+ else
- #endif
-+ memcpy(info->FB + r128_crtc->cursor_offset + pScrn->fbOffset, src, CURSOR_WIDTH * CURSOR_HEIGHT / 4);
-
- if (crtc_id == 0)
- OUTREG(R128_CRTC_GEN_CNTL, save1);
---
-2.2.2
-
-
-From 2072d9aa1a144e699f020a7f9e6a870e410bc9d7 Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Wed, 6 Aug 2014 15:41:02 -0700
-Subject: Improve handling of monitor and output types
-
-Checking for OUTPUT_DVI is not the same as checking for MT_DFP. There
-might be r128 cards with a DVI-I connector. These have the capability of
-driving an MT_CRT so we now check the monitor type before programming
-DAC or TMDS registers.
-
-This patch also removes R128ConnectorType and R128BIOSConnector because
-they were not doing much. These data structures are more useful for the
-radeon driver where there is a much wider range of cards.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
-Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
----
- src/r128.h | 1 -
- src/r128_driver.c | 2 +-
- src/r128_output.c | 160 ++++++++++++++++++++----------------------------------
- src/r128_probe.h | 16 ------
- 4 files changed, 60 insertions(+), 119 deletions(-)
-
-diff --git a/src/r128.h b/src/r128.h
-index 6df1b51..d8748b7 100644
---- a/src/r128.h
-+++ b/src/r128.h
-@@ -504,7 +504,6 @@ typedef struct {
- Bool DDC;
-
- Bool VGAAccess;
-- R128BIOSConnector BiosConnector[R128_MAX_BIOS_CONNECTOR];
-
- /****** Added for dualhead support *******************/
- BOOL IsSecondary; /* second Screen */
-diff --git a/src/r128_driver.c b/src/r128_driver.c
-index c541bfa..ce38b4e 100644
---- a/src/r128_driver.c
-+++ b/src/r128_driver.c
-@@ -3225,7 +3225,7 @@ void R128InitRMXRegisters(R128SavePtr orig, R128SavePtr save,
- save->fp_h_sync_strt_wid = save->crtc_h_sync_strt_wid;
- save->fp_v_sync_strt_wid = save->crtc_v_sync_strt_wid;
-
-- if (r128_output->type != OUTPUT_DVI && r128_output->type != OUTPUT_LVDS)
-+ if (r128_output->MonType != MT_DFP && r128_output->MonType != MT_LCD)
- return;
-
- if (r128_output->PanelXRes == 0 || r128_output->PanelYRes == 0) {
-diff --git a/src/r128_output.c b/src/r128_output.c
-index 7bb2e2a..757ef9b 100644
---- a/src/r128_output.c
-+++ b/src/r128_output.c
-@@ -90,21 +90,21 @@ static void r128_mode_set(xf86OutputPtr output, DisplayModePtr mode, DisplayMode
- if (r128_crtc->crtc_id == 0)
- R128InitRMXRegisters(&info->SavedReg, &info->ModeReg, output, adjusted_mode);
-
-- if (r128_output->type == OUTPUT_DVI)
-+ if (r128_output->MonType == MT_DFP)
- R128InitFPRegisters(&info->SavedReg, &info->ModeReg, output);
-- else if (r128_output->type == OUTPUT_LVDS)
-+ else if (r128_output->MonType == MT_LCD)
- R128InitLVDSRegisters(&info->SavedReg, &info->ModeReg, output);
-- else if (r128_output->type == OUTPUT_VGA)
-+ else if (r128_output->MonType == MT_CRT)
- R128InitDACRegisters(&info->SavedReg, &info->ModeReg, output);
-
- if (r128_crtc->crtc_id == 0)
- R128RestoreRMXRegisters(pScrn, &info->ModeReg);
-
-- if (r128_output->type == OUTPUT_DVI)
-+ if (r128_output->MonType == MT_DFP)
- R128RestoreFPRegisters(pScrn, &info->ModeReg);
-- else if (r128_output->type == OUTPUT_LVDS)
-+ else if (r128_output->MonType == MT_LCD)
- R128RestoreLVDSRegisters(pScrn, &info->ModeReg);
-- else if (r128_output->type == OUTPUT_VGA)
-+ else if (r128_output->MonType == MT_CRT)
- R128RestoreDACRegisters(pScrn, &info->ModeReg);
- }
-
-@@ -375,133 +375,91 @@ static Bool R128I2CInit(xf86OutputPtr output, I2CBusPtr *bus_ptr, char *name)
- return TRUE;
- }
-
--void R128SetOutputType(ScrnInfoPtr pScrn, R128OutputPrivatePtr r128_output)
--{
-- R128OutputType output = OUTPUT_NONE;
--
-- switch (r128_output->ConnectorType) {
-- case CONNECTOR_VGA:
-- output = OUTPUT_VGA;
-- break;
-- case CONNECTOR_LVDS:
-- output = OUTPUT_LVDS;
-- break;
-- case CONNECTOR_DVI_D:
-- case CONNECTOR_DVI_I:
-- case CONNECTOR_DVI_A:
-- output = OUTPUT_DVI;
-- break;
-- default:
-- output = OUTPUT_NONE;
-- }
--
-- r128_output->type = output;
--}
--
--void R128SetupGenericConnectors(ScrnInfoPtr pScrn)
-+void R128SetupGenericConnectors(ScrnInfoPtr pScrn, R128OutputType *otypes)
- {
- R128InfoPtr info = R128PTR(pScrn);
- R128EntPtr pR128Ent = R128EntPriv(pScrn);
-
- if (!pR128Ent->HasCRTC2 && !info->isDFP) {
-- info->BiosConnector[0].ConnectorType = CONNECTOR_VGA;
-- info->BiosConnector[0].valid = TRUE;
-+ otypes[0] = OUTPUT_VGA;
- return;
- } else if (!pR128Ent->HasCRTC2) {
-- info->BiosConnector[0].ConnectorType = CONNECTOR_DVI_D;
-- info->BiosConnector[0].valid = TRUE;
-+ otypes[0] = OUTPUT_DVI;
- return;
- }
-
-- info->BiosConnector[0].ConnectorType = CONNECTOR_LVDS;
-- info->BiosConnector[0].valid = TRUE;
--
-- info->BiosConnector[1].ConnectorType = CONNECTOR_VGA;
-- info->BiosConnector[1].valid = TRUE;
-+ otypes[0] = OUTPUT_LVDS;
-+ otypes[1] = OUTPUT_VGA;
- }
-
- Bool R128SetupConnectors(ScrnInfoPtr pScrn)
- {
- R128InfoPtr info = R128PTR(pScrn);
- R128EntPtr pR128Ent = R128EntPriv(pScrn);
-- xf86OutputPtr output;
-+
-+ R128OutputType otypes[R128_MAX_BIOS_CONNECTOR];
-+ xf86OutputPtr output;
- int num_vga = 0;
- int num_dvi = 0;
- int i;
-
-- for (i = 0; i < R128_MAX_BIOS_CONNECTOR; i++) {
-- info->BiosConnector[i].valid = FALSE;
-- info->BiosConnector[i].ConnectorType = CONNECTOR_NONE;
-- }
--
- /* XXX: Can we make R128GetConnectorInfoFromBIOS()? */
-- R128SetupGenericConnectors(pScrn);
-+ R128SetupGenericConnectors(pScrn, otypes);
-
- for (i = 0; i < R128_MAX_BIOS_CONNECTOR; i++) {
-- if (info->BiosConnector[i].valid) {
-- if ((info->BiosConnector[i].ConnectorType == CONNECTOR_DVI_D) ||
-- (info->BiosConnector[i].ConnectorType == CONNECTOR_DVI_I) ||
-- (info->BiosConnector[i].ConnectorType == CONNECTOR_DVI_A)) {
-- num_dvi++;
-- } else if (info->BiosConnector[i].ConnectorType == CONNECTOR_VGA) {
-- num_vga++;
-- }
-- }
-+ if (otypes[i] == OUTPUT_VGA)
-+ num_vga++;
-+ else if (otypes[i] == OUTPUT_DVI)
-+ num_dvi++;
- }
-
- for (i = 0; i < R128_MAX_BIOS_CONNECTOR; i++) {
-- if (info->BiosConnector[i].valid) {
-- R128I2CBusRec i2c;
-- R128OutputPrivatePtr r128_output;
-- R128ConnectorType conntype = info->BiosConnector[i].ConnectorType;
-+ if (otypes[i] == OUTPUT_NONE) continue;
-
-- if (conntype == CONNECTOR_NONE)
-- continue;
-+ R128I2CBusRec i2c;
-+ R128OutputPrivatePtr r128_output;
-
-- r128_output = xnfcalloc(sizeof(R128OutputPrivateRec), 1);
-- if (!r128_output) return FALSE;
-+ r128_output = xnfcalloc(sizeof(R128OutputPrivateRec), 1);
-+ if (!r128_output) return FALSE;
-
-- r128_output->MonType = MT_UNKNOWN;
-- r128_output->ConnectorType = conntype;
-- r128_output->num = i;
-+ r128_output->MonType = MT_UNKNOWN;
-+ r128_output->type = otypes[i];
-+ r128_output->num = i;
-
-- if (conntype == CONNECTOR_LVDS) {
-- output = R128OutputCreate(pScrn, "LVDS", 0);
-- } else if (conntype == CONNECTOR_VGA) {
-- output = R128OutputCreate(pScrn, "VGA-%d", --num_vga);
-- } else {
-- output = R128OutputCreate(pScrn, "DVI-%d", --num_dvi);
-- }
-+ if (otypes[i] == OUTPUT_LVDS) {
-+ output = R128OutputCreate(pScrn, "LVDS", 0);
-+ } else if (otypes[i] == OUTPUT_VGA) {
-+ output = R128OutputCreate(pScrn, "VGA-%d", --num_vga);
-+ } else {
-+ output = R128OutputCreate(pScrn, "DVI-%d", --num_dvi);
-+ }
-
-- if (!output) return FALSE;
-- output->interlaceAllowed = TRUE;
-- output->doubleScanAllowed = TRUE;
-- output->driver_private = r128_output;
-- output->possible_clones = 0;
-- if (conntype == CONNECTOR_LVDS || !pR128Ent->HasCRTC2)
-- output->possible_crtcs = 1;
-- else
-- output->possible_crtcs = 2;
--
-- if (conntype != CONNECTOR_LVDS && info->DDC) {
-- i2c.ddc_reg = R128_GPIO_MONID;
-- i2c.put_clk_mask = R128_GPIO_MONID_EN_3;
-- i2c.get_clk_mask = R128_GPIO_MONID_Y_3;
-- if (conntype == CONNECTOR_VGA) {
-- i2c.put_data_mask = R128_GPIO_MONID_EN_1;
-- i2c.get_data_mask = R128_GPIO_MONID_Y_1;
-- } else {
-- i2c.put_data_mask = R128_GPIO_MONID_EN_0;
-- i2c.get_data_mask = R128_GPIO_MONID_Y_0;
-- }
-- r128_output->ddc_i2c = i2c;
-- R128I2CInit(output, &r128_output->pI2CBus, output->name);
-- } else if (conntype == CONNECTOR_LVDS) {
-- r128_output->PanelXRes = info->PanelXRes;
-- r128_output->PanelYRes = info->PanelYRes;
-+ if (!output) return FALSE;
-+ output->interlaceAllowed = TRUE;
-+ output->doubleScanAllowed = TRUE;
-+ output->driver_private = r128_output;
-+ output->possible_clones = 0;
-+ if (otypes[i] == OUTPUT_LVDS || !pR128Ent->HasCRTC2)
-+ output->possible_crtcs = 1;
-+ else
-+ output->possible_crtcs = 2;
-+
-+ if (otypes[i] != OUTPUT_LVDS && info->DDC) {
-+ i2c.ddc_reg = R128_GPIO_MONID;
-+ i2c.put_clk_mask = R128_GPIO_MONID_EN_3;
-+ i2c.get_clk_mask = R128_GPIO_MONID_Y_3;
-+ if (otypes[i] == OUTPUT_VGA) {
-+ i2c.put_data_mask = R128_GPIO_MONID_EN_1;
-+ i2c.get_data_mask = R128_GPIO_MONID_Y_1;
-+ } else {
-+ i2c.put_data_mask = R128_GPIO_MONID_EN_0;
-+ i2c.get_data_mask = R128_GPIO_MONID_Y_0;
- }
--
-- R128SetOutputType(pScrn, r128_output);
-+ r128_output->ddc_i2c = i2c;
-+ R128I2CInit(output, &r128_output->pI2CBus, output->name);
-+ } else if (otypes[i] == OUTPUT_LVDS) {
-+ r128_output->PanelXRes = info->PanelXRes;
-+ r128_output->PanelYRes = info->PanelYRes;
- }
- }
-
-diff --git a/src/r128_probe.h b/src/r128_probe.h
-index 433463b..fef210d 100644
---- a/src/r128_probe.h
-+++ b/src/r128_probe.h
-@@ -112,16 +112,6 @@ typedef enum
-
- typedef enum
- {
-- CONNECTOR_NONE,
-- CONNECTOR_VGA,
-- CONNECTOR_DVI_I,
-- CONNECTOR_DVI_D,
-- CONNECTOR_DVI_A,
-- CONNECTOR_LVDS
--} R128ConnectorType;
--
--typedef enum
--{
- OUTPUT_NONE,
- OUTPUT_VGA,
- OUTPUT_DVI,
-@@ -144,15 +134,9 @@ typedef struct _R128CrtcPrivateRec {
- uint8_t lut_r[256], lut_g[256], lut_b[256];
- } R128CrtcPrivateRec, *R128CrtcPrivatePtr;
-
--typedef struct {
-- R128ConnectorType ConnectorType;
-- Bool valid;
--} R128BIOSConnector;
--
- typedef struct _R128OutputPrivateRec {
- int num;
- R128OutputType type;
-- R128ConnectorType ConnectorType;
- R128MonitorType MonType;
- I2CBusPtr pI2CBus;
- R128I2CBusRec ddc_i2c;
---
-2.2.2
-
-
-From 6140081f0e8f41cf85b8e86f7a9474c20be9a2e9 Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Wed, 6 Aug 2014 15:51:33 -0700
-Subject: Remove custom dualhead code
-
-There are probably no reasons left to use Xinerama over xrandr. This
-removes the screen based dualhead code and the BIOS Display option in
-xorg.conf. Additionally, R128ValidMode() is wrapped so that it can be
-aware of multiple displays.
-
-Even though some Crtc functions refer to them, PanelXRes and PanelYRes
-should be properties of the Output. If this change to the code seems
-awkward, see http://marc.info/?t=107222330700001 for more information.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
-Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
----
- man/r128.man | 18 --
- src/r128.h | 42 ++--
- src/r128_accel.c | 18 +-
- src/r128_crtc.c | 62 +++--
- src/r128_driver.c | 701 ++++++++++++++++++++----------------------------------
- src/r128_output.c | 10 +-
- src/r128_probe.c | 1 -
- src/r128_probe.h | 4 +-
- src/r128_video.c | 11 +-
- 9 files changed, 326 insertions(+), 541 deletions(-)
-
-diff --git a/man/r128.man b/man/r128.man
-index d490f93..bd58e0d 100644
---- a/man/r128.man
-+++ b/man/r128.man
-@@ -88,24 +88,6 @@ are used. The default is
- This overrides the default pixel value for the YUV video overlay key.
- The default value is
- .B undefined.
--.TP
--.BI "Option \*qDisplay\*q \*q" string \*q
--Select display mode for devices which support flat panels. Supported modes are:
--
--.B \*qFP\*q
--- use flat panel;
--
--.B \*qCRT\*q
--- use cathode ray tube;
--
--.B \*qMirror\*q
--- use both FP and CRT;
--
--.B \*qBIOS\*q
--- use mode as configured in the BIOS.
--
--The default is
--.B FP.
-
- .PP
- The following
-diff --git a/src/r128.h b/src/r128.h
-index d8748b7..3b1e631 100644
---- a/src/r128.h
-+++ b/src/r128.h
-@@ -136,6 +136,14 @@
- #define R128_ALIGN(x,bytes) (((x) + ((bytes) - 1)) & ~((bytes) - 1))
- #define R128PTR(pScrn) ((R128InfoPtr)(pScrn)->driverPrivate)
-
-+#define R128_BIOS8(v) ((info->VBIOS[(v)]))
-+#define R128_BIOS16(v) ((info->VBIOS[(v)]) | \
-+ (info->VBIOS[(v) + 1] << 8))
-+#define R128_BIOS32(v) ((info->VBIOS[(v)]) | \
-+ (info->VBIOS[(v) + 1] << 8) | \
-+ (info->VBIOS[(v) + 2] << 16) | \
-+ (info->VBIOS[(v) + 3] << 24))
-+
- typedef struct { /* All values in XCLKS */
- int ML; /* Memory Read Latency */
- int MB; /* Memory Burst Length */
-@@ -311,16 +319,8 @@ typedef struct {
- uint32_t MemCntl;
- uint32_t BusCntl;
- unsigned long FbMapSize; /* Size of frame buffer, in bytes */
--
-- uint8_t BIOSDisplay; /* Device the BIOS is set to display to */
--
- Bool HasPanelRegs; /* Current chip can connect to a FP */
-
-- /* Computed values for FPs */
-- int PanelXRes;
-- int PanelYRes;
-- int PanelPwrDly;
--
- R128PLLRec pll;
- R128RAMPtr ram;
-
-@@ -501,17 +501,10 @@ typedef struct {
-
- Bool isDFP;
- Bool isPro2;
-+ Bool SwitchingMode;
- Bool DDC;
-
- Bool VGAAccess;
--
-- /****** Added for dualhead support *******************/
-- BOOL IsSecondary; /* second Screen */
-- BOOL IsPrimary; /* primary Screen */
-- BOOL UseCRT; /* force use CRT port as primary */
-- BOOL SwitchingMode;
-- R128MonitorType DisplayType; /* Monitor connected on*/
--
- } R128InfoRec, *R128InfoPtr;
-
- #define R128WaitForFifo(pScrn, entries) \
-@@ -535,6 +528,7 @@ extern Bool R128CursorInit(ScreenPtr pScreen);
- extern Bool R128DGAInit(ScreenPtr pScreen);
-
- extern int R128MinBits(int val);
-+extern xf86OutputPtr R128FirstOutput(xf86CrtcPtr crtc);
-
- extern void R128InitVideo(ScreenPtr pScreen);
-
-@@ -544,13 +538,13 @@ extern void R128InitRMXRegisters(R128SavePtr orig, R128SavePtr save, xf86
- extern void R128InitFPRegisters(R128SavePtr orig, R128SavePtr save, xf86OutputPtr output);
- extern void R128InitLVDSRegisters(R128SavePtr orig, R128SavePtr save, xf86OutputPtr output);
- extern Bool R128InitCrtcBase(xf86CrtcPtr crtc, R128SavePtr save, int x, int y);
--extern Bool R128InitCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr save, DisplayModePtr mode, R128InfoPtr info);
--extern void R128InitPLLRegisters(ScrnInfoPtr pScrn, R128SavePtr save, R128PLLPtr pll, double dot_clock);
--extern Bool R128InitDDARegisters(ScrnInfoPtr pScrn, R128SavePtr save, R128PLLPtr pll, R128InfoPtr info, DisplayModePtr mode);
-+extern Bool R128InitCrtcRegisters(xf86CrtcPtr crtc, R128SavePtr save, DisplayModePtr mode);
-+extern void R128InitPLLRegisters(xf86CrtcPtr crtc, R128SavePtr save, R128PLLPtr pll, double dot_clock);
-+extern Bool R128InitDDARegisters(xf86CrtcPtr crtc, R128SavePtr save, R128PLLPtr pll, DisplayModePtr mode);
- extern Bool R128InitCrtc2Base(xf86CrtcPtr crtc, R128SavePtr save, int x, int y);
--extern Bool R128InitCrtc2Registers(ScrnInfoPtr pScrn, R128SavePtr save, DisplayModePtr mode, R128InfoPtr info);
--extern void R128InitPLL2Registers(ScrnInfoPtr pScrn, R128SavePtr save, R128PLLPtr pll, double dot_clock);
--extern Bool R128InitDDA2Registers(ScrnInfoPtr pScrn, R128SavePtr save, R128PLLPtr pll, R128InfoPtr info, DisplayModePtr mode);
-+extern Bool R128InitCrtc2Registers(xf86CrtcPtr crtc, R128SavePtr save, DisplayModePtr mode);
-+extern void R128InitPLL2Registers(xf86CrtcPtr crtc, R128SavePtr save, R128PLLPtr pll, double dot_clock);
-+extern Bool R128InitDDA2Registers(xf86CrtcPtr crtc, R128SavePtr save, R128PLLPtr pll, DisplayModePtr mode);
- extern void R128RestoreCommonRegisters(ScrnInfoPtr pScrn, R128SavePtr restore);
- extern void R128RestoreDACRegisters(ScrnInfoPtr pScrn, R128SavePtr restore);
- extern void R128RestoreRMXRegisters(ScrnInfoPtr pScrn, R128SavePtr restore);
-@@ -571,11 +565,13 @@ extern void r128_crtc_load_cursor_image(xf86CrtcPtr crtc, unsigned char *
-
- extern uint32_t R128AllocateMemory(ScrnInfoPtr pScrn, void **mem_struct, int size, int align, Bool need_accel);
- extern Bool R128SetupConnectors(ScrnInfoPtr pScrn);
--extern Bool R128AllocateControllers(ScrnInfoPtr pScrn, int mask);
-+extern Bool R128AllocateControllers(ScrnInfoPtr pScrn);
-+extern void R128GetPanelInfoFromBIOS(xf86OutputPtr output);
- extern void R128Blank(ScrnInfoPtr pScrn);
- extern void R128Unblank(ScrnInfoPtr pScrn);
- extern void R128DPMSSetOn(xf86OutputPtr output);
- extern void R128DPMSSetOff(xf86OutputPtr output);
-+extern ModeStatus R128DoValidMode(xf86OutputPtr output, DisplayModePtr mode, int flags);
- extern DisplayModePtr R128ProbeOutputModes(xf86OutputPtr output);
-
- #ifdef R128DRI
-diff --git a/src/r128_accel.c b/src/r128_accel.c
-index 99bfb20..fa58327 100644
---- a/src/r128_accel.c
-+++ b/src/r128_accel.c
-@@ -1746,7 +1746,7 @@ static void R128CCEAccelInit(ScrnInfoPtr pScrn, XAAInfoRecPtr a)
- | HARDWARE_PATTERN_SCREEN_ORIGIN
- | BIT_ORDER_IN_BYTE_LSBFIRST);
-
-- if(!info->IsSecondary && xf86IsEntityShared(pScrn->entityList[0]))
-+ if (xf86IsEntityShared(info->pEnt->index))
- a->RestoreAccelState = R128RestoreCCEAccelState;
-
- }
-@@ -1851,15 +1851,13 @@ static void R128MMIOAccelInit(ScrnInfoPtr pScrn, XAAInfoRecPtr a)
- | LEFT_EDGE_CLIPPING_NEGATIVE_X
- | SCANLINE_PAD_DWORD;
-
-- if(xf86IsEntityShared(pScrn->entityList[0]))
-- {
-- R128EntPtr pR128Ent = R128EntPriv(pScrn);
--
-- /*if there are more than one devices sharing this entity, we
-- have to assign this call back, otherwise the XAA will be
-- disabled */
-- if(pR128Ent->HasSecondary || pR128Ent->BypassSecondary)
-- a->RestoreAccelState = R128RestoreAccelState;
-+ if (xf86IsEntityShared(info->pEnt-index)) {
-+ /* If there are more than one devices sharing this entity, we
-+ * have to assign this call back, otherwise the XAA will be
-+ * disabled.
-+ */
-+ if (xf86GetNumEntityInstances(info->pEnt->index) > 1)
-+ a->RestoreAccelState = R128RestoreAccelState;
- }
-
- }
-diff --git a/src/r128_crtc.c b/src/r128_crtc.c
-index 92a6c30..26d4414 100644
---- a/src/r128_crtc.c
-+++ b/src/r128_crtc.c
-@@ -143,11 +143,11 @@ static void r128_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode, DisplayMod
-
- switch (r128_crtc->crtc_id) {
- case 0:
-- R128InitCrtcRegisters(pScrn, &info->ModeReg, adjusted_mode, info);
-+ R128InitCrtcRegisters(crtc, &info->ModeReg, adjusted_mode);
- R128InitCrtcBase(crtc, &info->ModeReg, x, y);
- if (dot_clock) {
-- R128InitPLLRegisters(pScrn, &info->ModeReg, &info->pll, dot_clock);
-- R128InitDDARegisters(pScrn, &info->ModeReg, &info->pll, info, adjusted_mode);
-+ R128InitPLLRegisters(crtc, &info->ModeReg, &info->pll, dot_clock);
-+ R128InitDDARegisters(crtc, &info->ModeReg, &info->pll, adjusted_mode);
- } else {
- info->ModeReg.ppll_ref_div = info->SavedReg.ppll_ref_div;
- info->ModeReg.ppll_div_3 = info->SavedReg.ppll_div_3;
-@@ -157,11 +157,11 @@ static void r128_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode, DisplayMod
- }
- break;
- case 1:
-- R128InitCrtc2Registers(pScrn, &info->ModeReg, adjusted_mode, info);
-+ R128InitCrtc2Registers(crtc, &info->ModeReg, adjusted_mode);
- R128InitCrtc2Base(crtc, &info->ModeReg, x, y);
- if (dot_clock) {
-- R128InitPLL2Registers(pScrn, &info->ModeReg, &info->pll, dot_clock);
-- R128InitDDA2Registers(pScrn, &info->ModeReg, &info->pll, info, adjusted_mode);
-+ R128InitPLL2Registers(crtc, &info->ModeReg, &info->pll, dot_clock);
-+ R128InitDDA2Registers(crtc, &info->ModeReg, &info->pll, adjusted_mode);
- }
- break;
- }
-@@ -327,44 +327,40 @@ static const xf86CrtcFuncsRec r128_crtc_funcs = {
- .destroy = NULL,
- };
-
--Bool R128AllocateControllers(ScrnInfoPtr pScrn, int mask)
-+Bool R128AllocateControllers(ScrnInfoPtr pScrn)
- {
- R128EntPtr pR128Ent = R128EntPriv(pScrn);
-
-- if (mask & 1) {
-- if (pR128Ent->Controller[0])
-- return TRUE;
-+ if (pR128Ent->Controller[0])
-+ return TRUE;
-
-- pR128Ent->pCrtc[0] = xf86CrtcCreate(pScrn, &r128_crtc_funcs);
-- if (!pR128Ent->pCrtc[0])
-- return FALSE;
-+ pR128Ent->pCrtc[0] = xf86CrtcCreate(pScrn, &r128_crtc_funcs);
-+ if (!pR128Ent->pCrtc[0])
-+ return FALSE;
-
-- pR128Ent->Controller[0] = xnfcalloc(sizeof(R128CrtcPrivateRec), 1);
-- if (!pR128Ent->Controller[0])
-- return FALSE;
-+ pR128Ent->Controller[0] = xnfcalloc(sizeof(R128CrtcPrivateRec), 1);
-+ if (!pR128Ent->Controller[0])
-+ return FALSE;
-
-- pR128Ent->pCrtc[0]->driver_private = pR128Ent->Controller[0];
-- pR128Ent->Controller[0]->crtc_id = 0;
-- }
--
-- if (mask & 2) {
-- if (!pR128Ent->HasCRTC2)
-- return TRUE;
-+ pR128Ent->pCrtc[0]->driver_private = pR128Ent->Controller[0];
-+ pR128Ent->Controller[0]->crtc_id = 0;
-
-- pR128Ent->pCrtc[1] = xf86CrtcCreate(pScrn, &r128_crtc_funcs);
-- if (!pR128Ent->pCrtc[1])
-- return FALSE;
-+ if (!pR128Ent->HasCRTC2)
-+ return TRUE;
-
-- pR128Ent->Controller[1] = xnfcalloc(sizeof(R128CrtcPrivateRec), 1);
-- if (!pR128Ent->Controller[1]) {
-- free(pR128Ent->Controller[0]);
-- return FALSE;
-- }
-+ pR128Ent->pCrtc[1] = xf86CrtcCreate(pScrn, &r128_crtc_funcs);
-+ if (!pR128Ent->pCrtc[1])
-+ return FALSE;
-
-- pR128Ent->pCrtc[1]->driver_private = pR128Ent->Controller[1];
-- pR128Ent->Controller[1]->crtc_id = 1;
-+ pR128Ent->Controller[1] = xnfcalloc(sizeof(R128CrtcPrivateRec), 1);
-+ if (!pR128Ent->Controller[1]) {
-+ free(pR128Ent->Controller[0]);
-+ return FALSE;
- }
-
-+ pR128Ent->pCrtc[1]->driver_private = pR128Ent->Controller[1];
-+ pR128Ent->Controller[1]->crtc_id = 1;
-+
- return TRUE;
- }
-
-diff --git a/src/r128_driver.c b/src/r128_driver.c
-index ce38b4e..0a8d802 100644
---- a/src/r128_driver.c
-+++ b/src/r128_driver.c
-@@ -171,7 +171,6 @@ static const OptionInfoRec R128Options[] = {
- { OPTION_BUFFER_SIZE, "BufferSize", OPTV_INTEGER, {0}, FALSE },
- { OPTION_PAGE_FLIP, "EnablePageFlip", OPTV_BOOLEAN, {0}, FALSE },
- #endif
-- { OPTION_DISPLAY, "Display", OPTV_STRING, {0}, FALSE },
- { OPTION_PANEL_WIDTH, "PanelWidth", OPTV_INTEGER, {0}, FALSE },
- { OPTION_PANEL_HEIGHT, "PanelHeight", OPTV_INTEGER, {0}, FALSE },
- { OPTION_PROG_FP_REGS, "ProgramFPRegs", OPTV_BOOLEAN, {0}, FALSE },
-@@ -238,14 +237,6 @@ static Bool R128MapMMIO(ScrnInfoPtr pScrn)
- if (info->FBDev) {
- info->MMIO = fbdevHWMapMMIO(pScrn);
- } else {
-- /* If the primary screen has already mapped the MMIO region,
-- use its pointer instead of mapping it a second time. */
-- if (info->IsSecondary) {
-- R128EntPtr pR128Ent = R128EntPriv(pScrn);
-- R128InfoPtr info0 = R128PTR(pR128Ent->pPrimaryScrn);
-- info->MMIO=info0->MMIO;
-- if (info->MMIO) return TRUE;
-- }
- #ifndef XSERVER_LIBPCIACCESS
- info->MMIO = xf86MapPciMem(pScrn->scrnIndex,
- VIDMEM_MMIO | VIDMEM_READSIDEEFFECT,
-@@ -412,20 +403,26 @@ static int R128Div(int n, int d)
- return (n + (d / 2)) / d;
- }
-
--/* Read the Video BIOS block and the FP registers (if applicable). */
-+/* Finds the first output using a given crtc. */
-+xf86OutputPtr R128FirstOutput(xf86CrtcPtr crtc)
-+{
-+ ScrnInfoPtr pScrn = crtc->scrn;
-+ xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
-+ xf86OutputPtr output = xf86_config->output[0];
-+ int o;
-+
-+ for (o = 0; o < xf86_config->num_output; o++) {
-+ output = xf86_config->output[o];
-+ if (output->crtc == crtc) break;
-+ }
-+
-+ return output;
-+}
-+
-+/* Read the Video BIOS block. */
- static Bool R128GetBIOSParameters(ScrnInfoPtr pScrn, xf86Int10InfoPtr pInt10)
- {
- R128InfoPtr info = R128PTR(pScrn);
-- int i;
-- int FPHeader = 0;
--
--#define R128_BIOS8(v) (info->VBIOS[v])
--#define R128_BIOS16(v) (info->VBIOS[v] | \
-- (info->VBIOS[(v) + 1] << 8))
--#define R128_BIOS32(v) (info->VBIOS[v] | \
-- (info->VBIOS[(v) + 1] << 8) | \
-- (info->VBIOS[(v) + 2] << 16) | \
-- (info->VBIOS[(v) + 3] << 24))
-
- #ifdef XSERVER_LIBPCIACCESS
- int size = info->PciInfo->rom_size > R128_VBIOS_SIZE ? info->PciInfo->rom_size : R128_VBIOS_SIZE;
-@@ -469,143 +466,103 @@ static Bool R128GetBIOSParameters(ScrnInfoPtr pScrn, xf86Int10InfoPtr pInt10)
- xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
- "Video BIOS not found!\n");
- }
-- R128EntPtr pR128Ent = R128EntPriv(pScrn);
--
-- if(pR128Ent->HasCRTC2)
-- {
-- if(info->IsSecondary)
-- {
-- /* there may be a way to detect this, for now, just assume
-- second head is CRT */
-- info->DisplayType = MT_CRT;
--
-- if(info->DisplayType > MT_NONE)
-- {
-- pR128Ent->HasSecondary = TRUE;
--
-- }
-- else return FALSE;
--
-- }
-- else
-- {
-- /* really need some sort of detection here */
-- if (info->HasPanelRegs) {
-- info->DisplayType = MT_LCD;
-- } else if (info->isDFP) {
-- info->DisplayType = MT_DFP;
-- } else
-- {
-- /*DVI port has no monitor connected, try CRT port.
-- If something on CRT port, treat it as primary*/
-- if(xf86IsEntityShared(pScrn->entityList[0]))
-- {
-- R128EntPtr pR128Ent = R128EntPriv(pScrn);
-- pR128Ent->BypassSecondary = TRUE;
-- }
--
-- info->DisplayType = MT_CRT;
--#if 0
-- {
-- xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-- "No monitor detected!!!\n");
-- return FALSE;
-- }
--#endif
-- }
-- }
-- }
-- else
-- {
-- /*Regular Radeon ASIC, only one CRTC, but it could be
-- used for DFP with a DVI output, like AIW board*/
-- if(info->isDFP) info->DisplayType = MT_DFP;
-- else info->DisplayType = MT_CRT;
-- }
--
-- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "%s Display == Type %d\n",
-- (info->IsSecondary ? "Secondary" : "Primary"),
-- info->DisplayType);
--
--
-- if (info->VBIOS && info->DisplayType == MT_LCD) {
-- info->FPBIOSstart = 0;
--
-- /* FIXME: There should be direct access to the start of the FP info
-- tables, but until we find out where that offset is stored, we
-- must search for the ATI signature string: "M3 ". */
-- for (i = 4; i < R128_VBIOS_SIZE-8; i++) {
-- if (R128_BIOS8(i) == 'M' &&
-- R128_BIOS8(i+1) == '3' &&
-- R128_BIOS8(i+2) == ' ' &&
-- R128_BIOS8(i+3) == ' ' &&
-- R128_BIOS8(i+4) == ' ' &&
-- R128_BIOS8(i+5) == ' ' &&
-- R128_BIOS8(i+6) == ' ' &&
-- R128_BIOS8(i+7) == ' ') {
-- FPHeader = i-2;
-- break;
-- }
-- }
-
-- if (!FPHeader) return TRUE;
-+ return TRUE;
-+}
-
-- /* Assume that only one panel is attached and supported */
-- for (i = FPHeader+20; i < FPHeader+84; i += 2) {
-- if (R128_BIOS16(i) != 0) {
-- info->FPBIOSstart = R128_BIOS16(i);
-- break;
-- }
-- }
-- if (!info->FPBIOSstart) return TRUE;
--
-- if (!info->PanelXRes)
-- info->PanelXRes = R128_BIOS16(info->FPBIOSstart+25);
-- if (!info->PanelYRes)
-- info->PanelYRes = R128_BIOS16(info->FPBIOSstart+27);
-- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Panel size: %dx%d\n",
-- info->PanelXRes, info->PanelYRes);
--
-- info->PanelPwrDly = R128_BIOS8(info->FPBIOSstart+56);
--
-- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Panel ID: ");
-- for (i = 1; i <= 24; i++)
-- ErrorF("%c", R128_BIOS8(info->FPBIOSstart+i));
-- ErrorF("\n");
-- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Panel Type: ");
-- i = R128_BIOS16(info->FPBIOSstart+29);
-- if (i & 1) ErrorF("Color, ");
-- else ErrorF("Monochrome, ");
-- if (i & 2) ErrorF("Dual(split), ");
-- else ErrorF("Single, ");
-- switch ((i >> 2) & 0x3f) {
-- case 0: ErrorF("STN"); break;
-- case 1: ErrorF("TFT"); break;
-- case 2: ErrorF("Active STN"); break;
-- case 3: ErrorF("EL"); break;
-- case 4: ErrorF("Plasma"); break;
-- default: ErrorF("UNKNOWN"); break;
-- }
-- ErrorF("\n");
-- if (R128_BIOS8(info->FPBIOSstart+61) & 1) {
-- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Panel Interface: LVDS\n");
-- } else {
-- /* FIXME: Add Non-LVDS flat pael support */
-- xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
-- "Non-LVDS panel interface detected! "
-- "This support is untested and may not "
-- "function properly\n");
-- }
-+/* Read the FP parameters if an LVDS panel is expected. */
-+void R128GetPanelInfoFromBIOS(xf86OutputPtr output)
-+{
-+ ScrnInfoPtr pScrn = output->scrn;
-+ R128InfoPtr info = R128PTR(pScrn);
-+ R128OutputPrivatePtr r128_output = output->driver_private;
-+ int FPHeader = 0;
-+ int i;
-+
-+ if (!info->VBIOS) return;
-+ info->FPBIOSstart = 0;
-+
-+ /* FIXME: There should be direct access to the start of the FP info
-+ * tables, but until we find out where that offset is stored, we
-+ * must search for the ATI signature string: "M3 ".
-+ */
-+ for (i = 4; i < R128_VBIOS_SIZE - 8; i++) {
-+ if (R128_BIOS8(i) == 'M' &&
-+ R128_BIOS8(i + 1) == '3' &&
-+ R128_BIOS8(i + 2) == ' ' &&
-+ R128_BIOS8(i + 3) == ' ' &&
-+ R128_BIOS8(i + 4) == ' ' &&
-+ R128_BIOS8(i + 5) == ' ' &&
-+ R128_BIOS8(i + 6) == ' ' &&
-+ R128_BIOS8(i + 7) == ' ') {
-+ FPHeader = i - 2;
-+ break;
-+ }
-+ }
-+
-+ if (!FPHeader) return;
-+
-+ /* Assume that only one panel is attached and supported */
-+ for (i = FPHeader+20; i < FPHeader+84; i += 2) {
-+ if (R128_BIOS16(i) != 0) {
-+ info->FPBIOSstart = R128_BIOS16(i);
-+ break;
-+ }
- }
-
-- if (!info->PanelXRes || !info->PanelYRes) {
-+ if (!info->FPBIOSstart) return;
-+ xf86GetOptValInteger(info->Options, OPTION_PANEL_WIDTH, &(r128_output->PanelXRes));
-+ xf86GetOptValInteger(info->Options, OPTION_PANEL_HEIGHT, &(r128_output->PanelYRes));
-+
-+ if (!r128_output->PanelXRes)
-+ r128_output->PanelXRes = R128_BIOS16(info->FPBIOSstart + 25);
-+ if (!r128_output->PanelYRes)
-+ r128_output->PanelYRes = R128_BIOS16(info->FPBIOSstart + 27);
-+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Panel size: %dx%d\n",
-+ r128_output->PanelXRes, r128_output->PanelYRes);
-+
-+ r128_output->PanelPwrDly = R128_BIOS8(info->FPBIOSstart + 56);
-+
-+ if (!r128_output->PanelXRes || !r128_output->PanelYRes) {
- info->HasPanelRegs = FALSE;
- xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
- "Can't determine panel dimensions, and none specified.\n"
- "\tDisabling programming of FP registers.\n");
- }
-
-- return TRUE;
-+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Panel ID: ");
-+ for (i = 1; i <= 24; i++)
-+ ErrorF("%c", R128_BIOS8(info->FPBIOSstart + i));
-+
-+ ErrorF("\n");
-+
-+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Panel Type: ");
-+ i = R128_BIOS16(info->FPBIOSstart + 29);
-+ if (i & 1) ErrorF("Color, ");
-+ else ErrorF("Monochrome, ");
-+ if (i & 2) ErrorF("Dual(split), ");
-+ else ErrorF("Single, ");
-+
-+ switch ((i >> 2) & 0x3f) {
-+ case 0: ErrorF("STN"); break;
-+ case 1: ErrorF("TFT"); break;
-+ case 2: ErrorF("Active STN"); break;
-+ case 3: ErrorF("EL"); break;
-+ case 4: ErrorF("Plasma"); break;
-+ default: ErrorF("UNKNOWN"); break;
-+ }
-+
-+ ErrorF("\n");
-+
-+ if (R128_BIOS8(info->FPBIOSstart + 61) & 1) {
-+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Panel Interface: LVDS\n");
-+ } else {
-+ /* FIXME: Add Non-LVDS flat pael support */
-+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
-+ "Non-LVDS panel interface detected! "
-+ "This support is untested and may not "
-+ "function properly\n");
-+ }
- }
-
- /* Read PLL parameters from BIOS block. Default to typical values if there
-@@ -956,39 +913,6 @@ static Bool R128PreInitConfig(ScrnInfoPtr pScrn)
- info->MemCntl = INREG(R128_MEM_CNTL);
- info->BusCntl = INREG(R128_BUS_CNTL);
-
-- /* On non-flat panel systems, the default is to display to the CRT,
-- and on flat panel systems, the default is to display to the flat
-- panel unless the user explicity chooses otherwise using the "Display"
-- config file setting. BIOS_5_SCRATCH holds the display device on flat
-- panel systems only. */
-- if (info->HasPanelRegs) {
-- char *Display = xf86GetOptValString(info->Options, OPTION_DISPLAY);
--
-- if (info->FBDev)
-- xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-- "Option \"Display\" ignored "
-- "(framebuffer device determines display type)\n");
-- else if (!Display)
-- info->BIOSDisplay = R128_DUALHEAD;
-- else if (!xf86NameCmp(Display, "FP"))
-- info->BIOSDisplay = R128_BIOS_DISPLAY_FP;
-- else if (!xf86NameCmp(Display, "BIOS"))
-- info->BIOSDisplay = INREG8(R128_BIOS_5_SCRATCH);
-- else if (!xf86NameCmp(Display, "Mirror"))
-- info->BIOSDisplay = R128_BIOS_DISPLAY_FP_CRT;
-- else if (!xf86NameCmp(Display, "CRT"))
-- info->BIOSDisplay = R128_BIOS_DISPLAY_CRT;
-- else {
-- xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-- "Unsupported type \"%s\" specified for Option \"Display\".\n"
-- "\tSupported types are: "
-- "\"BIOS\", \"Mirror\", \"CRT\" and \"FP\"\n", Display);
-- return FALSE;
-- }
-- } else {
-- info->BIOSDisplay = R128_BIOS_DISPLAY_CRT;
-- }
--
- /* RAM */
- switch (info->MemCntl & 0x3) {
- case 0: /* SDR SGRAM 1:1 */
-@@ -1027,62 +951,9 @@ static Bool R128PreInitConfig(ScrnInfoPtr pScrn)
- xf86DrvMsg(pScrn->scrnIndex, from,
- "VideoRAM: %d kByte (%s)\n", pScrn->videoRam, info->ram->name);
-
-- if (info->IsPrimary) {
-- pScrn->videoRam /= 2;
-- xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-- "Using %dk of videoram for primary head\n",
-- pScrn->videoRam);
-- }
--
-- if (info->IsSecondary) {
-- pScrn->videoRam /= 2;
-- info->LinearAddr += pScrn->videoRam * 1024;
-- xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-- "Using %dk of videoram for secondary head\n",
-- pScrn->videoRam);
-- }
--
- pScrn->videoRam &= ~1023;
- info->FbMapSize = pScrn->videoRam * 1024;
-
--
-- /* Flat panel (part 2) */
-- switch (info->BIOSDisplay) {
-- case R128_DUALHEAD:
-- xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-- "Dual display\n");
-- break;
-- case R128_BIOS_DISPLAY_FP:
-- xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-- "Using flat panel for display\n");
-- break;
-- case R128_BIOS_DISPLAY_CRT:
-- xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-- "Using external CRT for display\n");
-- break;
-- case R128_BIOS_DISPLAY_FP_CRT:
-- xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-- "Using both flat panel and external CRT "
-- "for display\n");
-- break;
-- }
--
-- if (info->HasPanelRegs) {
-- /* Panel width/height overrides */
-- info->PanelXRes = 0;
-- info->PanelYRes = 0;
-- if (xf86GetOptValInteger(info->Options,
-- OPTION_PANEL_WIDTH, &(info->PanelXRes))) {
-- xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-- "Flat panel width: %d\n", info->PanelXRes);
-- }
-- if (xf86GetOptValInteger(info->Options,
-- OPTION_PANEL_HEIGHT, &(info->PanelYRes))) {
-- xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-- "Flat panel height: %d\n", info->PanelYRes);
-- }
-- }
--
- #ifdef R128DRI
- /* DMA for Xv */
- info->DMAForXv = xf86ReturnOptValBool(info->Options, OPTION_XV_DMA, FALSE);
-@@ -1333,18 +1204,9 @@ static Bool R128PreInitDRI(ScrnInfoPtr pScrn)
-
- static Bool R128PreInitControllers(ScrnInfoPtr pScrn, xf86Int10InfoPtr pInt10)
- {
-- R128InfoPtr info = R128PTR(pScrn);
- xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
-- int i;
-- int mask;
- int found = 0;
--
-- if (info->IsPrimary)
-- mask = 1;
-- else if (info->IsSecondary)
-- mask = 2;
-- else
-- mask = 3;
-+ int i;
-
- if (!R128GetBIOSParameters(pScrn, pInt10))
- return FALSE;
-@@ -1352,7 +1214,7 @@ static Bool R128PreInitControllers(ScrnInfoPtr pScrn, xf86Int10InfoPtr pInt10)
- if (!R128GetPLLParameters(pScrn))
- return FALSE;
-
-- if (!R128AllocateControllers(pScrn, mask))
-+ if (!R128AllocateControllers(pScrn))
- return FALSE;
-
- if (!R128SetupConnectors(pScrn))
-@@ -1405,43 +1267,19 @@ Bool R128PreInit(ScrnInfoPtr pScrn, int flags)
-
- if (!R128GetRec(pScrn)) return FALSE;
-
-- info = R128PTR(pScrn);
--
-- info->IsSecondary = FALSE;
-- info->IsPrimary = FALSE;
-+ info = R128PTR(pScrn);
- info->SwitchingMode = FALSE;
-+ info->MMIO = NULL;
-
-- info->pEnt = xf86GetEntityInfo(pScrn->entityList[0]);
-+ info->pEnt = xf86GetEntityInfo(pScrn->entityList[0]);
- if (info->pEnt->location.type != BUS_PCI) goto fail;
-
-- if(xf86IsEntityShared(pScrn->entityList[0]))
-- {
-- if(xf86IsPrimInitDone(pScrn->entityList[0]))
-- {
-- R128EntPtr pR128Ent = R128EntPriv(pScrn);
-- info->IsSecondary = TRUE;
-- if(pR128Ent->BypassSecondary) return FALSE;
-- pR128Ent->pSecondaryScrn = pScrn;
-- }
-- else
-- {
-- R128EntPtr pR128Ent = R128EntPriv(pScrn);
-- info->IsPrimary = TRUE;
-- xf86SetPrimInitDone(pScrn->entityList[0]);
-- pR128Ent->pPrimaryScrn = pScrn;
-- pR128Ent->BypassSecondary = FALSE;
-- pR128Ent->HasSecondary = FALSE;
-- pR128Ent->RestorePrimary = FALSE;
-- pR128Ent->IsSecondaryRestored = FALSE;
-- }
-- }
--
- if (flags & PROBE_DETECT) {
- R128ProbeDDC(pScrn, info->pEnt->index);
- return TRUE;
- }
-
-- info->PciInfo = xf86GetPciInfoForEntity(info->pEnt->index);
-+ info->PciInfo = xf86GetPciInfoForEntity(info->pEnt->index);
-
- xf86DrvMsg(pScrn->scrnIndex, X_INFO,
- "PCI bus %d card %d func %d\n",
-@@ -1450,16 +1288,16 @@ Bool R128PreInit(ScrnInfoPtr pScrn, int flags)
- PCI_DEV_FUNC(info->PciInfo));
-
- #ifndef XSERVER_LIBPCIACCESS
-- info->PciTag = pciTag(PCI_DEV_BUS(info->PciInfo),
-+ info->PciTag = pciTag(PCI_DEV_BUS(info->PciInfo),
- PCI_DEV_DEV(info->PciInfo),
- PCI_DEV_FUNC(info->PciInfo));
-
- if (xf86RegisterResources(info->pEnt->index, 0, ResNone)) goto fail;
- if (xf86SetOperatingState(resVga, info->pEnt->index, ResUnusedOpr)) goto fail;
-
-- pScrn->racMemFlags = RAC_FB | RAC_COLORMAP | RAC_VIEWPORT | RAC_CURSOR;
-+ pScrn->racMemFlags = RAC_FB | RAC_COLORMAP | RAC_VIEWPORT | RAC_CURSOR;
- #endif
-- pScrn->monitor = pScrn->confScreen->monitor;
-+ pScrn->monitor = pScrn->confScreen->monitor;
-
- /* Allocate an xf86CrtcConfig */
- xf86CrtcConfigInit(pScrn, &R128CRTCResizeFuncs);
-@@ -1810,7 +1648,7 @@ Bool R128ScreenInit(SCREEN_INIT_ARGS_DECL)
-
- if (!R128MapMem(pScrn)) return FALSE;
- pScrn->fbOffset = 0;
-- if(info->IsSecondary) pScrn->fbOffset = pScrn->videoRam * 1024;
-+ //if(info->IsSecondary) pScrn->fbOffset = pScrn->videoRam * 1024;
- #ifdef R128DRI
- info->fbX = 0;
- info->fbY = 0;
-@@ -1857,23 +1695,7 @@ Bool R128ScreenInit(SCREEN_INIT_ARGS_DECL)
- info->CurrentLayout.pixel_bytes * 3 + 1023) / 1024);
- info->directRenderingEnabled = FALSE;
- } else {
-- if(info->IsSecondary)
-- info->directRenderingEnabled = FALSE;
-- else
-- {
-- /* Xinerama has sync problem with DRI, disable it for now */
-- if(xf86IsEntityShared(pScrn->entityList[0]))
-- {
-- info->directRenderingEnabled = FALSE;
-- xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
-- "Direct Rendering Disabled -- "
-- "Dual-head configuration is not working with DRI "
-- "at present.\nPlease use only one Device/Screen "
-- "section in your XFConfig file.\n");
-- }
-- else
-- info->directRenderingEnabled = R128DRIScreenInit(pScreen);
-- }
-+ info->directRenderingEnabled = R128DRIScreenInit(pScreen);
- }
- }
- #endif
-@@ -2259,8 +2081,7 @@ Bool R128ScreenInit(SCREEN_INIT_ARGS_DECL)
- else
- xf86DPMSInit(pScreen, xf86DPMSSet, 0);
-
-- if (!info->IsSecondary)
-- R128InitVideo(pScreen);
-+ R128InitVideo(pScreen);
-
- /* Provide SaveScreen */
- pScreen->SaveScreen = R128SaveScreen;
-@@ -2411,9 +2232,13 @@ void R128RestoreFPRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
- void R128RestoreLVDSRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
- {
- R128InfoPtr info = R128PTR(pScrn);
-+ R128EntPtr pR128Ent = R128EntPriv(pScrn);
- unsigned char *R128MMIO = info->MMIO;
- uint32_t tmp;
-
-+ xf86OutputPtr output = R128FirstOutput(pR128Ent->pCrtc[0]);
-+ R128OutputPrivatePtr r128_output = output->driver_private;
-+
- tmp = INREG(R128_LVDS_GEN_CNTL);
- if ((tmp & (R128_LVDS_ON | R128_LVDS_BLON)) ==
- (restore->lvds_gen_cntl & (R128_LVDS_ON | R128_LVDS_BLON))) {
-@@ -2422,11 +2247,11 @@ void R128RestoreLVDSRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
- if (restore->lvds_gen_cntl & (R128_LVDS_ON | R128_LVDS_BLON)) {
- OUTREG(R128_LVDS_GEN_CNTL,
- restore->lvds_gen_cntl & (uint32_t)~R128_LVDS_BLON);
-- usleep(R128PTR(pScrn)->PanelPwrDly * 1000);
-+ usleep(r128_output->PanelPwrDly * 1000);
- OUTREG(R128_LVDS_GEN_CNTL, restore->lvds_gen_cntl);
- } else {
- OUTREG(R128_LVDS_GEN_CNTL, restore->lvds_gen_cntl | R128_LVDS_BLON);
-- usleep(R128PTR(pScrn)->PanelPwrDly * 1000);
-+ usleep(r128_output->PanelPwrDly * 1000);
- OUTREG(R128_LVDS_GEN_CNTL, restore->lvds_gen_cntl);
- }
- }
-@@ -2664,8 +2489,6 @@ static void R128SaveFPRegisters(ScrnInfoPtr pScrn, R128SavePtr save)
- R128InfoPtr info = R128PTR(pScrn);
- unsigned char *R128MMIO = info->MMIO;
-
-- if (info->BIOSDisplay != R128_DUALHEAD)
-- save->crtc2_gen_cntl = INREG(R128_CRTC2_GEN_CNTL);
- save->fp_crtc_h_total_disp = INREG(R128_FP_CRTC_H_TOTAL_DISP);
- save->fp_crtc_v_total_disp = INREG(R128_FP_CRTC_V_TOTAL_DISP);
- save->fp_gen_cntl = INREG(R128_FP_GEN_CNTL);
-@@ -2769,28 +2592,23 @@ static void R128SavePalette(ScrnInfoPtr pScrn, R128SavePtr save)
- static void R128SaveMode(ScrnInfoPtr pScrn, R128SavePtr save)
- {
- R128InfoPtr info = R128PTR(pScrn);
-+ R128EntPtr pR128Ent = R128EntPriv(pScrn);
-
- R128TRACE(("R128SaveMode(%p)\n", save));
-
-- if(info->IsSecondary)
-- {
-+ R128SaveCommonRegisters(pScrn, save);
-+ R128SaveCrtcRegisters(pScrn, save);
-+ R128SavePLLRegisters(pScrn, save);
-+ R128SaveDDARegisters(pScrn, save);
-+ if (pR128Ent->HasCRTC2) {
- R128SaveCrtc2Registers(pScrn, save);
- R128SavePLL2Registers(pScrn, save);
- R128SaveDDA2Registers(pScrn, save);
- }
-- else
-- {
-- R128SaveCommonRegisters(pScrn, save);
-- R128SaveCrtcRegisters(pScrn, save);
-- if((info->DisplayType == MT_DFP) ||
-- (info->DisplayType == MT_LCD))
-- {
-- R128SaveFPRegisters(pScrn, save);
-- }
-- R128SavePLLRegisters(pScrn, save);
-- R128SaveDDARegisters(pScrn, save);
-- R128SavePalette(pScrn, save);
-+ if (info->HasPanelRegs) {
-+ R128SaveFPRegisters(pScrn, save);
- }
-+ R128SavePalette(pScrn, save);
-
- R128TRACE(("R128SaveMode returns %p\n", save));
- }
-@@ -2808,36 +2626,33 @@ static void R128Save(ScrnInfoPtr pScrn)
- return;
- }
-
-- if (!info->IsSecondary) {
- #ifdef WITH_VGAHW
-- if (info->VGAAccess) {
-- vgaHWPtr hwp = VGAHWPTR(pScrn);
-+ if (info->VGAAccess) {
-+ vgaHWPtr hwp = VGAHWPTR(pScrn);
-
-- vgaHWUnlock(hwp);
-+ vgaHWUnlock(hwp);
- # if defined(__powerpc__)
-- /* temporary hack to prevent crashing on PowerMacs when trying to
-- * read VGA fonts and colormap, will find a better solution
-- * in the future. TODO: Check if there's actually some VGA stuff
-- * setup in the card at all !!
-- */
-- vgaHWSave(pScrn, &hwp->SavedReg, VGA_SR_MODE); /* Save mode only */
-+ /* temporary hack to prevent crashing on PowerMacs when trying to
-+ * read VGA fonts and colormap, will find a better solution
-+ * in the future. TODO: Check if there's actually some VGA stuff
-+ * setup in the card at all !!
-+ */
-+ vgaHWSave(pScrn, &hwp->SavedReg, VGA_SR_MODE); /* Save mode only */
- # else
-- /* Save mode * & fonts & cmap */
-- vgaHWSave(pScrn, &hwp->SavedReg, VGA_SR_MODE | VGA_SR_FONTS);
-+ /* Save mode * & fonts & cmap */
-+ vgaHWSave(pScrn, &hwp->SavedReg, VGA_SR_MODE | VGA_SR_FONTS);
- # endif
-- vgaHWLock(hwp);
-- }
-+ vgaHWLock(hwp);
-+ }
- #endif
-
-- save->dp_datatype = INREG(R128_DP_DATATYPE);
-- save->gen_reset_cntl = INREG(R128_GEN_RESET_CNTL);
-- save->clock_cntl_index = INREG(R128_CLOCK_CNTL_INDEX);
-- save->amcgpio_en_reg = INREG(R128_AMCGPIO_EN_REG);
-- save->amcgpio_mask = INREG(R128_AMCGPIO_MASK);
-- }
-+ save->dp_datatype = INREG(R128_DP_DATATYPE);
-+ save->gen_reset_cntl = INREG(R128_GEN_RESET_CNTL);
-+ save->clock_cntl_index = INREG(R128_CLOCK_CNTL_INDEX);
-+ save->amcgpio_en_reg = INREG(R128_AMCGPIO_EN_REG);
-+ save->amcgpio_mask = INREG(R128_AMCGPIO_MASK);
-
- R128SaveMode(pScrn, save);
--
- }
-
- /* Restore the original (text) mode. */
-@@ -2856,59 +2671,39 @@ static void R128Restore(ScrnInfoPtr pScrn)
-
- R128Blank(pScrn);
-
-- if (!info->IsSecondary) {
-- OUTREG(R128_AMCGPIO_MASK, restore->amcgpio_mask);
-- OUTREG(R128_AMCGPIO_EN_REG, restore->amcgpio_en_reg);
-- OUTREG(R128_CLOCK_CNTL_INDEX, restore->clock_cntl_index);
-- OUTREG(R128_GEN_RESET_CNTL, restore->gen_reset_cntl);
-- OUTREG(R128_DP_DATATYPE, restore->dp_datatype);
--
-- R128RestoreCommonRegisters(pScrn, restore);
-- if (pR128Ent->HasCRTC2) {
-- R128RestoreDDA2Registers(pScrn, restore);
-- R128RestoreCrtc2Registers(pScrn, restore);
-- R128RestorePLL2Registers(pScrn, restore);
-- }
-- R128RestoreDDARegisters(pScrn, restore);
-- R128RestoreCrtcRegisters(pScrn, restore);
-- R128RestorePLLRegisters(pScrn, restore);
-- R128RestoreDACRegisters(pScrn, restore);
-- R128RestoreRMXRegisters(pScrn, restore);
-- R128RestoreFPRegisters(pScrn, restore);
-- R128RestoreLVDSRegisters(pScrn, restore);
-- }
-+ OUTREG(R128_AMCGPIO_MASK, restore->amcgpio_mask);
-+ OUTREG(R128_AMCGPIO_EN_REG, restore->amcgpio_en_reg);
-+ OUTREG(R128_CLOCK_CNTL_INDEX, restore->clock_cntl_index);
-+ OUTREG(R128_GEN_RESET_CNTL, restore->gen_reset_cntl);
-+ OUTREG(R128_DP_DATATYPE, restore->dp_datatype);
-+
-+ R128RestoreCommonRegisters(pScrn, restore);
-+ if (pR128Ent->HasCRTC2) {
-+ R128RestoreDDA2Registers(pScrn, restore);
-+ R128RestoreCrtc2Registers(pScrn, restore);
-+ R128RestorePLL2Registers(pScrn, restore);
-+ }
-+ R128RestoreDDARegisters(pScrn, restore);
-+ R128RestoreCrtcRegisters(pScrn, restore);
-+ R128RestorePLLRegisters(pScrn, restore);
-+ R128RestoreDACRegisters(pScrn, restore);
-+ R128RestoreRMXRegisters(pScrn, restore);
-+ R128RestoreFPRegisters(pScrn, restore);
-+ R128RestoreLVDSRegisters(pScrn, restore);
-
- #ifdef WITH_VGAHW
- if (info->VGAAccess) {
- vgaHWPtr hwp = VGAHWPTR(pScrn);
-- if (!info->IsSecondary) {
-- vgaHWUnlock(hwp);
-+ vgaHWUnlock(hwp);
- # if defined(__powerpc__)
-- /* Temporary hack to prevent crashing on PowerMacs when trying to
-- * write VGA fonts, will find a better solution in the future
-- */
-- vgaHWRestore(pScrn, &hwp->SavedReg, VGA_SR_MODE );
-+ /* Temporary hack to prevent crashing on PowerMacs when trying to
-+ * write VGA fonts, will find a better solution in the future
-+ */
-+ vgaHWRestore(pScrn, &hwp->SavedReg, VGA_SR_MODE );
- # else
-- vgaHWRestore(pScrn, &hwp->SavedReg, VGA_SR_MODE | VGA_SR_FONTS );
-+ vgaHWRestore(pScrn, &hwp->SavedReg, VGA_SR_MODE | VGA_SR_FONTS );
- # endif
-- vgaHWLock(hwp);
-- } else {
-- R128EntPtr pR128Ent = R128EntPriv(pScrn);
-- ScrnInfoPtr pScrn0 = pR128Ent->pPrimaryScrn;
-- R128InfoPtr info0 = R128PTR(pScrn0);
-- vgaHWPtr hwp0;
--
-- if (info0->VGAAccess) {
-- hwp0 = VGAHWPTR(pScrn0);
-- vgaHWUnlock(hwp0);
--#if defined(__powerpc__)
-- vgaHWRestore(pScrn0, &hwp0->SavedReg, VGA_SR_MODE);
--#else
-- vgaHWRestore(pScrn0, &hwp0->SavedReg, VGA_SR_MODE | VGA_SR_FONTS );
--#endif
-- vgaHWLock(hwp0);
-- }
-- }
-+ vgaHWLock(hwp);
- }
- #endif
-
-@@ -3000,9 +2795,13 @@ Bool R128InitCrtc2Base(xf86CrtcPtr crtc, R128SavePtr save, int x, int y)
- }
-
- /* Define CRTC registers for requested video mode. */
--Bool R128InitCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr save,
-- DisplayModePtr mode, R128InfoPtr info)
-+Bool R128InitCrtcRegisters(xf86CrtcPtr crtc, R128SavePtr save, DisplayModePtr mode)
- {
-+ ScrnInfoPtr pScrn = crtc->scrn;
-+ R128InfoPtr info = R128PTR(pScrn);
-+ xf86OutputPtr output = R128FirstOutput(crtc);
-+ R128OutputPrivatePtr r128_output = output->driver_private;
-+
- int format;
- int hsync_start;
- int hsync_wid;
-@@ -3026,8 +2825,7 @@ Bool R128InitCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr save,
- return FALSE;
- }
-
-- if ((info->DisplayType == MT_DFP) ||
-- (info->DisplayType == MT_LCD))
-+ if (r128_output->MonType == MT_LCD || r128_output->MonType == MT_DFP)
- hsync_fudge = hsync_fudge_fp[format-1];
- else
- hsync_fudge = hsync_fudge_default[format-1];
-@@ -3045,21 +2843,16 @@ Bool R128InitCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr save,
- ? R128_CRTC_CSYNC_EN
- : 0));
-
-- if((info->DisplayType == MT_DFP) ||
-- (info->DisplayType == MT_LCD))
-- {
-- save->crtc_gen_cntl &= ~(R128_CRTC_DBL_SCAN_EN |
-- R128_CRTC_INTERLACE_EN);
-- }
-+ if (r128_output->MonType == MT_LCD || r128_output->MonType == MT_DFP)
-+ save->crtc_gen_cntl &= ~(R128_CRTC_DBL_SCAN_EN | R128_CRTC_INTERLACE_EN);
-
- save->crtc_ext_cntl |= R128_VGA_ATI_LINEAR | R128_XCRT_CNT_EN;
-
-- if(info->isDFP && !info->isPro2)
-- {
-- if(info->PanelXRes < mode->CrtcHDisplay)
-- mode->HDisplay = mode->CrtcHDisplay = info->PanelXRes;
-- if(info->PanelYRes < mode->CrtcVDisplay)
-- mode->VDisplay = mode->CrtcVDisplay = info->PanelYRes;
-+ if (info->isDFP && !info->isPro2) {
-+ if (r128_output->PanelXRes < mode->CrtcHDisplay)
-+ mode->HDisplay = mode->CrtcHDisplay = r128_output->PanelXRes;
-+ if (r128_output->PanelYRes < mode->CrtcVDisplay)
-+ mode->VDisplay = mode->CrtcVDisplay = r128_output->PanelYRes;
- }
-
- save->crtc_h_total_disp = ((((mode->CrtcHTotal / 8) - 1) & 0xffff)
-@@ -3118,9 +2911,11 @@ Bool R128InitCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr save,
- }
-
- /* Define CRTC2 registers for requested video mode. */
--Bool R128InitCrtc2Registers(ScrnInfoPtr pScrn, R128SavePtr save,
-- DisplayModePtr mode, R128InfoPtr info)
-+Bool R128InitCrtc2Registers(xf86CrtcPtr crtc, R128SavePtr save, DisplayModePtr mode)
- {
-+ ScrnInfoPtr pScrn = crtc->scrn;
-+ R128InfoPtr info = R128PTR(pScrn);
-+
- int format;
- int hsync_start;
- int hsync_wid;
-@@ -3314,9 +3109,10 @@ void R128InitLVDSRegisters(R128SavePtr orig, R128SavePtr save, xf86OutputPtr out
- }
-
- /* Define PLL registers for requested video mode. */
--void R128InitPLLRegisters(ScrnInfoPtr pScrn, R128SavePtr save,
-+void R128InitPLLRegisters(xf86CrtcPtr crtc, R128SavePtr save,
- R128PLLPtr pll, double dot_clock)
- {
-+ ScrnInfoPtr pScrn = crtc->scrn;
- unsigned long freq = dot_clock * 100;
- struct {
- int divider;
-@@ -3366,9 +3162,10 @@ void R128InitPLLRegisters(ScrnInfoPtr pScrn, R128SavePtr save,
- }
-
- /* Define PLL2 registers for requested video mode. */
--void R128InitPLL2Registers(ScrnInfoPtr pScrn, R128SavePtr save,
-+void R128InitPLL2Registers(xf86CrtcPtr crtc, R128SavePtr save,
- R128PLLPtr pll, double dot_clock)
- {
-+ ScrnInfoPtr pScrn = crtc->scrn;
- unsigned long freq = dot_clock * 100;
- struct {
- int divider;
-@@ -3418,10 +3215,14 @@ void R128InitPLL2Registers(ScrnInfoPtr pScrn, R128SavePtr save,
- }
-
- /* Define DDA registers for requested video mode. */
--Bool R128InitDDARegisters(ScrnInfoPtr pScrn, R128SavePtr save,
-- R128PLLPtr pll, R128InfoPtr info,
-- DisplayModePtr mode)
-+Bool R128InitDDARegisters(xf86CrtcPtr crtc, R128SavePtr save,
-+ R128PLLPtr pll, DisplayModePtr mode)
- {
-+ ScrnInfoPtr pScrn = crtc->scrn;
-+ R128InfoPtr info = R128PTR(pScrn);
-+ xf86OutputPtr output = R128FirstOutput(crtc);
-+ R128OutputPrivatePtr r128_output = output->driver_private;
-+
- int DisplayFifoWidth = 128;
- int DisplayFifoDepth = 32;
- int XclkFreq;
-@@ -3437,10 +3238,10 @@ Bool R128InitDDARegisters(ScrnInfoPtr pScrn, R128SavePtr save,
- VclkFreq = R128Div(pll->reference_freq * save->feedback_div,
- pll->reference_div * save->post_div);
-
-- if(info->isDFP && !info->isPro2){
-- if(info->PanelXRes != mode->CrtcHDisplay)
-- VclkFreq = (VclkFreq * mode->CrtcHDisplay)/info->PanelXRes;
-- }
-+ if (info->isDFP && !info->isPro2) {
-+ if (r128_output->PanelXRes != mode->CrtcHDisplay)
-+ VclkFreq = (VclkFreq * mode->CrtcHDisplay) / r128_output->PanelXRes;
-+ }
-
- XclksPerTransfer = R128Div(XclkFreq * DisplayFifoWidth,
- VclkFreq * (info->CurrentLayout.pixel_bytes * 8));
-@@ -3487,10 +3288,14 @@ Bool R128InitDDARegisters(ScrnInfoPtr pScrn, R128SavePtr save,
- }
-
- /* Define DDA2 registers for requested video mode. */
--Bool R128InitDDA2Registers(ScrnInfoPtr pScrn, R128SavePtr save,
-- R128PLLPtr pll, R128InfoPtr info,
-- DisplayModePtr mode)
-+Bool R128InitDDA2Registers(xf86CrtcPtr crtc, R128SavePtr save,
-+ R128PLLPtr pll, DisplayModePtr mode)
- {
-+ ScrnInfoPtr pScrn = crtc->scrn;
-+ R128InfoPtr info = R128PTR(pScrn);
-+ xf86OutputPtr output = R128FirstOutput(crtc);
-+ R128OutputPrivatePtr r128_output = output->driver_private;
-+
- int DisplayFifoWidth = 128;
- int DisplayFifoDepth = 32;
- int XclkFreq;
-@@ -3506,10 +3311,10 @@ Bool R128InitDDA2Registers(ScrnInfoPtr pScrn, R128SavePtr save,
- VclkFreq = R128Div(pll->reference_freq * save->feedback_div_2,
- pll->reference_div * save->post_div_2);
-
-- if(info->isDFP && !info->isPro2){
-- if(info->PanelXRes != mode->CrtcHDisplay)
-- VclkFreq = (VclkFreq * mode->CrtcHDisplay)/info->PanelXRes;
-- }
-+ if (info->isDFP && !info->isPro2) {
-+ if (r128_output->PanelXRes != mode->CrtcHDisplay)
-+ VclkFreq = (VclkFreq * mode->CrtcHDisplay) / r128_output->PanelXRes;
-+ }
-
- XclksPerTransfer = R128Div(XclkFreq * DisplayFifoWidth,
- VclkFreq * (info->CurrentLayout.pixel_bytes * 8));
-@@ -3602,42 +3407,40 @@ Bool R128SwitchMode(SWITCH_MODE_ARGS_DECL)
- return ret;
- }
-
--/* Used to disallow modes that are not supported by the hardware. */
--ModeStatus R128ValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode,
-- Bool verbose, int flags)
-+ModeStatus R128DoValidMode(xf86OutputPtr output, DisplayModePtr mode, int flags)
- {
-- SCRN_INFO_PTR(arg);
-- R128InfoPtr info = R128PTR(pScrn);
-+ ScrnInfoPtr pScrn = output->scrn;
-+ R128InfoPtr info = R128PTR(pScrn);
-+ R128OutputPrivatePtr r128_output = output->driver_private;
-
-- if (info->BIOSDisplay == R128_BIOS_DISPLAY_CRT)
-- return MODE_OK;
-+ if (r128_output->MonType == MT_CRT)
-+ return MODE_OK;
-
-- if(info->isDFP) {
-- if(info->PanelXRes < mode->CrtcHDisplay ||
-- info->PanelYRes < mode->CrtcVDisplay)
-+ if (info->isDFP) {
-+ if (r128_output->PanelXRes < mode->CrtcHDisplay ||
-+ r128_output->PanelYRes < mode->CrtcVDisplay)
- return MODE_NOMODE;
- else
- return MODE_OK;
- }
-
-- if (info->DisplayType == MT_LCD) {
-+ if (r128_output->MonType == MT_LCD) {
- if (mode->Flags & V_INTERLACE) return MODE_NO_INTERLACE;
- if (mode->Flags & V_DBLSCAN) return MODE_NO_DBLESCAN;
- }
-
-- if (info->DisplayType == MT_LCD &&
-- info->VBIOS) {
-+ if (r128_output->MonType == MT_LCD && info->VBIOS) {
- int i;
-- for (i = info->FPBIOSstart+64; R128_BIOS16(i) != 0; i += 2) {
-+ for (i = info->FPBIOSstart + 64; R128_BIOS16(i) != 0; i += 2) {
- int j = R128_BIOS16(i);
-
- if (mode->CrtcHDisplay == R128_BIOS16(j) &&
-- mode->CrtcVDisplay == R128_BIOS16(j+2)) {
-+ mode->CrtcVDisplay == R128_BIOS16(j + 2)) {
- if ((flags & MODECHECK_FINAL) == MODECHECK_FINAL) {
- xf86DrvMsg(pScrn->scrnIndex, X_INFO,
- "Modifying mode according to VBIOS: %ix%i [pclk %.1f MHz] for FP to: ",
-- mode->CrtcHDisplay,mode->CrtcVDisplay,
-- (float)mode->Clock/1000);
-+ mode->CrtcHDisplay, mode->CrtcVDisplay,
-+ (float)mode->Clock / 1000);
-
- /* Assume we are using expanded mode */
- if (R128_BIOS16(j+5)) j = R128_BIOS16(j+5);
-@@ -3646,25 +3449,25 @@ ModeStatus R128ValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode,
- mode->Clock = (uint32_t)R128_BIOS16(j) * 10;
-
- mode->HDisplay = mode->CrtcHDisplay =
-- ((R128_BIOS16(j+10) & 0x01ff)+1)*8;
-+ ((R128_BIOS16(j + 10) & 0x01ff) + 1) * 8;
- mode->HSyncStart = mode->CrtcHSyncStart =
-- ((R128_BIOS16(j+12) & 0x01ff)+1)*8;
-+ ((R128_BIOS16(j + 12) & 0x01ff) + 1) * 8;
- mode->HSyncEnd = mode->CrtcHSyncEnd =
-- mode->CrtcHSyncStart + (R128_BIOS8(j+14) & 0x1f);
-+ mode->CrtcHSyncStart + (R128_BIOS8(j + 14) & 0x1f);
- mode->HTotal = mode->CrtcHTotal =
-- ((R128_BIOS16(j+8) & 0x01ff)+1)*8;
-+ ((R128_BIOS16(j + 8) & 0x01ff) + 1) * 8;
-
- mode->VDisplay = mode->CrtcVDisplay =
-- (R128_BIOS16(j+17) & 0x07ff)+1;
-+ (R128_BIOS16(j + 17) & 0x07ff) + 1;
- mode->VSyncStart = mode->CrtcVSyncStart =
-- (R128_BIOS16(j+19) & 0x07ff)+1;
-+ (R128_BIOS16(j + 19) & 0x07ff) + 1;
- mode->VSyncEnd = mode->CrtcVSyncEnd =
-- mode->CrtcVSyncStart + ((R128_BIOS16(j+19) >> 11) & 0x1f);
-+ mode->CrtcVSyncStart + ((R128_BIOS16(j + 19) >> 11) & 0x1f);
- mode->VTotal = mode->CrtcVTotal =
-- (R128_BIOS16(j+15) & 0x07ff)+1;
-+ (R128_BIOS16(j + 15) & 0x07ff) + 1;
- xf86ErrorF("%ix%i [pclk %.1f MHz]\n",
- mode->CrtcHDisplay,mode->CrtcVDisplay,
-- (float)mode->Clock/1000);
-+ (float)mode->Clock/ 1000);
- }
- return MODE_OK;
- }
-@@ -3680,6 +3483,17 @@ ModeStatus R128ValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode,
- return MODE_OK;
- }
-
-+/* Used to disallow modes that are not supported by the hardware. */
-+ModeStatus R128ValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode,
-+ Bool verbose, int flags)
-+{
-+ SCRN_INFO_PTR(arg);
-+ R128EntPtr pR128Ent = R128EntPriv(pScrn);
-+ xf86OutputPtr output = R128FirstOutput(pR128Ent->pCrtc[0]);
-+
-+ return R128DoValidMode(output, mode, flags);
-+}
-+
- /* Adjust viewport into virtual desktop such that (0,0) in viewport space
- is (x,y) in virtual space. */
- void R128AdjustFrame(ADJUST_FRAME_ARGS_DECL)
-@@ -3706,14 +3520,7 @@ void R128AdjustFrame(ADJUST_FRAME_ARGS_DECL)
- if (info->CurrentLayout.pixel_code == 24)
- Base += 8 * (Base % 3); /* Must be multiple of 8 and 3 */
-
-- if(info->IsSecondary)
-- {
-- Base += pScrn->fbOffset;
-- OUTREG(R128_CRTC2_OFFSET, Base);
-- }
-- else
- OUTREG(R128_CRTC_OFFSET, Base);
--
- }
-
- /* Called when VT switching back to the X server. Reinitialize the video
-diff --git a/src/r128_output.c b/src/r128_output.c
-index 757ef9b..8ef6d45 100644
---- a/src/r128_output.c
-+++ b/src/r128_output.c
-@@ -181,7 +181,7 @@ void R128DPMSSetOn(xf86OutputPtr output)
- switch(MonType) {
- case MT_LCD:
- OUTREGP(R128_LVDS_GEN_CNTL, R128_LVDS_BLON, ~R128_LVDS_BLON);
-- usleep(info->PanelPwrDly * 1000);
-+ usleep(r128_output->PanelPwrDly * 1000);
- OUTREGP(R128_LVDS_GEN_CNTL, R128_LVDS_ON, ~R128_LVDS_ON);
- save->lvds_gen_cntl |= (R128_LVDS_ON | R128_LVDS_BLON);
- break;
-@@ -307,7 +307,7 @@ DisplayModePtr R128ProbeOutputModes(xf86OutputPtr output)
- for (mode = modes; mode != NULL; mode = mode->next) {
- xf86SetModeCrtc(mode, INTERLACE_HALVE_V);
- if (mode->status == MODE_OK)
-- mode->status = R128ValidMode(XF86_SCRN_ARG(pScrn), mode, TRUE, MODECHECK_FINAL);
-+ mode->status = R128DoValidMode(output, mode, MODECHECK_FINAL);
- }
-
- xf86ValidateModesUserConfig(pScrn, modes);
-@@ -457,10 +457,10 @@ Bool R128SetupConnectors(ScrnInfoPtr pScrn)
- }
- r128_output->ddc_i2c = i2c;
- R128I2CInit(output, &r128_output->pI2CBus, output->name);
-- } else if (otypes[i] == OUTPUT_LVDS) {
-- r128_output->PanelXRes = info->PanelXRes;
-- r128_output->PanelYRes = info->PanelYRes;
- }
-+
-+ if (otypes[i] != OUTPUT_VGA)
-+ R128GetPanelInfoFromBIOS(output);
- }
-
- return TRUE;
-diff --git a/src/r128_probe.c b/src/r128_probe.c
-index 348d15b..9771d52 100644
---- a/src/r128_probe.c
-+++ b/src/r128_probe.c
-@@ -288,7 +288,6 @@ r128_get_scrninfo(int entity_num)
- R128EntPtr pR128Ent;
- pPriv->ptr = xnfcalloc(sizeof(R128EntRec), 1);
- pR128Ent = pPriv->ptr;
-- pR128Ent->BypassSecondary = FALSE;
- pR128Ent->HasSecondary = FALSE;
- pR128Ent->IsSecondaryRestored = FALSE;
- }
-diff --git a/src/r128_probe.h b/src/r128_probe.h
-index fef210d..0b54d21 100644
---- a/src/r128_probe.h
-+++ b/src/r128_probe.h
-@@ -142,6 +142,7 @@ typedef struct _R128OutputPrivateRec {
- R128I2CBusRec ddc_i2c;
- int PanelXRes;
- int PanelYRes;
-+ int PanelPwrDly;
- } R128OutputPrivateRec, *R128OutputPrivatePtr;
-
- #define R128_MAX_CRTC 2
-@@ -151,7 +152,6 @@ typedef struct
- {
- Bool HasSecondary;
- Bool HasCRTC2;
-- Bool BypassSecondary;
- /*These two registers are used to make sure the CRTC2 is
- retored before CRTC_EXT, otherwise it could lead to blank screen.*/
- Bool IsSecondaryRestored;
-@@ -160,7 +160,7 @@ typedef struct
- xf86CrtcPtr pCrtc[R128_MAX_CRTC];
- R128CrtcPrivatePtr Controller[R128_MAX_CRTC];
-
-- ScrnInfoPtr pSecondaryScrn;
-+ ScrnInfoPtr pSecondaryScrn;
- ScrnInfoPtr pPrimaryScrn;
- } R128EntRec, *R128EntPtr;
-
-diff --git a/src/r128_video.c b/src/r128_video.c
-index b0059b5..dc1f25b 100644
---- a/src/r128_video.c
-+++ b/src/r128_video.c
-@@ -661,8 +661,12 @@ R128DisplayVideo422(
- short drw_w, short drw_h
- ){
- R128InfoPtr info = R128PTR(pScrn);
-+ R128EntPtr pR128Ent = R128EntPriv(pScrn);
-+ xf86OutputPtr output = R128FirstOutput(pR128Ent->pCrtc[0]);
-+ R128OutputPrivatePtr r128_output = output->driver_private;
- unsigned char *R128MMIO = info->MMIO;
- R128PortPrivPtr pPriv = info->adaptor->pPortPrivates[0].ptr;
-+
- int v_inc, h_inc, step_by, tmp, v_inc_shift;
- int p1_h_accum_init, p23_h_accum_init;
- int p1_v_accum_init;
-@@ -678,7 +682,7 @@ R128DisplayVideo422(
-
- rmx_active = INREG(R128_FP_VERT_STRETCH) & R128_VERT_STRETCH_ENABLE;
- if (rmx_active) {
-- v_inc = ((src_h * pScrn->currentMode->CrtcVDisplay / info->PanelYRes) << v_inc_shift) / drw_h;
-+ v_inc = ((src_h * pScrn->currentMode->CrtcVDisplay / r128_output->PanelYRes) << v_inc_shift) / drw_h;
- } else {
- v_inc = (src_h << v_inc_shift) / drw_h;
- }
-@@ -747,6 +751,9 @@ R128DisplayVideo420(
- short drw_w, short drw_h
- ){
- R128InfoPtr info = R128PTR(pScrn);
-+ R128EntPtr pR128Ent = R128EntPriv(pScrn);
-+ xf86OutputPtr output = R128FirstOutput(pR128Ent->pCrtc[0]);
-+ R128OutputPrivatePtr r128_output = output->driver_private;
- unsigned char *R128MMIO = info->MMIO;
- R128PortPrivPtr pPriv = info->adaptor->pPortPrivates[0].ptr;
- int v_inc, h_inc, step_by, tmp, leftUV, v_inc_shift;
-@@ -762,7 +769,7 @@ R128DisplayVideo420(
-
- rmx_active = INREG(R128_FP_VERT_STRETCH) & R128_VERT_STRETCH_ENABLE;
- if (rmx_active) {
-- v_inc = ((src_h * pScrn->currentMode->CrtcVDisplay / info->PanelYRes) << v_inc_shift) / drw_h;
-+ v_inc = ((src_h * pScrn->currentMode->CrtcVDisplay / r128_output->PanelYRes) << v_inc_shift) / drw_h;
- } else {
- v_inc = (src_h << v_inc_shift) / drw_h;
- }
---
-2.2.2
-
-
-From d49c3431e92a6120b054959ce6910e8decf61c67 Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Fri, 25 Jul 2014 13:39:08 -0700
-Subject: Remove custom DGA code
-
-I have yet to see a use for the DGA code included in the driver.
-According to radeon commits, it should be safe to replace it with DiDGA.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
-Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
----
- src/Makefile.am | 2 +-
- src/r128.h | 13 --
- src/r128_accel.c | 4 +-
- src/r128_dga.c | 408 ------------------------------------------------------
- src/r128_driver.c | 7 +-
- 5 files changed, 6 insertions(+), 428 deletions(-)
- delete mode 100644 src/r128_dga.c
-
-diff --git a/src/Makefile.am b/src/Makefile.am
-index e4618ea..05fbe6c 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -40,7 +40,7 @@ r128_drv_la_LTLIBRARIES = r128_drv.la
- r128_drv_la_LDFLAGS = -module -avoid-version
- r128_drv_ladir = @moduledir@/drivers
- r128_drv_la_SOURCES = \
-- r128_accel.c r128_cursor.c r128_dga.c r128_driver.c \
-+ r128_accel.c r128_cursor.c r128_driver.c \
- r128_video.c r128_misc.c r128_crtc.c r128_output.c r128_probe.c \
- $(R128_EXA_SRCS) $(R128_DRI_SRCS)
-
-diff --git a/src/r128.h b/src/r128.h
-index 3b1e631..19124bf 100644
---- a/src/r128.h
-+++ b/src/r128.h
-@@ -343,12 +343,6 @@ typedef struct {
- struct r128_2d_state state_2d;
- #endif
-
-- /*
-- * XAAForceTransBlit is used to change the behavior of the XAA
-- * SetupForScreenToScreenCopy function, to make it DGA-friendly.
-- */
-- Bool XAAForceTransBlit;
--
- int fifo_slots; /* Free slots in the FIFO (64 max) */
- int pix24bpp; /* Depth of pixmap for 24bpp framebuffer */
- Bool dac6bits; /* Use 6 bit DAC? */
-@@ -381,12 +375,6 @@ typedef struct {
- int scanline_direct;
- int scanline_bpp; /* Only used for ImageWrite */
-
-- DGAModePtr DGAModes;
-- int numDGAModes;
-- Bool DGAactive;
-- int DGAViewportStatus;
-- DGAFunctionRec DGAFuncs;
--
- R128FBLayout CurrentLayout;
- #ifdef R128DRI
- Bool directRenderingEnabled;
-@@ -525,7 +513,6 @@ extern void R128WaitForVerticalSync(ScrnInfoPtr pScrn);
- extern Bool R128AccelInit(ScreenPtr pScreen);
- extern void R128EngineInit(ScrnInfoPtr pScrn);
- extern Bool R128CursorInit(ScreenPtr pScreen);
--extern Bool R128DGAInit(ScreenPtr pScreen);
-
- extern int R128MinBits(int val);
- extern xf86OutputPtr R128FirstOutput(xf86CrtcPtr crtc);
-diff --git a/src/r128_accel.c b/src/r128_accel.c
-index fa58327..c88e8f9 100644
---- a/src/r128_accel.c
-+++ b/src/r128_accel.c
-@@ -590,7 +590,7 @@ static void R128SetupForScreenToScreenCopy(ScrnInfoPtr pScrn,
- ? R128_DST_Y_TOP_TO_BOTTOM
- : 0)));
-
-- if ((trans_color != -1) || (info->XAAForceTransBlit == TRUE)) {
-+ if (trans_color != -1) {
- /* Set up for transparency */
- R128WaitForFifo(pScrn, 3);
- OUTREG(R128_CLR_CMP_CLR_SRC, trans_color);
-@@ -1182,7 +1182,7 @@ static void R128CCESetupForScreenToScreenCopy(ScrnInfoPtr pScrn,
-
- ADVANCE_RING();
-
-- if ((trans_color != -1) || (info->XAAForceTransBlit == TRUE)) {
-+ if (trans_color != -1) {
- BEGIN_RING( 6 );
-
- OUT_RING_REG( R128_CLR_CMP_CLR_SRC, trans_color );
-diff --git a/src/r128_dga.c b/src/r128_dga.c
-deleted file mode 100644
-index bb4a1a6..0000000
---- a/src/r128_dga.c
-+++ /dev/null
-@@ -1,408 +0,0 @@
--/*
-- * Authors:
-- * Ove Kåven <ovek@transgaming.com>,
-- * borrowing some code from the Chips and MGA drivers.
-- */
--
--#ifdef HAVE_CONFIG_H
--#include "config.h"
--#endif
--
--#include <string.h>
--
-- /* Driver data structures */
--#include "r128.h"
--#include "r128_probe.h"
--
-- /* X and server generic header files */
--#include "xf86.h"
--
-- /* DGA support */
--#include "dgaproc.h"
--
--#ifdef R128DRI
--#include "r128_common.h"
--#endif
--
--static Bool R128_OpenFramebuffer(ScrnInfoPtr, char **, unsigned char **,
-- int *, int *, int *);
--static Bool R128_SetMode(ScrnInfoPtr, DGAModePtr);
--static int R128_GetViewport(ScrnInfoPtr);
--static void R128_SetViewport(ScrnInfoPtr, int, int, int);
--#ifdef HAVE_XAA_H
--static void R128_FillRect(ScrnInfoPtr, int, int, int, int, unsigned long);
--static void R128_BlitRect(ScrnInfoPtr, int, int, int, int, int, int);
--static void R128_BlitTransRect(ScrnInfoPtr, int, int, int, int, int, int,
-- unsigned long);
--#endif
--
--static DGAModePtr R128SetupDGAMode(ScrnInfoPtr pScrn,
-- DGAModePtr modes,
-- int *num,
-- int bitsPerPixel,
-- int depth,
-- Bool pixmap,
-- int secondPitch,
-- unsigned long red,
-- unsigned long green,
-- unsigned long blue,
-- short visualClass)
--{
-- R128InfoPtr info = R128PTR(pScrn);
-- DGAModePtr newmodes = NULL;
-- DGAModePtr currentMode;
-- DisplayModePtr pMode;
-- DisplayModePtr firstMode;
-- unsigned int size;
-- int pitch;
-- int Bpp = bitsPerPixel >> 3;
--
--SECOND_PASS:
--
-- pMode = firstMode = pScrn->modes;
--
-- while (1) {
-- pitch = pScrn->displayWidth;
-- size = pitch * Bpp * pMode->VDisplay;
--
-- if ((!secondPitch || (pitch != secondPitch)) &&
-- (size <= info->FbMapSize)) {
--
-- if (secondPitch)
-- pitch = secondPitch;
--
-- if (!(newmodes = realloc(modes, (*num + 1) * sizeof(DGAModeRec))))
-- break;
--
-- modes = newmodes;
-- currentMode = modes + *num;
--
-- currentMode->mode = pMode;
-- currentMode->flags = DGA_CONCURRENT_ACCESS;
--
-- if (pixmap)
-- currentMode->flags |= DGA_PIXMAP_AVAILABLE;
--
--#ifdef HAVE_XAA_H
-- if (info->accel) {
-- if (info->accel->SetupForSolidFill &&
-- info->accel->SubsequentSolidFillRect)
-- currentMode->flags |= DGA_FILL_RECT;
-- if (info->accel->SetupForScreenToScreenCopy &&
-- info->accel->SubsequentScreenToScreenCopy)
-- currentMode->flags |= DGA_BLIT_RECT | DGA_BLIT_RECT_TRANS;
-- if (currentMode->flags &
-- (DGA_PIXMAP_AVAILABLE | DGA_FILL_RECT |
-- DGA_BLIT_RECT | DGA_BLIT_RECT_TRANS))
-- currentMode->flags &= ~DGA_CONCURRENT_ACCESS;
-- }
--#endif
-- if (pMode->Flags & V_DBLSCAN)
-- currentMode->flags |= DGA_DOUBLESCAN;
-- if (pMode->Flags & V_INTERLACE)
-- currentMode->flags |= DGA_INTERLACED;
--
-- currentMode->byteOrder = pScrn->imageByteOrder;
-- currentMode->depth = depth;
-- currentMode->bitsPerPixel = bitsPerPixel;
-- currentMode->red_mask = red;
-- currentMode->green_mask = green;
-- currentMode->blue_mask = blue;
-- currentMode->visualClass = visualClass;
-- currentMode->viewportWidth = pMode->HDisplay;
-- currentMode->viewportHeight = pMode->VDisplay;
-- currentMode->xViewportStep = 8;
-- currentMode->yViewportStep = 1;
-- currentMode->viewportFlags = DGA_FLIP_RETRACE;
-- currentMode->offset = 0;
-- currentMode->address = (unsigned char*)info->LinearAddr;
-- currentMode->bytesPerScanline = pitch * Bpp;
-- currentMode->imageWidth = pitch;
-- currentMode->imageHeight = (info->FbMapSize
-- / currentMode->bytesPerScanline);
-- currentMode->pixmapWidth = currentMode->imageWidth;
-- currentMode->pixmapHeight = currentMode->imageHeight;
-- currentMode->maxViewportX = (currentMode->imageWidth
-- - currentMode->viewportWidth);
-- /* this might need to get clamped to some maximum */
-- currentMode->maxViewportY = (currentMode->imageHeight
-- - currentMode->viewportHeight);
-- (*num)++;
-- }
--
-- pMode = pMode->next;
-- if (pMode == firstMode)
-- break;
-- }
--
-- if (secondPitch) {
-- secondPitch = 0;
-- goto SECOND_PASS;
-- }
--
-- return modes;
--}
--
--Bool
--R128DGAInit(ScreenPtr pScreen)
--{
-- ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
-- R128InfoPtr info = R128PTR(pScrn);
-- DGAModePtr modes = NULL;
-- int num = 0;
--
-- /* 8 */
-- modes = R128SetupDGAMode (pScrn, modes, &num, 8, 8,
-- (pScrn->bitsPerPixel == 8),
-- (pScrn->bitsPerPixel != 8) ? 0 : pScrn->displayWidth,
-- 0, 0, 0, PseudoColor);
--
-- /* 15 */
-- modes = R128SetupDGAMode (pScrn, modes, &num, 16, 15,
-- (pScrn->bitsPerPixel == 16),
-- (pScrn->depth != 15) ? 0 : pScrn->displayWidth,
-- 0x7c00, 0x03e0, 0x001f, TrueColor);
--
-- modes = R128SetupDGAMode (pScrn, modes, &num, 16, 15,
-- (pScrn->bitsPerPixel == 16),
-- (pScrn->depth != 15) ? 0 : pScrn->displayWidth,
-- 0x7c00, 0x03e0, 0x001f, DirectColor);
--
-- /* 16 */
-- modes = R128SetupDGAMode (pScrn, modes, &num, 16, 16,
-- (pScrn->bitsPerPixel == 16),
-- (pScrn->depth != 16) ? 0 : pScrn->displayWidth,
-- 0xf800, 0x07e0, 0x001f, TrueColor);
--
-- modes = R128SetupDGAMode (pScrn, modes, &num, 16, 16,
-- (pScrn->bitsPerPixel == 16),
-- (pScrn->depth != 16) ? 0 : pScrn->displayWidth,
-- 0xf800, 0x07e0, 0x001f, DirectColor);
--
-- /* 24 */
-- modes = R128SetupDGAMode (pScrn, modes, &num, 24, 24,
-- (pScrn->bitsPerPixel == 24),
-- (pScrn->bitsPerPixel != 24) ? 0 : pScrn->displayWidth,
-- 0xff0000, 0x00ff00, 0x0000ff, TrueColor);
--
-- modes = R128SetupDGAMode (pScrn, modes, &num, 24, 24,
-- (pScrn->bitsPerPixel == 24),
-- (pScrn->bitsPerPixel != 24) ? 0 : pScrn->displayWidth,
-- 0xff0000, 0x00ff00, 0x0000ff, DirectColor);
--
-- /* 32 */
-- modes = R128SetupDGAMode (pScrn, modes, &num, 32, 24,
-- (pScrn->bitsPerPixel == 32),
-- (pScrn->bitsPerPixel != 32) ? 0 : pScrn->displayWidth,
-- 0xff0000, 0x00ff00, 0x0000ff, TrueColor);
--
-- modes = R128SetupDGAMode (pScrn, modes, &num, 32, 24,
-- (pScrn->bitsPerPixel == 32),
-- (pScrn->bitsPerPixel != 32) ? 0 : pScrn->displayWidth,
-- 0xff0000, 0x00ff00, 0x0000ff, DirectColor);
--
-- info->numDGAModes = num;
-- info->DGAModes = modes;
--
-- info->DGAFuncs.OpenFramebuffer = R128_OpenFramebuffer;
-- info->DGAFuncs.CloseFramebuffer = NULL;
-- info->DGAFuncs.SetMode = R128_SetMode;
-- info->DGAFuncs.SetViewport = R128_SetViewport;
-- info->DGAFuncs.GetViewport = R128_GetViewport;
--
-- info->DGAFuncs.Sync = NULL;
-- info->DGAFuncs.FillRect = NULL;
-- info->DGAFuncs.BlitRect = NULL;
-- info->DGAFuncs.BlitTransRect = NULL;
--
--#ifdef HAVE_XAA_H
-- if (info->accel) {
-- info->DGAFuncs.Sync = info->accel->Sync;
-- if (info->accel->SetupForSolidFill &&
-- info->accel->SubsequentSolidFillRect)
-- info->DGAFuncs.FillRect = R128_FillRect;
-- if (info->accel->SetupForScreenToScreenCopy &&
-- info->accel->SubsequentScreenToScreenCopy) {
-- info->DGAFuncs.BlitRect = R128_BlitRect;
-- info->DGAFuncs.BlitTransRect = R128_BlitTransRect;
-- }
-- }
--#endif
--
-- return DGAInit(pScreen, &(info->DGAFuncs), modes, num);
--}
--
--
--static Bool
--R128_SetMode(
-- ScrnInfoPtr pScrn,
-- DGAModePtr pMode
--){
-- static R128FBLayout SavedLayouts[MAXSCREENS];
-- int indx = pScrn->pScreen->myNum;
-- R128InfoPtr info = R128PTR(pScrn);
--
-- if(!pMode) { /* restore the original mode */
-- /* put the ScreenParameters back */
-- if(info->DGAactive)
-- memcpy(&info->CurrentLayout, &SavedLayouts[indx], sizeof(R128FBLayout));
--
-- pScrn->currentMode = info->CurrentLayout.mode;
--
-- pScrn->SwitchMode(SWITCH_MODE_ARGS(pScrn, pScrn->currentMode));
--#ifdef R128DRI
-- if (info->directRenderingEnabled) {
-- R128CCE_STOP(pScrn, info);
-- }
--#endif
-- if (info->accelOn)
-- R128EngineInit(pScrn);
--#ifdef R128DRI
-- if (info->directRenderingEnabled) {
-- R128CCE_START(pScrn, info);
-- }
--#endif
-- pScrn->AdjustFrame(ADJUST_FRAME_ARGS(pScrn, 0, 0));
-- info->DGAactive = FALSE;
-- } else {
-- if(!info->DGAactive) { /* save the old parameters */
-- memcpy(&SavedLayouts[indx], &info->CurrentLayout, sizeof(R128FBLayout));
-- info->DGAactive = TRUE;
-- }
--
-- info->CurrentLayout.bitsPerPixel = pMode->bitsPerPixel;
-- info->CurrentLayout.depth = pMode->depth;
-- info->CurrentLayout.displayWidth = pMode->bytesPerScanline /
-- (pMode->bitsPerPixel >> 3);
-- info->CurrentLayout.pixel_bytes = pMode->bitsPerPixel / 8;
-- info->CurrentLayout.pixel_code = (pMode->bitsPerPixel != 16
-- ? pMode->bitsPerPixel
-- : pMode->depth);
-- /* R128ModeInit() will set the mode field */
--
-- pScrn->SwitchMode(SWITCH_MODE_ARGS(pScrn, pMode->mode));
--
--#ifdef R128DRI
-- if (info->directRenderingEnabled) {
-- R128CCE_STOP(pScrn, info);
-- }
--#endif
-- if (info->accelOn)
-- R128EngineInit(pScrn);
--#ifdef R128DRI
-- if (info->directRenderingEnabled) {
-- R128CCE_START(pScrn, info);
-- }
--#endif
-- }
--
-- return TRUE;
--}
--
--
--
--static int
--R128_GetViewport(
-- ScrnInfoPtr pScrn
--){
-- R128InfoPtr info = R128PTR(pScrn);
--
-- return info->DGAViewportStatus;
--}
--
--
--static void
--R128_SetViewport(
-- ScrnInfoPtr pScrn,
-- int x, int y,
-- int flags
--){
-- R128InfoPtr info = R128PTR(pScrn);
--
-- pScrn->AdjustFrame(ADJUST_FRAME_ARGS(pScrn, x, y));
-- info->DGAViewportStatus = 0; /* FIXME */
--}
--
--#ifdef HAVE_XAA_H
--static void
--R128_FillRect (
-- ScrnInfoPtr pScrn,
-- int x, int y, int w, int h,
-- unsigned long color
--){
-- R128InfoPtr info = R128PTR(pScrn);
--
-- (*info->accel->SetupForSolidFill)(pScrn, color, GXcopy, (uint32_t)(~0));
-- (*info->accel->SubsequentSolidFillRect)(pScrn, x, y, w, h);
--
-- if (pScrn->bitsPerPixel == info->CurrentLayout.bitsPerPixel)
-- SET_SYNC_FLAG(info->accel);
--}
--
--static void
--R128_BlitRect(
-- ScrnInfoPtr pScrn,
-- int srcx, int srcy,
-- int w, int h,
-- int dstx, int dsty
--){
-- R128InfoPtr info = R128PTR(pScrn);
-- int xdir = ((srcx < dstx) && (srcy == dsty)) ? -1 : 1;
-- int ydir = (srcy < dsty) ? -1 : 1;
--
-- (*info->accel->SetupForScreenToScreenCopy)(
-- pScrn, xdir, ydir, GXcopy, (uint32_t)(~0), -1);
-- (*info->accel->SubsequentScreenToScreenCopy)(
-- pScrn, srcx, srcy, dstx, dsty, w, h);
--
-- if (pScrn->bitsPerPixel == info->CurrentLayout.bitsPerPixel)
-- SET_SYNC_FLAG(info->accel);
--}
--
--
--static void
--R128_BlitTransRect(
-- ScrnInfoPtr pScrn,
-- int srcx, int srcy,
-- int w, int h,
-- int dstx, int dsty,
-- unsigned long color
--){
-- R128InfoPtr info = R128PTR(pScrn);
-- int xdir = ((srcx < dstx) && (srcy == dsty)) ? -1 : 1;
-- int ydir = (srcy < dsty) ? -1 : 1;
--
-- info->XAAForceTransBlit = TRUE;
--
-- (*info->accel->SetupForScreenToScreenCopy)(
-- pScrn, xdir, ydir, GXcopy, (uint32_t)(~0), color);
--
-- info->XAAForceTransBlit = FALSE;
--
-- (*info->accel->SubsequentScreenToScreenCopy)(
-- pScrn, srcx, srcy, dstx, dsty, w, h);
--
-- if (pScrn->bitsPerPixel == info->CurrentLayout.bitsPerPixel)
-- SET_SYNC_FLAG(info->accel);
--}
--#endif
--
--static Bool
--R128_OpenFramebuffer(
-- ScrnInfoPtr pScrn,
-- char **name,
-- unsigned char **mem,
-- int *size,
-- int *offset,
-- int *flags
--){
-- R128InfoPtr info = R128PTR(pScrn);
--
-- *name = NULL; /* no special device */
-- *mem = (unsigned char*)info->LinearAddr;
-- *size = info->FbMapSize;
-- *offset = 0;
-- *flags = /* DGA_NEED_ROOT */ 0; /* don't need root, just /dev/mem access */
--
-- return TRUE;
--}
-diff --git a/src/r128_driver.c b/src/r128_driver.c
-index 0a8d802..2cbfc81 100644
---- a/src/r128_driver.c
-+++ b/src/r128_driver.c
-@@ -2044,7 +2044,9 @@ Bool R128ScreenInit(SCREEN_INIT_ARGS_DECL)
- //pScrn->AdjustFrame(ADJUST_FRAME_ARGS(pScrn, pScrn->frameX0, pScrn->frameY0));
-
- /* DGA setup */
-- R128DGAInit(pScreen);
-+#ifdef XFreeXDGA
-+ xf86DiDGAInit(pScreen, info->LinearAddr + pScrn->fbOffset);
-+#endif
-
- /* Backing store setup */
- xf86SetBackingStore(pScreen);
-@@ -3629,9 +3631,6 @@ static Bool R128CloseScreen(CLOSE_SCREEN_ARGS_DECL)
- if (info->scratch_save) free(info->scratch_save);
- info->scratch_save = NULL;
-
-- if (info->DGAModes) free(info->DGAModes);
-- info->DGAModes = NULL;
--
- if (info->adaptor) {
- free(info->adaptor->pPortPrivates[0].ptr);
- xf86XVFreeVideoAdaptorRec(info->adaptor);
---
-2.2.2
-
-
-From 0519b7b3aac61dfd57cbf3bb0da561ca9bd079cb Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Sat, 23 Aug 2014 01:13:18 -0400
-Subject: Improve panel code
-
-Since the driver uses PanelXRes and PanelYRes to calculate stretch
-ratios, it should try harder to set them. For LVDS, we need to move the
-xorg.conf check so that it executes before the BIOS check. For DVI, we
-should read them from the mode that the X server has identified as being
-the native one. Even then, PanelXRes and PanelYRes are not guaranteed to
-be positive, so the driver should verify this before dividing by them.
-
-Another problem with the old panel code was that PanelPwrDly had no sane
-default. It was also missing the check for Rage Pro 2 which lacks RMX.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
----
- src/r128_driver.c | 27 +++++++--------------------
- src/r128_output.c | 13 ++++++++++---
- src/r128_video.c | 10 ++++++----
- 3 files changed, 23 insertions(+), 27 deletions(-)
-
-diff --git a/src/r128_driver.c b/src/r128_driver.c
-index 2cbfc81..98b0644 100644
---- a/src/r128_driver.c
-+++ b/src/r128_driver.c
-@@ -479,6 +479,10 @@ void R128GetPanelInfoFromBIOS(xf86OutputPtr output)
- int FPHeader = 0;
- int i;
-
-+ r128_output->PanelPwrDly = 200;
-+ xf86GetOptValInteger(info->Options, OPTION_PANEL_WIDTH, &(r128_output->PanelXRes));
-+ xf86GetOptValInteger(info->Options, OPTION_PANEL_HEIGHT, &(r128_output->PanelYRes));
-+
- if (!info->VBIOS) return;
- info->FPBIOSstart = 0;
-
-@@ -511,8 +515,6 @@ void R128GetPanelInfoFromBIOS(xf86OutputPtr output)
- }
-
- if (!info->FPBIOSstart) return;
-- xf86GetOptValInteger(info->Options, OPTION_PANEL_WIDTH, &(r128_output->PanelXRes));
-- xf86GetOptValInteger(info->Options, OPTION_PANEL_HEIGHT, &(r128_output->PanelYRes));
-
- if (!r128_output->PanelXRes)
- r128_output->PanelXRes = R128_BIOS16(info->FPBIOSstart + 25);
-@@ -2850,13 +2852,6 @@ Bool R128InitCrtcRegisters(xf86CrtcPtr crtc, R128SavePtr save, DisplayModePtr mo
-
- save->crtc_ext_cntl |= R128_VGA_ATI_LINEAR | R128_XCRT_CNT_EN;
-
-- if (info->isDFP && !info->isPro2) {
-- if (r128_output->PanelXRes < mode->CrtcHDisplay)
-- mode->HDisplay = mode->CrtcHDisplay = r128_output->PanelXRes;
-- if (r128_output->PanelYRes < mode->CrtcVDisplay)
-- mode->VDisplay = mode->CrtcVDisplay = r128_output->PanelYRes;
-- }
--
- save->crtc_h_total_disp = ((((mode->CrtcHTotal / 8) - 1) & 0xffff)
- | (((mode->CrtcHDisplay / 8) - 1) << 16));
-
-@@ -3240,7 +3235,7 @@ Bool R128InitDDARegisters(xf86CrtcPtr crtc, R128SavePtr save,
- VclkFreq = R128Div(pll->reference_freq * save->feedback_div,
- pll->reference_div * save->post_div);
-
-- if (info->isDFP && !info->isPro2) {
-+ if (info->isDFP && !info->isPro2 && r128_output->PanelXRes > 0) {
- if (r128_output->PanelXRes != mode->CrtcHDisplay)
- VclkFreq = (VclkFreq * mode->CrtcHDisplay) / r128_output->PanelXRes;
- }
-@@ -3313,7 +3308,7 @@ Bool R128InitDDA2Registers(xf86CrtcPtr crtc, R128SavePtr save,
- VclkFreq = R128Div(pll->reference_freq * save->feedback_div_2,
- pll->reference_div * save->post_div_2);
-
-- if (info->isDFP && !info->isPro2) {
-+ if (info->isDFP && !info->isPro2 && r128_output->PanelXRes > 0) {
- if (r128_output->PanelXRes != mode->CrtcHDisplay)
- VclkFreq = (VclkFreq * mode->CrtcHDisplay) / r128_output->PanelXRes;
- }
-@@ -3418,15 +3413,7 @@ ModeStatus R128DoValidMode(xf86OutputPtr output, DisplayModePtr mode, int flags)
- if (r128_output->MonType == MT_CRT)
- return MODE_OK;
-
-- if (info->isDFP) {
-- if (r128_output->PanelXRes < mode->CrtcHDisplay ||
-- r128_output->PanelYRes < mode->CrtcVDisplay)
-- return MODE_NOMODE;
-- else
-- return MODE_OK;
-- }
--
-- if (r128_output->MonType == MT_LCD) {
-+ if (r128_output->MonType == MT_DFP || r128_output->MonType == MT_LCD) {
- if (mode->Flags & V_INTERLACE) return MODE_NO_INTERLACE;
- if (mode->Flags & V_DBLSCAN) return MODE_NO_DBLESCAN;
- }
-diff --git a/src/r128_output.c b/src/r128_output.c
-index 8ef6d45..6c35e78 100644
---- a/src/r128_output.c
-+++ b/src/r128_output.c
-@@ -87,7 +87,7 @@ static void r128_mode_set(xf86OutputPtr output, DisplayModePtr mode, DisplayMode
- xf86CrtcPtr crtc = output->crtc;
- R128CrtcPrivatePtr r128_crtc = crtc->driver_private;
-
-- if (r128_crtc->crtc_id == 0)
-+ if (r128_crtc->crtc_id == 0 && !info->isPro2)
- R128InitRMXRegisters(&info->SavedReg, &info->ModeReg, output, adjusted_mode);
-
- if (r128_output->MonType == MT_DFP)
-@@ -97,7 +97,7 @@ static void r128_mode_set(xf86OutputPtr output, DisplayModePtr mode, DisplayMode
- else if (r128_output->MonType == MT_CRT)
- R128InitDACRegisters(&info->SavedReg, &info->ModeReg, output);
-
-- if (r128_crtc->crtc_id == 0)
-+ if (r128_crtc->crtc_id == 0 && !info->isPro2)
- R128RestoreRMXRegisters(pScrn, &info->ModeReg);
-
- if (r128_output->MonType == MT_DFP)
-@@ -305,6 +305,13 @@ DisplayModePtr R128ProbeOutputModes(xf86OutputPtr output)
- modes = xf86GetDefaultModes();
-
- for (mode = modes; mode != NULL; mode = mode->next) {
-+ if (r128_output->type == OUTPUT_DVI) {
-+ if (mode->type & (M_T_DRIVER | M_T_PREFERRED)) {
-+ r128_output->PanelXRes = mode->HDisplay;
-+ r128_output->PanelYRes = mode->VDisplay;
-+ }
-+ }
-+
- xf86SetModeCrtc(mode, INTERLACE_HALVE_V);
- if (mode->status == MODE_OK)
- mode->status = R128DoValidMode(output, mode, MODECHECK_FINAL);
-@@ -459,7 +466,7 @@ Bool R128SetupConnectors(ScrnInfoPtr pScrn)
- R128I2CInit(output, &r128_output->pI2CBus, output->name);
- }
-
-- if (otypes[i] != OUTPUT_VGA)
-+ if (otypes[i] == OUTPUT_LVDS)
- R128GetPanelInfoFromBIOS(output);
- }
-
-diff --git a/src/r128_video.c b/src/r128_video.c
-index dc1f25b..9da56ff 100644
---- a/src/r128_video.c
-+++ b/src/r128_video.c
-@@ -670,7 +670,7 @@ R128DisplayVideo422(
- int v_inc, h_inc, step_by, tmp, v_inc_shift;
- int p1_h_accum_init, p23_h_accum_init;
- int p1_v_accum_init;
-- Bool rmx_active;
-+ Bool rmx_active = FALSE;
-
- R128ECP(pScrn, pPriv);
-
-@@ -680,7 +680,8 @@ R128DisplayVideo422(
- if (pScrn->currentMode->Flags & V_DBLSCAN)
- v_inc_shift--;
-
-- rmx_active = INREG(R128_FP_VERT_STRETCH) & R128_VERT_STRETCH_ENABLE;
-+ if (r128_output->PanelYRes > 0)
-+ rmx_active = INREG(R128_FP_VERT_STRETCH) & R128_VERT_STRETCH_ENABLE;
- if (rmx_active) {
- v_inc = ((src_h * pScrn->currentMode->CrtcVDisplay / r128_output->PanelYRes) << v_inc_shift) / drw_h;
- } else {
-@@ -759,7 +760,7 @@ R128DisplayVideo420(
- int v_inc, h_inc, step_by, tmp, leftUV, v_inc_shift;
- int p1_h_accum_init, p23_h_accum_init;
- int p1_v_accum_init, p23_v_accum_init;
-- Bool rmx_active;
-+ Bool rmx_active = FALSE;
-
- v_inc_shift = 20;
- if (pScrn->currentMode->Flags & V_INTERLACE)
-@@ -767,7 +768,8 @@ R128DisplayVideo420(
- if (pScrn->currentMode->Flags & V_DBLSCAN)
- v_inc_shift--;
-
-- rmx_active = INREG(R128_FP_VERT_STRETCH) & R128_VERT_STRETCH_ENABLE;
-+ if (r128_output->PanelYRes > 0)
-+ rmx_active = INREG(R128_FP_VERT_STRETCH) & R128_VERT_STRETCH_ENABLE;
- if (rmx_active) {
- v_inc = ((src_h * pScrn->currentMode->CrtcVDisplay / r128_output->PanelYRes) << v_inc_shift) / drw_h;
- } else {
---
-2.2.2
-
-
-From 089c81ed6b6efc4610e0c5e5fcb36dfd58b83439 Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Sat, 23 Aug 2014 01:19:25 -0400
-Subject: Fix whitespace near panel code
-
-This has been bugging me.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
----
- src/r128_driver.c | 10 +++++-----
- src/r128_video.c | 24 ++++++++++++------------
- 2 files changed, 17 insertions(+), 17 deletions(-)
-
-diff --git a/src/r128_driver.c b/src/r128_driver.c
-index 98b0644..f00fa1d 100644
---- a/src/r128_driver.c
-+++ b/src/r128_driver.c
-@@ -507,7 +507,7 @@ void R128GetPanelInfoFromBIOS(xf86OutputPtr output)
- if (!FPHeader) return;
-
- /* Assume that only one panel is attached and supported */
-- for (i = FPHeader+20; i < FPHeader+84; i += 2) {
-+ for (i = FPHeader + 20; i < FPHeader + 84; i += 2) {
- if (R128_BIOS16(i) != 0) {
- info->FPBIOSstart = R128_BIOS16(i);
- break;
-@@ -3409,6 +3409,7 @@ ModeStatus R128DoValidMode(xf86OutputPtr output, DisplayModePtr mode, int flags)
- ScrnInfoPtr pScrn = output->scrn;
- R128InfoPtr info = R128PTR(pScrn);
- R128OutputPrivatePtr r128_output = output->driver_private;
-+ int i, j;
-
- if (r128_output->MonType == MT_CRT)
- return MODE_OK;
-@@ -3419,9 +3420,8 @@ ModeStatus R128DoValidMode(xf86OutputPtr output, DisplayModePtr mode, int flags)
- }
-
- if (r128_output->MonType == MT_LCD && info->VBIOS) {
-- int i;
- for (i = info->FPBIOSstart + 64; R128_BIOS16(i) != 0; i += 2) {
-- int j = R128_BIOS16(i);
-+ j = R128_BIOS16(i);
-
- if (mode->CrtcHDisplay == R128_BIOS16(j) &&
- mode->CrtcVDisplay == R128_BIOS16(j + 2)) {
-@@ -3432,8 +3432,8 @@ ModeStatus R128DoValidMode(xf86OutputPtr output, DisplayModePtr mode, int flags)
- (float)mode->Clock / 1000);
-
- /* Assume we are using expanded mode */
-- if (R128_BIOS16(j+5)) j = R128_BIOS16(j+5);
-- else j += 9;
-+ if (R128_BIOS16(j + 5)) j = R128_BIOS16(j + 5);
-+ else j += 9;
-
- mode->Clock = (uint32_t)R128_BIOS16(j) * 10;
-
-diff --git a/src/r128_video.c b/src/r128_video.c
-index 9da56ff..cac4301 100644
---- a/src/r128_video.c
-+++ b/src/r128_video.c
-@@ -574,16 +574,16 @@ R128CopyData420(
-
- uint32_t
- R128AllocateMemory(
-- ScrnInfoPtr pScrn,
-- void **mem_struct,
-- int size,
-- int align,
-- Bool need_accel
-+ ScrnInfoPtr pScrn,
-+ void **mem_struct,
-+ int size,
-+ int align,
-+ Bool need_accel
- ){
-- R128InfoPtr info = R128PTR(pScrn);
-- ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
-- Bool do_linear = !need_accel;
-- uint32_t offset = 0;
-+ R128InfoPtr info = R128PTR(pScrn);
-+ ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
-+ Bool do_linear = !need_accel;
-+ uint32_t offset = 0;
-
- #ifdef HAVE_XAA_H
- if (!info->accel && need_accel)
-@@ -608,7 +608,7 @@ R128AllocateMemory(
- offset = area->offset;
- }
- #endif
-- if (!info->useEXA && do_linear) {
-+ if (!info->useEXA && do_linear) {
- FBLinearPtr linear = *mem_struct;
- int cpp = info->CurrentLayout.pixel_bytes;
-
-@@ -643,9 +643,9 @@ R128AllocateMemory(
- }
-
- offset = linear->offset * cpp;
-- }
-+ }
-
-- return offset;
-+ return offset;
- }
-
- static void
---
-2.2.2
-
-
-From fcee44e469b22934a04bd3ee19ed101aaa176a54 Mon Sep 17 00:00:00 2001
-From: Connor Behan <connor.behan@gmail.com>
-Date: Sat, 23 Aug 2014 01:24:42 -0400
-Subject: Silence the non-debug warnings
-
-Some declarations of pScrn are only there for debugging purposes. This
-should make gcc quieter on most systems.
-
-Signed-off-by: Connor Behan <connor.behan@gmail.com>
----
- src/r128_driver.c | 4 ++++
- src/r128_exa_render.c | 4 ++++
- 2 files changed, 8 insertions(+)
-
-diff --git a/src/r128_driver.c b/src/r128_driver.c
-index f00fa1d..e4e43a6 100644
---- a/src/r128_driver.c
-+++ b/src/r128_driver.c
-@@ -3109,7 +3109,9 @@ void R128InitLVDSRegisters(R128SavePtr orig, R128SavePtr save, xf86OutputPtr out
- void R128InitPLLRegisters(xf86CrtcPtr crtc, R128SavePtr save,
- R128PLLPtr pll, double dot_clock)
- {
-+#if R128_DEBUG
- ScrnInfoPtr pScrn = crtc->scrn;
-+#endif
- unsigned long freq = dot_clock * 100;
- struct {
- int divider;
-@@ -3162,7 +3164,9 @@ void R128InitPLLRegisters(xf86CrtcPtr crtc, R128SavePtr save,
- void R128InitPLL2Registers(xf86CrtcPtr crtc, R128SavePtr save,
- R128PLLPtr pll, double dot_clock)
- {
-+#if R128_DEBUG
- ScrnInfoPtr pScrn = crtc->scrn;
-+#endif
- unsigned long freq = dot_clock * 100;
- struct {
- int divider;
-diff --git a/src/r128_exa_render.c b/src/r128_exa_render.c
-index c0d3688..b9601ee 100644
---- a/src/r128_exa_render.c
-+++ b/src/r128_exa_render.c
-@@ -157,8 +157,10 @@ R128GetDatatypePict2(uint32_t format, uint32_t *type)
- static Bool
- R128CheckCompositeTexture(PicturePtr pPict, PicturePtr pDstPict, int op)
- {
-+#if R128_DEBUG
- ScreenPtr pScreen = pDstPict->pDrawable->pScreen;
- ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
-+#endif
-
- unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone;
- uint32_t tmp1;
-@@ -198,8 +200,10 @@ R128CheckCompositeTexture(PicturePtr pPict, PicturePtr pDstPict, int op)
- static Bool
- R128CCECheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture, PicturePtr pDstPicture)
- {
-+#if R128_DEBUG
- ScreenPtr pScreen = pDstPicture->pDrawable->pScreen;
- ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
-+#endif
-
- PixmapPtr pSrcPixmap, pDstPixmap;
- uint32_t tmp1;
---
-2.2.2
-