Hello community,
here is the log from the commit of package xorg-x11-driver-video
checked in at Thu May 17 14:47:22 CEST 2007.
--------
--- xorg-x11-driver-video/xorg-x11-driver-video.changes 2007-05-14 22:11:44.000000000 +0200
+++ /mounts/work_src_done/STABLE/xorg-x11-driver-video/xorg-x11-driver-video.changes 2007-05-17 13:53:23.809353000 +0200
@@ -1,0 +2,13 @@
+Thu May 17 13:51:00 CEST 2007 - sndirsch@suse.de
+
+- updated nv driver to release 2.0.96
+ * This release adds simple VBE-based dualhead support for pre-G80
+ graphics cards. This mode has a few restrictions:
+ 1. Both heads must be connected when the system is booted.
+ 2. The same mode is used on both heads.
+ 3. The heads are always placed side-by-side.
+ 4. Only VBE modes are available.
+ 5. No Xinerama information is provided.
+ Use ' Option "Dualhead" "on" ' for configuration.
+
+-------------------------------------------------------------------
Old:
----
xf86-video-nv-2.0.95.tar.bz2
New:
----
xf86-video-nv-2.0.96.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ xorg-x11-driver-video.spec ++++++
--- /var/tmp/diff_new_pack.p17696/_old 2007-05-17 14:47:01.000000000 +0200
+++ /var/tmp/diff_new_pack.p17696/_new 2007-05-17 14:47:01.000000000 +0200
@@ -15,7 +15,7 @@
BuildRequires: Mesa-devel libdrm-devel pkgconfig xorg-x11-proto-devel xorg-x11-server-sdk
URL: http://xorg.freedesktop.org/
Version: 7.2
-Release: 98
+Release: 99
License: X11/MIT
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Group: System/X11/Servers/XF86_4
@@ -40,7 +40,7 @@
Source15: xf86-video-neomagic-X11R7.1-1.1.1.tar.bz2
Source16: xf86-video-newport-0.2.1.tar.bz2
Source17: xf86-video-nsc-2.8.2.tar.bz2
-Source18: xf86-video-nv-2.0.95.tar.bz2
+Source18: xf86-video-nv-2.0.96.tar.bz2
Source19: xf86-video-rendition-4.1.3.tar.bz2
Source20: xf86-video-s3-0.5.0.tar.bz2
Source21: xf86-video-s3virge-X11R7.1-1.9.1.tar.bz2
@@ -263,6 +263,16 @@
%{_mandir}/man4/*
%changelog
+* Thu May 17 2007 - sndirsch@suse.de
+- updated nv driver to release 2.0.96
+ * This release adds simple VBE-based dualhead support for pre-G80
+ graphics cards. This mode has a few restrictions:
+ 1. Both heads must be connected when the system is booted.
+ 2. The same mode is used on both heads.
+ 3. The heads are always placed side-by-side.
+ 4. Only VBE modes are available.
+ 5. No Xinerama information is provided.
+ Use ' Option "Dualhead" "on" ' for configuration.
* Mon May 14 2007 - sndirsch@suse.de
- disabled generation of kernel framebuffer blacklist (Bug #239194,
comments #27, #28, #31)
++++++ xf86-video-nv-2.0.95.tar.bz2 -> xf86-video-nv-2.0.96.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xf86-video-nv-2.0.95/aclocal.m4 new/xf86-video-nv-2.0.96/aclocal.m4
--- old/xf86-video-nv-2.0.95/aclocal.m4 2007-05-03 20:57:15.000000000 +0200
+++ new/xf86-video-nv-2.0.96/aclocal.m4 2007-05-16 23:43:10.000000000 +0200
@@ -6611,7 +6611,8 @@
_PKG_TEXT
])],
- [$4])
+ [AC_MSG_RESULT([no])
+ $4])
elif test $pkg_failed = untried; then
ifelse([$4], , [AC_MSG_FAILURE(dnl
[The pkg-config script could not be found or is too old. Make sure it
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xf86-video-nv-2.0.95/ChangeLog new/xf86-video-nv-2.0.96/ChangeLog
--- old/xf86-video-nv-2.0.95/ChangeLog 2007-05-03 20:59:27.000000000 +0200
+++ new/xf86-video-nv-2.0.96/ChangeLog 2007-05-16 23:46:54.000000000 +0200
@@ -1,3 +1,15 @@
+commit 9b8470e9c81e6ce2c8cd69942fb2ffd2d4c06102
+Author: Aaron Plattner
+Date: Wed May 16 14:45:36 2007 -0700
+
+ Bump to 2.0.96.
+
+commit 51c6425bea6e4ef02f7b76e58e759f99b0e993e8
+Author: Aaron Plattner
+Date: Thu May 10 17:09:36 2007 -0700
+
+ Add rudimentary VBE-based dual head support for pre-G80.
+
commit 0415ecaead518123ac6774300241867883a6dd57
Author: Aaron Plattner
Date: Thu May 3 11:54:28 2007 -0700
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xf86-video-nv-2.0.95/compat/parser/xf86Parser.h new/xf86-video-nv-2.0.96/compat/parser/xf86Parser.h
--- old/xf86-video-nv-2.0.95/compat/parser/xf86Parser.h 2007-04-20 23:25:55.000000000 +0200
+++ new/xf86-video-nv-2.0.96/compat/parser/xf86Parser.h 2007-05-16 23:37:59.000000000 +0200
@@ -82,6 +82,7 @@
/* Values for load_type */
#define XF86_LOAD_MODULE 0
#define XF86_LOAD_DRIVER 1
+#define XF86_DISABLE_MODULE 2
typedef struct
{
@@ -97,6 +98,7 @@
typedef struct
{
XF86LoadPtr mod_load_lst;
+ XF86LoadPtr mod_disable_lst;
char *mod_comment;
}
XF86ConfModuleRec, *XF86ConfModulePtr;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xf86-video-nv-2.0.95/configure new/xf86-video-nv-2.0.96/configure
--- old/xf86-video-nv-2.0.95/configure 2007-05-03 20:57:17.000000000 +0200
+++ new/xf86-video-nv-2.0.96/configure 2007-05-16 23:43:12.000000000 +0200
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for xf86-video-nv 2.0.95.
+# Generated by GNU Autoconf 2.61 for xf86-video-nv 2.0.96.
#
# Report bugs to https://bugs.freedesktop.org/enter_bug.cgi?product=xorg.
#
@@ -728,8 +728,8 @@
# Identity of this package.
PACKAGE_NAME='xf86-video-nv'
PACKAGE_TARNAME='xf86-video-nv'
-PACKAGE_VERSION='2.0.95'
-PACKAGE_STRING='xf86-video-nv 2.0.95'
+PACKAGE_VERSION='2.0.96'
+PACKAGE_STRING='xf86-video-nv 2.0.96'
PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg'
ac_unique_file="Makefile.am"
@@ -1418,7 +1418,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures xf86-video-nv 2.0.95 to adapt to many kinds of systems.
+\`configure' configures xf86-video-nv 2.0.96 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1488,7 +1488,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of xf86-video-nv 2.0.95:";;
+ short | recursive ) echo "Configuration of xf86-video-nv 2.0.96:";;
esac
cat <<\_ACEOF
@@ -1602,7 +1602,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-xf86-video-nv configure 2.0.95
+xf86-video-nv configure 2.0.96
generated by GNU Autoconf 2.61
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1616,7 +1616,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by xf86-video-nv $as_me 2.0.95, which was
+It was created by xf86-video-nv $as_me 2.0.96, which was
generated by GNU Autoconf 2.61. Invocation command line was
$ $0 $@
@@ -2311,7 +2311,7 @@
# Define the identity of the package.
PACKAGE='xf86-video-nv'
- VERSION='2.0.95'
+ VERSION='2.0.96'
cat >>confdefs.h <<_ACEOF
@@ -21554,7 +21554,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by xf86-video-nv $as_me 2.0.95, which was
+This file was extended by xf86-video-nv $as_me 2.0.96, which was
generated by GNU Autoconf 2.61. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -21607,7 +21607,7 @@
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-xf86-video-nv config.status 2.0.95
+xf86-video-nv config.status 2.0.96
configured by $0, generated by GNU Autoconf 2.61,
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xf86-video-nv-2.0.95/configure.ac new/xf86-video-nv-2.0.96/configure.ac
--- old/xf86-video-nv-2.0.95/configure.ac 2007-05-03 20:53:55.000000000 +0200
+++ new/xf86-video-nv-2.0.96/configure.ac 2007-05-16 23:37:36.000000000 +0200
@@ -22,7 +22,7 @@
AC_PREREQ(2.57)
AC_INIT([xf86-video-nv],
- 2.0.95,
+ 2.0.96,
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
xf86-video-nv)
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xf86-video-nv-2.0.95/man/nv.man new/xf86-video-nv-2.0.96/man/nv.man
--- old/xf86-video-nv-2.0.95/man/nv.man 2007-05-03 00:24:54.000000000 +0200
+++ new/xf86-video-nv-2.0.96/man/nv.man 2007-05-16 23:37:10.000000000 +0200
@@ -93,6 +93,11 @@
The options are "0" or "1".
Default: autodetected.
.TP
+.BI "Option \*qDualhead\*q \*q" boolean \*q
+Enables simple VBE-based dual head mode.
+This sets the same resolution on both outputs and lays them out side-by-side.
+The screens will be panned together as one big metamode if the virtual desktop is larger than both screens combined.
+.TP
.BI "Option \*qFlatPanel\*q \*q" boolean \*q
The driver usually can autodetect the presence of a digital flat panel. In
the case that this fails, this option can be used to force the driver to
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xf86-video-nv-2.0.95/src/nv_driver.c new/xf86-video-nv-2.0.96/src/nv_driver.c
--- old/xf86-video-nv-2.0.95/src/nv_driver.c 2007-05-03 00:24:54.000000000 +0200
+++ new/xf86-video-nv-2.0.96/src/nv_driver.c 2007-05-16 23:37:10.000000000 +0200
@@ -34,6 +34,7 @@
#include "nv_include.h"
#include "xf86int10.h"
+#include "vbeModes.h"
const OptionInfoRec * RivaAvailableOptions(int chipid, int busid);
Bool RivaGetScrnInfoRec(PciChipsets *chips, int chip);
@@ -70,8 +71,10 @@
static Bool NVMapMemFBDev(ScrnInfoPtr pScrn);
static Bool NVUnmapMem(ScrnInfoPtr pScrn);
static void NVSave(ScrnInfoPtr pScrn);
+static void NVSaveRestoreVBE(ScrnInfoPtr, vbeSaveRestoreFunction);
static void NVRestore(ScrnInfoPtr pScrn);
static Bool NVModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode);
+static Bool NVSetModeVBE(ScrnInfoPtr pScrn, DisplayModePtr pMode);
/*
@@ -410,6 +413,17 @@
"vbeDoEDID",
NULL
};
+
+static const char *vbeModeSymbols[] = {
+ "VBEExtendedInit",
+ "VBEGetVBEInfo",
+ "VBEGetModePool",
+ "VBEValidateModes",
+ "VBESetModeParameters",
+ "VBEGetVBEMode",
+ "VBESetVBEMode",
+ NULL
+};
#endif
static const char *i2cSymbols[] = {
@@ -488,7 +502,8 @@
OPTION_FP_DITHER,
OPTION_CRTC_NUMBER,
OPTION_FP_SCALE,
- OPTION_FP_TWEAK
+ OPTION_FP_TWEAK,
+ OPTION_DUALHEAD,
} NVOpts;
@@ -505,6 +520,7 @@
{ OPTION_CRTC_NUMBER, "CrtcNumber", OPTV_INTEGER, {0}, FALSE },
{ OPTION_FP_SCALE, "FPScale", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_FP_TWEAK, "FPTweak", OPTV_INTEGER, {0}, FALSE },
+ { OPTION_DUALHEAD, "DualHead", OPTV_BOOLEAN, {0}, FALSE },
{ -1, NULL, OPTV_NONE, {0}, FALSE }
};
@@ -821,6 +837,27 @@
return NVModeInit(pScrn, mode);
}
+Bool
+NVSwitchModeVBE(int scrnIndex, DisplayModePtr mode, int flags)
+{
+ ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+ NVPtr pNv = NVPTR(pScrn);
+ const Bool disableAccess = pNv->accessEnabled;
+
+ if(disableAccess)
+ pScrn->EnableDisableFBAccess(scrnIndex, FALSE);
+
+ NVSync(pScrn);
+ if (!NVSetModeVBE(pScrn, mode))
+ return FALSE;
+ NVAdjustFrame(scrnIndex, pScrn->frameX0, pScrn->frameY0, 0);
+
+ if(disableAccess)
+ pScrn->EnableDisableFBAccess(scrnIndex, TRUE);
+
+ return TRUE;
+}
+
/*
* This function is used to initialize the Start Address - the first
* displayed location in the video memory.
@@ -869,6 +906,17 @@
return TRUE;
}
+static Bool
+NVEnterVTVBE(int scrnIndex, int flags)
+{
+ ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+
+ if (!NVSetModeVBE(pScrn, pScrn->currentMode))
+ return FALSE;
+ NVAdjustFrame(scrnIndex, 0, 0, 0);
+ return TRUE;
+}
+
/*
* This is called when VT switching away from the X server. Its job is
* to restore the previous (text) mode.
@@ -888,7 +936,14 @@
NVLockUnlock(pNv, 1);
}
+static void
+NVLeaveVTVBE(int scrnIndex, int flags)
+{
+ ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+ NVSync(pScrn);
+ NVSaveRestoreVBE(pScrn, MODE_RESTORE);
+}
static void
NVBlockHandler (
@@ -930,9 +985,15 @@
NVPtr pNv = NVPTR(pScrn);
if (pScrn->vtSema) {
- NVSync(pScrn);
- NVRestore(pScrn);
- NVLockUnlock(pNv, 1);
+ if (!pNv->NoAccel)
+ NVSync(pScrn);
+
+ if (pNv->VBEDualhead) {
+ NVSaveRestoreVBE(pScrn, MODE_RESTORE);
+ } else {
+ NVRestore(pScrn);
+ NVLockUnlock(pNv, 1);
+ }
}
NVUnmapMem(pScrn);
@@ -956,6 +1017,16 @@
return (*pScreen->CloseScreen)(scrnIndex, pScreen);
}
+static void
+NVEnableDisableFBAccess(int scrnIndex, Bool enable)
+{
+ NVPtr pNv = NVPTR(xf86Screens[scrnIndex]);
+
+ pNv->accessEnabled = enable;
+ pNv->EnableDisableFBAccess(scrnIndex, enable);
+}
+
+
/* Free up any persistent data structures */
/* Optional */
@@ -1404,7 +1475,43 @@
} else {
pNv->usePanelTweak = FALSE;
}
-
+
+ if (xf86ReturnOptValBool(pNv->Options, OPTION_DUALHEAD, FALSE)) {
+ if (pNv->FBDev)
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "FBDev and Dualhead are incompatible.\n");
+ else
+ pNv->VBEDualhead = TRUE;
+ }
+
+ if (pNv->VBEDualhead) {
+ if (!xf86LoadSubModule(pScrn, "vbe")) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "Couldn't load the VBE module and Dualhead is "
+ "enabled.\n");
+ return FALSE;
+ }
+ xf86LoaderReqSymLists(vbeModeSymbols, NULL);
+ pNv->pVbe = VBEExtendedInit(NULL, pNv->pEnt->index,
+ SET_BIOS_SCRATCH | RESTORE_BIOS_SCRATCH);
+ if (!pNv->pVbe) return FALSE;
+
+ pNv->pVbeInfo = VBEGetVBEInfo(pNv->pVbe);
+ if (!pNv->pVbeInfo) return FALSE;
+
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+ "Using VBE dual-head mode.\n");
+
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ "Using software cursor.\n");
+ pNv->HWCursor = FALSE;
+
+ pScrn->SwitchMode = NVSwitchModeVBE;
+ pScrn->EnterVT = NVEnterVTVBE;
+ pScrn->LeaveVT = NVLeaveVTVBE;
+ pScrn->ValidMode = NULL;
+ }
+
if (pNv->pEnt->device->MemBase != 0) {
/* Require that the config file value matches one of the PCI values. */
if (!xf86CheckPciMemBase(pNv->PciInfo, pNv->pEnt->device->MemBase)) {
@@ -1622,14 +1729,31 @@
* pScrn->maxVValue are set. Since our NVValidMode() already takes
* care of this, we don't worry about setting them here.
*/
- i = xf86ValidateModes(pScrn, pScrn->monitor->Modes,
- pScrn->display->modes, clockRanges,
- NULL, 256, max_width,
- 512, 128, max_height,
- pScrn->display->virtualX,
- pScrn->display->virtualY,
- pNv->ScratchBufferStart,
- LOOKUP_BEST_REFRESH);
+ if (pNv->VBEDualhead) {
+ pScrn->modePool = VBEGetModePool(pScrn, pNv->pVbe, pNv->pVbeInfo,
+ V_MODETYPE_VBE);
+
+ VBESetModeNames(pScrn->modePool);
+ i = VBEValidateModes(pScrn, pScrn->monitor->Modes,
+ pScrn->display->modes, clockRanges,
+ NULL, 256, max_width,
+ 512, 128, max_height,
+ pScrn->display->virtualX,
+ pScrn->display->virtualY,
+ pNv->ScratchBufferStart,
+ LOOKUP_BEST_REFRESH);
+ if (i > 0)
+ VBESetModeParameters(pScrn, pNv->pVbe);
+ } else {
+ i = xf86ValidateModes(pScrn, pScrn->monitor->Modes,
+ pScrn->display->modes, clockRanges,
+ NULL, 256, max_width,
+ 512, 128, max_height,
+ pScrn->display->virtualX,
+ pScrn->display->virtualY,
+ pNv->ScratchBufferStart,
+ LOOKUP_BEST_REFRESH);
+ }
if (i < 1 && pNv->FBDev) {
fbdevHWUseBuildinMode(pScrn);
@@ -1662,6 +1786,22 @@
*/
xf86SetCrtcForModes(pScrn, 0);
+ if (pNv->VBEDualhead) {
+ DisplayModePtr p = pScrn->modes;
+
+ /*
+ * Loop through modes and double their widths. Stash the real width in
+ * CrtcHDisplay. Also adjust the screen dimensions.
+ */
+ do {
+ p->CrtcHDisplay = p->HDisplay;
+ p->HDisplay *= 2;
+ } while ((p = p->next) != pScrn->modes);
+
+ pScrn->virtualX *= 2;
+ pScrn->displayWidth *= 2;
+ }
+
/* Set the current mode to the first in the list */
pScrn->currentMode = pScrn->modes;
@@ -1843,6 +1983,32 @@
return TRUE;
}
+static Bool
+NVSetModeVBE(ScrnInfoPtr pScrn, DisplayModePtr pMode)
+{
+ NVPtr pNv = NVPTR(pScrn);
+ VbeModeInfoData *data;
+ int mode;
+
+ data = (VbeModeInfoData*)pMode->Private;
+ mode = data->mode | 1 << 14;
+
+ if(!VBESetVBEMode(pNv->pVbe, mode, data->block))
+ return FALSE;
+ pNv->PCRTC0[0x820/4] = pNv->PCRTC0[0x2820/4] =
+ pScrn->displayWidth * (pScrn->bitsPerPixel / 8);
+ pNv->vbeCRTC1Offset = pMode->CrtcHDisplay * (pScrn->bitsPerPixel / 8);
+
+ pScrn->vtSema = TRUE;
+
+ NVLoadStateExt(pNv, NULL);
+ NVResetGraphics(pScrn);
+
+ pNv->CurrentLayout.mode = pMode;
+
+ return TRUE;
+}
+
/*
* Restore the initial (text) mode.
*/
@@ -2015,6 +2181,10 @@
fbdevHWSave(pScrn);
if (!fbdevHWModeInit(pScrn, pScrn->currentMode))
return FALSE;
+ } else if (pNv->VBEDualhead) {
+ NVSaveRestoreVBE(pScrn, MODE_SAVE);
+ if (!NVSetModeVBE(pScrn, pScrn->currentMode))
+ return FALSE;
} else {
/* Save the current state */
NVSave(pScrn);
@@ -2210,6 +2380,10 @@
pNv->BlockHandler = pScreen->BlockHandler;
pScreen->BlockHandler = NVBlockHandler;
+ pNv->accessEnabled = TRUE;
+ pNv->EnableDisableFBAccess = pScrn->EnableDisableFBAccess;
+ pScrn->EnableDisableFBAccess = NVEnableDisableFBAccess;
+
#ifdef RANDR
/* Install our DriverFunc. We have to do it this way instead of using the
* HaveDriverFuncs argument to xf86AddDriver, because InitOutput clobbers
@@ -2248,6 +2422,20 @@
NVDACSave(pScrn, vgaReg, nvReg, pNv->Primary);
}
+static void
+NVSaveRestoreVBE(ScrnInfoPtr pScrn, vbeSaveRestoreFunction function)
+{
+ NVPtr pNv = NVPTR(pScrn);
+
+ if (function == MODE_SAVE) {
+ VBEGetVBEMode(pNv->pVbe, &pNv->vbeMode);
+ NVSave(pScrn);
+ } else if (function == MODE_RESTORE) {
+ NVRestore(pScrn);
+ VBESetVBEMode(pNv->pVbe, pNv->vbeMode, NULL);
+ }
+}
+
#ifdef RANDR
static Bool
NVRandRGetInfo(ScrnInfoPtr pScrn, Rotation *rotations)
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xf86-video-nv-2.0.95/src/nv_hw.c new/xf86-video-nv-2.0.96/src/nv_hw.c
--- old/xf86-video-nv-2.0.95/src/nv_hw.c 2007-05-03 00:23:54.000000000 +0200
+++ new/xf86-video-nv-2.0.96/src/nv_hw.c 2007-05-16 23:37:10.000000000 +0200
@@ -948,7 +948,8 @@
pNv->PTIMER[0x0100] = 0xFFFFFFFF;
if(pNv->Architecture == NV_ARCH_04) {
- pNv->PFB[0x0200/4] = state->config;
+ if (state)
+ pNv->PFB[0x0200/4] = state->config;
} else
if((pNv->Architecture < NV_ARCH_40) ||
((pNv->Chipset & 0xfff0) == 0x0040))
@@ -1411,6 +1412,11 @@
pNv->PFIFO[0x0495] = 0x00000001;
pNv->PFIFO[0x0140] = 0x00000001;
+ if(!state) {
+ pNv->CurrentState = NULL;
+ return;
+ }
+
if(pNv->Architecture >= NV_ARCH_10) {
if(pNv->twoHeads) {
pNv->PCRTC0[0x0860/4] = state->head;
@@ -1590,7 +1596,12 @@
CARD32 start
)
{
- pNv->PCRTC[0x800/4] = start;
+ if (pNv->VBEDualhead) {
+ pNv->PCRTC0[0x800/4] = start;
+ pNv->PCRTC0[0x2800/4] = start + pNv->vbeCRTC1Offset;
+ } else {
+ pNv->PCRTC[0x800/4] = start;
+ }
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/xf86-video-nv-2.0.95/src/nv_type.h new/xf86-video-nv-2.0.96/src/nv_type.h
--- old/xf86-video-nv-2.0.95/src/nv_type.h 2007-04-21 02:56:47.000000000 +0200
+++ new/xf86-video-nv-2.0.96/src/nv_type.h 2007-05-16 23:37:10.000000000 +0200
@@ -133,6 +133,8 @@
void (*PointerMoved)(int index, int x, int y);
ScreenBlockHandlerProcPtr BlockHandler;
CloseScreenProcPtr CloseScreen;
+ xf86EnableDisableFBAccessProc *EnableDisableFBAccess;
+ Bool accessEnabled;
Bool FBDev;
int Rotate;
NVFBLayout CurrentLayout;
@@ -174,6 +176,13 @@
Bool WaitVSyncPossible;
Bool BlendingPossible;
Bool RandRRotation;
+
+ /* VBE dual-head */
+ Bool VBEDualhead;
+ vbeInfoPtr pVbe;
+ VbeInfoBlock *pVbeInfo;
+ int vbeMode;
+ CARD32 vbeCRTC1Offset;
} NVRec, *NVPtr;
#define NVPTR(p) ((NVPtr)((p)->driverPrivate))
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
---------------------------------------------------------------------
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org