From 4ab7d316eceb23c81c1b208f9291750cf6b37513 Mon Sep 17 00:00:00 2001 From: Egbert Eich Date: Mon, 11 Oct 2004 09:58:04 +0000 Subject: [PATCH] Improving DPMS handling on VT swich and server termination/abort: previous version called the driver directly and too late. Unblank secondary screen explicitely. Don't rely on the value read during register save as the BIOS have blanked the secondary head. Checking if server isn't switched away before calling sync. Sanity check for possible bugs in aother areas of the code. Fixing default amount of of allocated video memory from AGP for i810: Use 16MB if less than 192MB are installed else use 24MB (Matthias Hopf). --- hw/xfree86/common/xf86Events.c | 14 +++++++------- hw/xfree86/common/xf86Init.c | 9 +++++---- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c index 204bd9360..ff907a269 100644 --- a/hw/xfree86/common/xf86Events.c +++ b/hw/xfree86/common/xf86Events.c @@ -49,7 +49,7 @@ */ /* $XConsortium: xf86Events.c /main/46 1996/10/25 11:36:30 kaleb $ */ -/* $XdotOrg: xc/programs/Xserver/hw/xfree86/common/xf86Events.c,v 1.2 2004/04/23 19:20:32 eich Exp $ */ +/* $XdotOrg: xc/programs/Xserver/hw/xfree86/common/xf86Events.c,v 1.3 2004/07/30 20:56:53 eich Exp $ */ /* [JCH-96/01/21] Extended std reverse map to four buttons. */ @@ -1333,6 +1333,10 @@ xf86VTSwitch() #ifdef DEBUG ErrorF("xf86VTSwitch: Leaving, xf86Exiting is %s\n", BOOLTOSTRING((dispatchException & DE_TERMINATE) ? TRUE : FALSE)); +#endif +#ifdef DPMSExtension + if (DPMSPowerLevel != DPMSModeOn) + DPMSSet(DPMSModeOn); #endif for (i = 0; i < xf86NumScreens; i++) { if (!(dispatchException & DE_TERMINATE)) @@ -1353,13 +1357,9 @@ xf86VTSwitch() } #endif /* !__UNIXOS2__ */ xf86EnterServerState(SETUP); - for (i = 0; i < xf86NumScreens; i++) { -#ifdef DPMSExtension - if (xf86Screens[i]->DPMSSet) - xf86Screens[i]->DPMSSet(xf86Screens[i],DPMSModeOn,0); -#endif + for (i = 0; i < xf86NumScreens; i++) xf86Screens[i]->LeaveVT(i, 0); - } + for (ih = InputHandlers; ih; ih = ih->next) xf86DisableInputHandler(ih); xf86AccessLeave(); /* We need this here, otherwise */ diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c index 3aaac93d4..d9d55a4fe 100644 --- a/hw/xfree86/common/xf86Init.c +++ b/hw/xfree86/common/xf86Init.c @@ -96,6 +96,7 @@ extern int xtest_command_key; #ifdef DPMSExtension #define DPMS_SERVER #include "extensions/dpms.h" +#include "dpmsproc.h" #endif @@ -1253,6 +1254,10 @@ AbortDDX() #ifdef HAS_USL_VTS /* Need the sleep when starting X from within another X session */ sleep(1); +#endif +#ifdef DPMSExtension /* Turn screens back on */ + if (DPMSPowerLevel != DPMSModeOn) + DPMSSet(DPMSModeOn); #endif if (xf86Screens) { if (xf86Screens[0]->vtSema) @@ -1265,10 +1270,6 @@ AbortDDX() * screen explicitely. */ xf86EnableAccess(xf86Screens[i]); -#ifdef DPMSExtension - if (xf86Screens[i]->DPMSSet) - xf86Screens[i]->DPMSSet(xf86Screens[i],DPMSModeOn,0); -#endif (xf86Screens[i]->LeaveVT)(i, 0); } }