[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xserver-xorg-video-savage: Changes to 'upstream-experimental'



 configure.ac         |   24 ++
 src/Makefile.am      |    2 
 src/compat-api.h     |  105 +++++++++++
 src/savage_accel.c   |    9 
 src/savage_bci.h     |    7 
 src/savage_common.h  |    6 
 src/savage_cursor.c  |   10 -
 src/savage_dga.c     |   31 ++-
 src/savage_dri.c     |  479 +++++++++++++++++++++++----------------------------
 src/savage_dri.h     |    6 
 src/savage_dripriv.h |    6 
 src/savage_driver.c  |  183 +++++++++----------
 src/savage_driver.h  |   42 ++--
 src/savage_drm.h     |   12 -
 src/savage_exa.c     |   25 +-
 src/savage_hwmc.c    |   16 -
 src/savage_i2c.c     |   16 +
 src/savage_pciids.h  |   55 +++++
 src/savage_regs.h    |    6 
 src/savage_sarea.h   |   12 -
 src/savage_shadow.c  |    6 
 src/savage_streams.h |    7 
 src/savage_vbe.c     |   35 ++-
 src/savage_vbe.h     |    6 
 src/savage_video.c   |   88 ++++-----
 src/savage_xaa.c     |   17 +
 26 files changed, 689 insertions(+), 522 deletions(-)

New commits:
commit cb27a7a072c6e087a2e272d84c1d569dc717da8b
Author: Dave Airlie <airlied@redhat.com>
Date:   Tue Jul 17 16:05:09 2012 +1000

    xf86-video-savage: bump to version 2.3.6
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/configure.ac b/configure.ac
index 5e4fbe2..2b99314 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
 # Initialize Autoconf
 AC_PREREQ([2.60])
 AC_INIT([xf86-video-savage],
-        [2.3.5],
+        [2.3.6],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         [xf86-video-savage])
 AC_CONFIG_SRCDIR([Makefile.am])

commit d7edd7c545473d5ed80c9a46c1405042267a7293
Author: Dave Airlie <airlied@redhat.com>
Date:   Mon Jul 16 03:39:32 2012 +0100

    savage: make build with no xaa server.
    
    This fixes savage build against the no XAA server.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/configure.ac b/configure.ac
index ca60e76..5e4fbe2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -103,6 +103,24 @@ if test "$DRI" = yes; then
         AC_DEFINE(SAVAGEDRI_DEVEL,1,[Enable developmental DRI driver support])
 fi
 
+AC_ARG_ENABLE(xaa,
+              AS_HELP_STRING([--enable-xaa],
+                             [Enable legacy X Acceleration Architecture (XAA) [default=auto]]),
+              [XAA="$enableval"],
+              [XAA=auto])
+if test "x$XAA" != xno; then
+        save_CFLAGS=$CFLAGS
+        save_CPPFLAGS=$CPPFLAGS
+        CFLAGS=$XORG_CFLAGS
+        CPPFLAGS="$XORG_CFLAGS"
+        AC_CHECK_HEADERS([xaa.h], XAA=yes, XAA=no)
+        CFLAGS=$save_CFLAGS
+        CPPFLAGS=$save_CPPFLAGS
+fi
+AC_MSG_CHECKING([whether to include XAA support])
+AM_CONDITIONAL(XAA, test "x$XAA" = xyes)
+AC_MSG_RESULT([$XAA])
+
 save_CFLAGS="$CFLAGS"
 CFLAGS="$XORG_CFLAGS"
 AC_CHECK_DECL(XSERVER_LIBPCIACCESS,
diff --git a/src/savage_dga.c b/src/savage_dga.c
index cb541d3..413e0e7 100644
--- a/src/savage_dga.c
+++ b/src/savage_dga.c
@@ -34,8 +34,9 @@ in this Software without prior written authorization from the XFree86 Project.
  *
  */
 
-
+#ifdef HAVE_XAA_H
 #include "xaalocal.h"
+#endif
 #include "savage_driver.h"
 #include "dgaproc.h"
 
@@ -46,9 +47,10 @@ static Bool Savage_OpenFramebuffer(ScrnInfoPtr, char **, unsigned char **,
 static Bool Savage_SetMode(ScrnInfoPtr, DGAModePtr);
 static int  Savage_GetViewport(ScrnInfoPtr);
 static void Savage_SetViewport(ScrnInfoPtr, int, int, int);
+#ifdef HAVE_XAA_H
 static void Savage_FillRect(ScrnInfoPtr, int, int, int, int, unsigned long);
 static void Savage_BlitRect(ScrnInfoPtr, int, int, int, int, int, int);
-
+#endif
 
 static
 DGAFunctionRec Savage_DGAFuncs = {
@@ -58,8 +60,12 @@ DGAFunctionRec Savage_DGAFuncs = {
     Savage_SetViewport,
     Savage_GetViewport,
     SavageAccelSync,
+#ifdef HAVE_XAA_H
     Savage_FillRect,
     Savage_BlitRect,
+#else
+    NULL, NULL,
+#endif
     NULL			 /* BlitTransRect */
 };
 
@@ -127,8 +133,10 @@ SECOND_PASS:
 
 	mode->mode = pMode;
 	mode->flags = DGA_CONCURRENT_ACCESS | DGA_PIXMAP_AVAILABLE;
+#ifdef HAVE_XAA_H
 	if(!psav->NoAccel)
 	    mode->flags |= DGA_FILL_RECT | DGA_BLIT_RECT;
+#endif
 	if(pMode->Flags & V_DBLSCAN)
 	    mode->flags |= DGA_DOUBLESCAN;
 	if(pMode->Flags & V_INTERLACE)
@@ -341,6 +349,7 @@ Savage_SetViewport(
     psav->DGAViewportStatus = 0;  /* MGAAdjustFrame loops until finished */
 }
 
+#ifdef HAVE_XAA_H
 static void 
 Savage_FillRect (
     ScrnInfoPtr pScrn, 
@@ -376,7 +385,7 @@ Savage_BlitRect(
     SET_SYNC_FLAG(psav->AccelInfoRec);
     }
 }
-
+#endif
 
 static Bool 
 Savage_OpenFramebuffer(
diff --git a/src/savage_dri.c b/src/savage_dri.c
index 7b5d2b1..bdb78e4 100644
--- a/src/savage_dri.c
+++ b/src/savage_dri.c
@@ -31,8 +31,10 @@
 #include "xf86.h"
 #include "xf86_OSproc.h"
 
+#ifdef HAVE_XAA_H
 #include "xaalocal.h"
 #include "xaarop.h"
+#endif
 
 #include "xf86Pci.h"
 #include "xf86fbman.h"
@@ -287,8 +289,10 @@ static void SAVAGEWakeupHandler(WAKEUPHANDLER_ARGS_DECL)
    }
    if (psav->useEXA)
 	exaMarkSync(pScreen);
+#ifdef HAVE_XAA_H
    else
 	psav->AccelInfoRec->NeedToSync = TRUE;
+#endif
    /* FK: this flag doesn't seem to be used. */
 }
 
@@ -1535,8 +1539,10 @@ SAVAGEDRIMoveBuffers(WindowPtr pParent, DDXPointRec ptOldOrg,
     BCI_SEND(0xc0020000); /* wait for 2D idle */
     if (psav->useEXA)
 	exaMarkSync(pScreen);
+#ifdef HAVE_XAA_H
     else
 	psav->AccelInfoRec->NeedToSync = TRUE;
+#endif
 }
 
 /* Definition in savage_accel.c */
diff --git a/src/savage_driver.c b/src/savage_driver.c
index 1083d65..026bf5c 100644
--- a/src/savage_driver.c
+++ b/src/savage_driver.c
@@ -3987,10 +3987,12 @@ static Bool SavageCloseScreen(CLOSE_SCREEN_ARGS_DECL)
 	psav->EXADriverPtr = NULL;
     }
 
+#ifdef HAVE_XAA_H
     if( psav->AccelInfoRec ) {
         XAADestroyInfoRec( psav->AccelInfoRec );
 	psav->AccelInfoRec = NULL;
     }
+#endif
 
     if( psav->DGAModes ) {
 	free( psav->DGAModes );
diff --git a/src/savage_driver.h b/src/savage_driver.h
index d51b2a1..b604292 100644
--- a/src/savage_driver.h
+++ b/src/savage_driver.h
@@ -63,7 +63,10 @@
 #include "fboverlay.h"
 #include "xf86cmap.h"
 #include "vbe.h"
+#ifdef HAVE_XAA_H
 #include "xaa.h"
+#endif
+#include "xf86fbman.h"
 #include "exa.h"
 #include "xf86xv.h"
 
@@ -421,7 +424,9 @@ typedef struct _Savage {
     unsigned long	sbd_high;
 
     /* Support for XAA acceleration */
+#ifdef HAVE_XAA_H
     XAAInfoRecPtr	AccelInfoRec;
+#endif
     xRectangle		Rect;
     unsigned int	SavedBciCmd;
     unsigned int	SavedFgColor;
diff --git a/src/savage_hwmc.c b/src/savage_hwmc.c
index 2dea4df..d1e5553 100644
--- a/src/savage_hwmc.c
+++ b/src/savage_hwmc.c
@@ -40,8 +40,9 @@
 #include "xf86xvmc.h"
 #include <X11/extensions/Xv.h>
 #include <X11/extensions/XvMC.h>
-#include "xaa.h"
+#ifdef HAVE_XAA_H
 #include "xaalocal.h"
+#endif
 #include "dixstruct.h"
 #include "fourcc.h"
 
diff --git a/src/savage_xaa.c b/src/savage_xaa.c
index e4d661b..858cb97 100644
--- a/src/savage_xaa.c
+++ b/src/savage_xaa.c
@@ -14,10 +14,13 @@
 #endif
 
 #include <X11/Xarch.h>
+#include "savage_driver.h"
+#ifdef HAVE_XAA_H
 #include "xaalocal.h"
 #include "xaarop.h"
+
 #include "miline.h"
-#include "savage_driver.h"
+
 #include "savage_bci.h"
 
 extern int gSavageEntityIndex;
@@ -146,11 +149,12 @@ void SavageRestoreAccelState(ScrnInfoPtr pScrn)
 
     return;
 }
-
+#endif
 
 Bool 
 SavageXAAInit(ScreenPtr pScreen)
 {
+#ifdef HAVE_XAA_H
     ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     SavagePtr psav = SAVPTR(pScrn);
     XAAInfoRecPtr xaaptr;
@@ -344,7 +348,9 @@ SavageXAAInit(ScreenPtr pScreen)
 
 
     return XAAInit(pScreen, xaaptr);
-
+#else
+    return FALSE;
+#endif
 }
 
 /* The sync function for the GE */
@@ -355,7 +361,7 @@ SavageAccelSync(ScrnInfoPtr pScrn)
     psav->WaitIdleEmpty(psav);
 }
 
-
+#ifdef HAVE_XAA_H
 /*
  * The XAA ROP helper routines all assume that a solid color is a 
  * "pattern".  The Savage chips, however, apply a non-stippled solid
@@ -1020,3 +1026,4 @@ void SavageSubsequentImageWriteRect
     BCI_SEND(BCI_W_H(w, h));
 }
 
+#endif

commit 508e0742b7d1ac1e4ff6b648d19bfa062c535d61
Author: Dave Airlie <airlied@redhat.com>
Date:   Mon Jul 2 12:29:41 2012 +0100

    savage: bump to 2.3.5
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/configure.ac b/configure.ac
index d82af14..ca60e76 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
 # Initialize Autoconf
 AC_PREREQ([2.60])
 AC_INIT([xf86-video-savage],
-        [2.3.4],
+        [2.3.5],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         [xf86-video-savage])
 AC_CONFIG_SRCDIR([Makefile.am])

commit 430b956b49b6c883189074ce13bc234545b714e0
Author: Dave Airlie <airlied@redhat.com>
Date:   Wed Jun 6 11:24:31 2012 +0100

    savage: i2c drop xf86Screens usage.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/src/savage_i2c.c b/src/savage_i2c.c
index b5739a2..a37fc7f 100644
--- a/src/savage_i2c.c
+++ b/src/savage_i2c.c
@@ -37,7 +37,11 @@ in this Software without prior written authorization from the XFree86 Project.
 static void
 SavageI2CPutBits(I2CBusPtr b, int clock,  int data)
 {
+#ifdef XF86_SCRN_INTERFACE
+    ScrnInfoPtr pScrn = b->pScrn;
+#else
     ScrnInfoPtr pScrn = (ScrnInfoPtr)(xf86Screens[b->scrnIndex]);
+#endif
     SavagePtr psav = SAVPTR(pScrn);
     unsigned char reg = 0x10;
 
@@ -51,7 +55,11 @@ SavageI2CPutBits(I2CBusPtr b, int clock,  int data)
 static void
 SavageI2CGetBits(I2CBusPtr b, int *clock, int *data)
 {
+#ifdef XF86_SCRN_INTERFACE
+    ScrnInfoPtr pScrn = b->pScrn;
+#else
     ScrnInfoPtr pScrn = (ScrnInfoPtr)(xf86Screens[b->scrnIndex]);
+#endif
     SavagePtr psav = SAVPTR(pScrn);
     unsigned char reg = 0x10;
 
@@ -76,6 +84,9 @@ SavageI2CInit(ScrnInfoPtr pScrn)
 
     I2CPtr->BusName    = "I2C bus";
     I2CPtr->scrnIndex  = pScrn->scrnIndex;
+#ifdef XF86_SCRN_INTERFACE
+    I2CPtr->pScrn  = pScrn;
+#endif
     I2CPtr->I2CPutBits = SavageI2CPutBits;
     I2CPtr->I2CGetBits = SavageI2CGetBits;
 

commit a2714fb09e1e0badbb3e98e24d4b1ed92003bdb9
Author: Dave Airlie <airlied@redhat.com>
Date:   Wed Jun 6 11:22:29 2012 +0100

    savage: port to new compat API
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/src/Makefile.am b/src/Makefile.am
index e980c1a..52fdf9e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -29,6 +29,7 @@ savage_drv_la_LDFLAGS = -module -avoid-version
 savage_drv_ladir = @moduledir@/drivers
 
 savage_drv_la_SOURCES = \
+         compat-api.h \
          savage_accel.c \
 	 savage_xaa.c \
 	 savage_exa.c \
diff --git a/src/compat-api.h b/src/compat-api.h
new file mode 100644
index 0000000..98ba435
--- /dev/null
+++ b/src/compat-api.h
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2012 Red Hat, Inc.
+ *
+ * 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
+ * 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 NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS 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.
+ *
+ * Author: Dave Airlie <airlied@redhat.com>
+ */
+
+/* this file provides API compat between server post 1.13 and pre it,
+   it should be reused inside as many drivers as possible */
+#ifndef COMPAT_API_H
+#define COMPAT_API_H
+
+#ifndef GLYPH_HAS_GLYPH_PICTURE_ACCESSOR
+#define GetGlyphPicture(g, s) GlyphPicture((g))[(s)->myNum]
+#define SetGlyphPicture(g, s, p) GlyphPicture((g))[(s)->myNum] = p
+#endif
+
+#ifndef XF86_HAS_SCRN_CONV
+#define xf86ScreenToScrn(s) xf86Screens[(s)->myNum]
+#define xf86ScrnToScreen(s) screenInfo.screens[(s)->scrnIndex]
+#endif
+
+#ifndef XF86_SCRN_INTERFACE
+
+#define SCRN_ARG_TYPE int
+#define SCRN_INFO_PTR(arg1) ScrnInfoPtr pScrn = xf86Screens[(arg1)]
+
+#define SCREEN_ARG_TYPE int
+#define SCREEN_PTR(arg1) ScreenPtr pScreen = screenInfo.screens[(arg1)]
+
+#define SCREEN_INIT_ARGS_DECL int i, ScreenPtr pScreen, int argc, char **argv
+
+#define BLOCKHANDLER_ARGS_DECL int arg, pointer blockData, pointer pTimeout, pointer pReadmask
+#define BLOCKHANDLER_ARGS arg, blockData, pTimeout, pReadmask
+
+#define WAKEUPHANDLER_ARGS_DECL int arg, pointer wakeupData, unsigned long result, pointer read_mask
+#define WAKEUPHANDLER_ARGS arg, wakeupData, result, read_mask
+
+#define CLOSE_SCREEN_ARGS_DECL int scrnIndex, ScreenPtr pScreen
+#define CLOSE_SCREEN_ARGS scrnIndex, pScreen
+
+#define ADJUST_FRAME_ARGS_DECL int arg, int x, int y, int flags
+#define ADJUST_FRAME_ARGS(arg, x, y) (arg)->scrnIndex, x, y, 0
+
+#define SWITCH_MODE_ARGS_DECL int arg, DisplayModePtr mode, int flags
+#define SWITCH_MODE_ARGS(arg, m) (arg)->scrnIndex, m, 0
+
+#define FREE_SCREEN_ARGS_DECL int arg, int flags
+
+#define VT_FUNC_ARGS_DECL int arg, int flags
+#define VT_FUNC_ARGS pScrn->scrnIndex, 0
+
+#define XF86_SCRN_ARG(x) ((x)->scrnIndex)
+#else
+#define SCRN_ARG_TYPE ScrnInfoPtr
+#define SCRN_INFO_PTR(arg1) ScrnInfoPtr pScrn = (arg1)
+
+#define SCREEN_ARG_TYPE ScreenPtr
+#define SCREEN_PTR(arg1) ScreenPtr pScreen = (arg1)
+
+#define SCREEN_INIT_ARGS_DECL ScreenPtr pScreen, int argc, char **argv
+
+#define BLOCKHANDLER_ARGS_DECL ScreenPtr arg, pointer pTimeout, pointer pReadmask
+#define BLOCKHANDLER_ARGS arg, pTimeout, pReadmask
+
+#define WAKEUPHANDLER_ARGS_DECL ScreenPtr arg, unsigned long result, pointer read_mask
+#define WAKEUPHANDLER_ARGS arg, result, read_mask
+
+#define CLOSE_SCREEN_ARGS_DECL ScreenPtr pScreen
+#define CLOSE_SCREEN_ARGS pScreen
+
+#define ADJUST_FRAME_ARGS_DECL ScrnInfoPtr arg, int x, int y
+#define ADJUST_FRAME_ARGS(arg, x, y) arg, x, y
+
+#define SWITCH_MODE_ARGS_DECL ScrnInfoPtr arg, DisplayModePtr mode
+#define SWITCH_MODE_ARGS(arg, m) arg, m
+
+#define FREE_SCREEN_ARGS_DECL ScrnInfoPtr arg
+
+#define VT_FUNC_ARGS_DECL ScrnInfoPtr arg
+#define VT_FUNC_ARGS pScrn
+
+#define XF86_SCRN_ARG(x) (x)
+
+#endif
+
+#endif
diff --git a/src/savage_accel.c b/src/savage_accel.c
index 0920e22..1bcb5fa 100644
--- a/src/savage_accel.c
+++ b/src/savage_accel.c
@@ -1274,7 +1274,7 @@ void SavageRestoreAccelState(ScrnInfoPtr pScrn)
 Bool 
 SavageInitAccel(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     SavagePtr psav = SAVPTR(pScrn);
 
 #ifdef SAVAGEDRI
diff --git a/src/savage_cursor.c b/src/savage_cursor.c
index 6364293..3506f3a 100644
--- a/src/savage_cursor.c
+++ b/src/savage_cursor.c
@@ -83,7 +83,7 @@ static void SavageSetCursorColors(ScrnInfoPtr pScrn, int bg, int fg);
 static Bool
 SavageUseHWCursor(ScreenPtr pScr, CursorPtr pCurs)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScr->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScr);
     SavagePtr psav = SAVPTR(pScrn);
 
     if (psav->PanelX != pScrn->currentMode->HDisplay 
@@ -100,7 +100,7 @@ SavageUseHWCursor(ScreenPtr pScr, CursorPtr pCurs)
 Bool 
 SavageHWCursorInit(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     SavagePtr psav = SAVPTR(pScrn);
     xf86CursorInfoPtr infoPtr;
 
diff --git a/src/savage_dga.c b/src/savage_dga.c
index 1c4d884..cb541d3 100644
--- a/src/savage_dga.c
+++ b/src/savage_dga.c
@@ -202,7 +202,7 @@ SECOND_PASS:
 Bool
 SavageDGAInit(ScreenPtr pScreen)
 {   
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     SavagePtr psav = SAVPTR(pScrn);
     DGAModePtr modes = NULL;
     int num = 0;
@@ -276,7 +276,7 @@ Savage_SetMode(
 	pScrn->currentMode = OldMode[index];
 
 	psav->DGAactive = FALSE;
-	SavageSwitchMode(index, pScrn->currentMode, 0);
+	SavageSwitchMode(SWITCH_MODE_ARGS(pScrn, pScrn->currentMode));
 	if( psav->hwcursor && psav->hwc_on )
 	    SavageShowCursor(pScrn);
     } else {
@@ -312,7 +312,7 @@ Savage_SetMode(
 	    (pMode->bitsPerPixel >> 3);
 
 /*	psav->UseBIOS = FALSE; */
-	SavageSwitchMode(index, pMode->mode, 0);
+	SavageSwitchMode(SWITCH_MODE_ARGS(pScrn, pMode->mode));
 	psav->UseBIOS = holdBIOS;
     }
 
@@ -337,7 +337,7 @@ Savage_SetViewport(
 ){
     SavagePtr psav = SAVPTR(pScrn);
 
-    SavageAdjustFrame(pScrn->pScreen->myNum, x, y, flags);
+    SavageAdjustFrame(ADJUST_FRAME_ARGS(pScrn, x, y));
     psav->DGAViewportStatus = 0;  /* MGAAdjustFrame loops until finished */
 }
 
diff --git a/src/savage_dri.c b/src/savage_dri.c
index 38d2a86..7b5d2b1 100644
--- a/src/savage_dri.c
+++ b/src/savage_dri.c
@@ -104,7 +104,7 @@ SAVAGEDRISubsequentScreenToScreenCopy(
  */
 static Bool SAVAGEInitVisualConfigs( ScreenPtr pScreen )
 {
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    SavagePtr psav = SAVPTR(pScrn);
    int numConfigs = 0;
    __GLXvisualConfig *pConfigs = 0;
@@ -243,7 +243,7 @@ static Bool SAVAGECreateContext( ScreenPtr pScreen, VisualPtr visual,
 			      drm_context_t hwContext, void *pVisualConfigPriv,
 			      DRIContextType contextStore )
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     SavagePtr psav = SAVPTR(pScrn);
 
     if(psav->xvmcContext)
@@ -259,21 +259,20 @@ static Bool SAVAGECreateContext( ScreenPtr pScreen, VisualPtr visual,
 static void SAVAGEDestroyContext( ScreenPtr pScreen, drm_context_t hwContext,
 			       DRIContextType contextStore )
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     SavagePtr psav = SAVPTR(pScrn);
 
     psav->DRIrunning--;
 }
 
-static void SAVAGEWakeupHandler( int screenNum, pointer wakeupData,
-				 unsigned long result, pointer pReadmask )
+static void SAVAGEWakeupHandler(WAKEUPHANDLER_ARGS_DECL)
 {
-   ScreenPtr pScreen = screenInfo.screens[screenNum];
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   SCREEN_PTR(arg);
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    SavagePtr psav = SAVPTR(pScrn);
 
    psav->pDRIInfo->wrap.WakeupHandler = psav->coreWakeupHandler;
-   (*psav->pDRIInfo->wrap.WakeupHandler) (screenNum, wakeupData, result, pReadmask);
+   (*psav->pDRIInfo->wrap.WakeupHandler) (WAKEUPHANDLER_ARGS);
    psav->pDRIInfo->wrap.WakeupHandler = SAVAGEWakeupHandler;
    psav->LockHeld = 1;
    if (psav->ShadowStatus) {
@@ -293,11 +292,10 @@ static void SAVAGEWakeupHandler( int screenNum, pointer wakeupData,
    /* FK: this flag doesn't seem to be used. */
 }
 
-static void SAVAGEBlockHandler( int screenNum, pointer blockData,
-				pointer pTimeout, pointer pReadmask)
+static void SAVAGEBlockHandler(BLOCKHANDLER_ARGS_DECL)
 {
-   ScreenPtr pScreen = screenInfo.screens[screenNum];
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   SCREEN_PTR(arg);
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    SavagePtr psav = SAVPTR(pScrn);
 
    if (psav->ShadowStatus) {
@@ -316,7 +314,7 @@ static void SAVAGEBlockHandler( int screenNum, pointer blockData,
    }
    psav->LockHeld = 0;
    psav->pDRIInfo->wrap.BlockHandler = psav->coreBlockHandler;
-   (*psav->pDRIInfo->wrap.BlockHandler) (screenNum, blockData, pTimeout, pReadmask);
+   (*psav->pDRIInfo->wrap.BlockHandler) (BLOCKHANDLER_ARGS);
    psav->pDRIInfo->wrap.BlockHandler = SAVAGEBlockHandler;
 }
 
@@ -395,7 +393,7 @@ static Bool SAVAGESetAgpMode(SavagePtr psav, ScreenPtr pScreen)
 
 static Bool SAVAGEDRIAgpInit(ScreenPtr pScreen)
 {
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    SavagePtr psav = SAVPTR(pScrn);
    SAVAGEDRIServerPrivatePtr pSAVAGEDRIServer = psav->DRIServerInfo;
    unsigned int offset;
@@ -586,7 +584,7 @@ static Bool SAVAGEDRIAgpInit(ScreenPtr pScreen)
 
 static Bool SAVAGEDRIMapInit( ScreenPtr pScreen )
 {
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    SavagePtr psav = SAVPTR(pScrn);
    SAVAGEDRIServerPrivatePtr pSAVAGEDRIServer = psav->DRIServerInfo;
 
@@ -688,7 +686,7 @@ static Bool SAVAGEDRIMapInit( ScreenPtr pScreen )
 
 static Bool SAVAGEDRIBuffersInit( ScreenPtr pScreen )
 {
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    SavagePtr psav = SAVPTR(pScrn);
    SAVAGEDRIServerPrivatePtr pSAVAGEDRIServer = psav->DRIServerInfo;
    int count;
@@ -736,7 +734,7 @@ static Bool SAVAGEDRIBuffersInit( ScreenPtr pScreen )
 
 static Bool SAVAGEDRIKernelInit( ScreenPtr pScreen )
 {
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    SavagePtr psav = SAVPTR(pScrn);
    SAVAGEDRIServerPrivatePtr pSAVAGEDRIServer = psav->DRIServerInfo;
    drmSAVAGEInit init;
@@ -791,7 +789,7 @@ static Bool SAVAGEDRIKernelInit( ScreenPtr pScreen )
 
 Bool SAVAGEDRIScreenInit( ScreenPtr pScreen )
 {
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    SavagePtr psav = SAVPTR(pScrn);
    DRIInfoPtr pDRIInfo;
    SAVAGEDRIPtr pSAVAGEDRI;
@@ -1069,7 +1067,7 @@ static void SAVAGEDRISetupTiledSurfaceRegs( SavagePtr psav )
 
 Bool SAVAGEDRIFinishScreenInit( ScreenPtr pScreen )
 {
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    SavagePtr psav = SAVPTR(pScrn);
    SAVAGEDRIServerPrivatePtr pSAVAGEDRIServer = psav->DRIServerInfo;
    SAVAGEDRIPtr pSAVAGEDRI = (SAVAGEDRIPtr)psav->pDRIInfo->devPrivate;
@@ -1234,7 +1232,7 @@ Bool SAVAGEDRIFinishScreenInit( ScreenPtr pScreen )
 
 void SAVAGEDRIResume(ScreenPtr pScreen)
 {
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    SavagePtr psav = SAVPTR(pScrn);
    SAVAGESAREAPrivPtr pSAREAPriv =
 			(SAVAGESAREAPrivPtr)DRIGetSAREAPrivate(pScreen);
@@ -1250,7 +1248,7 @@ void SAVAGEDRIResume(ScreenPtr pScreen)
 
 void SAVAGEDRICloseScreen( ScreenPtr pScreen )
 {
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    SavagePtr psav = SAVPTR(pScrn);
    SAVAGEDRIServerPrivatePtr pSAVAGEDRIServer = psav->DRIServerInfo;
 
@@ -1346,7 +1344,7 @@ void
 SAVAGEDRIInitBuffers(WindowPtr pWin, RegionPtr prgn, CARD32 index)
 {
     ScreenPtr pScreen = pWin->drawable.pScreen;
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     SavagePtr psav = SAVPTR(pScrn);
     BoxPtr pbox = REGION_RECTS(prgn);
     int nbox  = REGION_NUM_RECTS(prgn);
@@ -1396,7 +1394,7 @@ SAVAGEDRIMoveBuffers(WindowPtr pParent, DDXPointRec ptOldOrg,
 		   RegionPtr prgnSrc, CARD32 index)
 {
     ScreenPtr pScreen = pParent->drawable.pScreen;
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     SavagePtr psav = SAVPTR(pScrn);
     int nbox;
     BoxPtr pbox, pboxTmp, pboxNext, pboxBase, pboxNew1, pboxNew2;
@@ -1613,7 +1611,7 @@ SAVAGEDRISubsequentScreenToScreenCopy(
 static Bool
 SAVAGEDRIOpenFullScreen(ScreenPtr pScreen)
 {
-  ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+  ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
   vgaHWPtr hwp = VGAHWPTR(pScrn);
   SavagePtr psav = SAVPTR(pScrn);
   unsigned int vgaCRIndex = hwp->IOBase + 4;
@@ -1678,7 +1676,7 @@ SAVAGEDRIOpenFullScreen(ScreenPtr pScreen)
 static Bool
 SAVAGEDRICloseFullScreen(ScreenPtr pScreen)
 {
-  ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+  ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
   SavagePtr psav = SAVPTR(pScrn);
   BCI_GET_PTR;
 
diff --git a/src/savage_driver.c b/src/savage_driver.c
index 5e4ca0e..1083d65 100644
--- a/src/savage_driver.c
+++ b/src/savage_driver.c
@@ -73,7 +73,6 @@
 #include "savage_sarea.h"
 #endif
 
-
 /*
  * prototypes
  */
@@ -91,25 +90,24 @@ static int LookupChipID(PciChipsets* pset, int ChipID);
 #endif
 static Bool SavagePreInit(ScrnInfoPtr pScrn, int flags);
 
-static Bool SavageEnterVT(int scrnIndex, int flags);
-static void SavageLeaveVT(int scrnIndex, int flags);
+static Bool SavageEnterVT(VT_FUNC_ARGS_DECL);
+static void SavageLeaveVT(VT_FUNC_ARGS_DECL);
 static void SavageSave(ScrnInfoPtr pScrn);
 static void SavageWriteMode(ScrnInfoPtr pScrn, vgaRegPtr, SavageRegPtr, Bool);
 
 static void SavageInitStatus(ScrnInfoPtr pScrn);
 static void SavageInitShadowStatus(ScrnInfoPtr pScrn);
 
-static Bool SavageScreenInit(int scrnIndex, ScreenPtr pScreen, int argc,
-			     char **argv);
-static int SavageInternalScreenInit(int scrnIndex, ScreenPtr pScreen);
-static ModeStatus SavageValidMode(int index, DisplayModePtr mode,
+static Bool SavageScreenInit(SCREEN_INIT_ARGS_DECL);
+static int SavageInternalScreenInit(ScreenPtr pScreen);
+static ModeStatus SavageValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode,
 				  Bool verbose, int flags);
 
 void SavageDGAInit(ScreenPtr);
 static Bool SavageMapMem(ScrnInfoPtr pScrn);
 static void SavageUnmapMem(ScrnInfoPtr pScrn, int All);
 static Bool SavageModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode);
-static Bool SavageCloseScreen(int scrnIndex, ScreenPtr pScreen);
+static Bool SavageCloseScreen(CLOSE_SCREEN_ARGS_DECL);
 static Bool SavageSaveScreen(ScreenPtr pScreen, int mode);
 static void SavageLoadPalette(ScrnInfoPtr pScrn, int numColors,
 			      int *indicies, LOCO *colors,
@@ -125,7 +123,7 @@ static void SavageCalcClock(long freq, int min_m, int min_n1, int max_n1,
 void SavageGEReset(ScrnInfoPtr pScrn, int from_timeout, int line, char *file);
 void SavagePrintRegs(ScrnInfoPtr pScrn);
 static void SavageDPMS(ScrnInfoPtr pScrn, int mode, int flags);
-static Bool SavageDDC1(int scrnIndex);
+static Bool SavageDDC1(ScrnInfoPtr pScrn);
 static unsigned int SavageDDC1Read(ScrnInfoPtr pScrn);
 static void SavageProbeDDC(ScrnInfoPtr pScrn, int index);
 static void SavageGetTvMaxSize(SavagePtr psav);
@@ -899,7 +897,7 @@ static void SavageDoDDC(ScrnInfoPtr pScrn)
                 break;
         }
 
-        if (!SavageDDC1(pScrn->scrnIndex)) {
+        if (!SavageDDC1(pScrn)) {
             /* DDC1 failed,switch to DDC2 */
             if (xf86LoadSubModule(pScrn, "i2c")) {
                 if (SavageI2CInit(pScrn)) {
@@ -908,7 +906,7 @@ static void SavageDoDDC(ScrnInfoPtr pScrn)
                     
                     InI2CREG(tmp,psav->DDCPort);
                     OutI2CREG(tmp | 0x13,psav->DDCPort);
-                    pMon = xf86PrintEDID(xf86DoEDID_DDC2(pScrn->scrnIndex,psav->I2C));
+                    pMon = xf86PrintEDID(xf86DoEDID_DDC2(XF86_SCRN_ARG(pScrn),psav->I2C));
                     if (!psav->IgnoreEDID) xf86SetDDCproperties(pScrn, pMon);
                     OutI2CREG(tmp,psav->DDCPort);
                 }
@@ -2198,22 +2196,20 @@ static Bool SavagePreInit(ScrnInfoPtr pScrn, int flags)
 }
 
 
-static Bool SavageEnterVT(int scrnIndex, int flags)
+static Bool SavageEnterVT(VT_FUNC_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
 #ifdef SAVAGEDRI
     SavagePtr psav = SAVPTR(pScrn);
     ScreenPtr pScreen;
 #endif
 
-    TRACE(("SavageEnterVT(%d)\n", flags));
-
     gpScrn = pScrn;
     SavageEnableMMIO(pScrn);
 
 #ifdef SAVAGEDRI
     if (psav->directRenderingEnabled) {
-        pScreen = screenInfo.screens[scrnIndex];
+        pScreen = xf86ScrnToScreen(pScrn);
         SAVAGEDRIResume(pScreen);
         DRIUnlock(pScreen);
         psav->LockHeld = 0;
@@ -2232,9 +2228,9 @@ static Bool SavageEnterVT(int scrnIndex, int flags)
 }
 
 
-static void SavageLeaveVT(int scrnIndex, int flags)
+static void SavageLeaveVT(VT_FUNC_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     vgaHWPtr hwp = VGAHWPTR(pScrn);
     SavagePtr psav = SAVPTR(pScrn);
     vgaRegPtr vgaSavePtr = &hwp->SavedReg;
@@ -2248,7 +2244,7 @@ static void SavageLeaveVT(int scrnIndex, int flags)
 
 #ifdef SAVAGEDRI
     if (psav->directRenderingEnabled) {
-        pScreen = screenInfo.screens[scrnIndex];
+        pScreen = xf86ScrnToScreen(pScrn);
         DRILock(pScreen, 0);
         psav->LockHeld = 1;
     }
@@ -2461,7 +2457,7 @@ static void SavageWriteMode(ScrnInfoPtr pScrn, vgaRegPtr vgaSavePtr,
 
 #ifdef SAVAGEDRI
     if (psav->directRenderingEnabled) {
-        DRILock(screenInfo.screens[pScrn->scrnIndex], 0);
+        DRILock(xf86ScrnToScreen(pScrn), 0);
         psav->LockHeld = 1;
     }
 #endif
@@ -2654,7 +2650,7 @@ static void SavageWriteMode(ScrnInfoPtr pScrn, vgaRegPtr vgaSavePtr,
 
 #ifdef SAVAGEDRI
     	if (psav->directRenderingEnabled)
-    	    DRIUnlock(screenInfo.screens[pScrn->scrnIndex]);
+    	    DRIUnlock(xf86ScrnToScreen(pScrn));
     	psav->LockHeld = 0;
 #endif
 
@@ -2910,7 +2906,7 @@ static void SavageWriteMode(ScrnInfoPtr pScrn, vgaRegPtr vgaSavePtr,
 
 #ifdef SAVAGEDRI
     if (psav->directRenderingEnabled)
-        DRIUnlock(screenInfo.screens[pScrn->scrnIndex]);
+        DRIUnlock(xf86ScrnToScreen(pScrn));
     psav->LockHeld = 0;
 #endif
 
@@ -3215,10 +3211,9 @@ static void SavageInitShadowStatus(ScrnInfoPtr pScrn)
 	psav->dwBCIWait2DIdle = 0xc0020000;
 }
 
-static Bool SavageScreenInit(int scrnIndex, ScreenPtr pScreen,
-			     int argc, char **argv)
+static Bool SavageScreenInit(SCREEN_INIT_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn;
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     SavagePtr psav;
     EntityInfoPtr pEnt;
     int ret;
@@ -3226,7 +3221,6 @@ static Bool SavageScreenInit(int scrnIndex, ScreenPtr pScreen,
 
     TRACE(("SavageScreenInit()\n"));
 
-    pScrn = xf86Screens[pScreen->myNum];
     psav = SAVPTR(pScrn);
 
     pEnt = xf86GetEntityInfo(pScrn->entityList[0]); 
@@ -3268,16 +3262,16 @@ static Bool SavageScreenInit(int scrnIndex, ScreenPtr pScreen,
     } else if (xf86IsEntityShared(psav->pEnt->index)) {
 	    /* Xinerama has sync problem with DRI, disable it for now */
 	    psav->directRenderingEnabled = FALSE;
-	    xf86DrvMsg(scrnIndex, X_WARNING,
+	    xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
 			"Direct Rendering Disabled -- "
 			"Dual-head configuration is not working with "
 			"DRI at present.\n");
     } else if (/*!psav->bTiled*/psav->bDisableTile) {
-            xf86DrvMsg(scrnIndex, X_WARNING, 
+            xf86DrvMsg(pScrn->scrnIndex, X_WARNING, 
 	    		"Direct Rendering requires a tiled framebuffer -- "
 			"Set Option \"DisableTile\" \"false\"\n");
     } else if (psav->cobSize == 0) {
-            xf86DrvMsg(scrnIndex, X_WARNING, 
+            xf86DrvMsg(pScrn->scrnIndex, X_WARNING, 
 	    		"Direct Rendering requires the COB -- "
 			"Set Option \"DisableCOB\" \"false\"\n");
     } else if (((psav->Chipset == S3_TWISTER)
@@ -3342,7 +3336,7 @@ static Bool SavageScreenInit(int scrnIndex, ScreenPtr pScreen,
      if (!miSetPixmapDepths ())
 	 return FALSE;
 
-    ret = SavageInternalScreenInit(scrnIndex, pScreen);
+    ret = SavageInternalScreenInit(pScreen);
     if (!ret)
 	return FALSE;
 
@@ -3524,7 +3518,7 @@ static Bool SavageScreenInit(int scrnIndex, ScreenPtr pScreen,
 }
 
 
-static int SavageInternalScreenInit(int scrnIndex, ScreenPtr pScreen)
+static int SavageInternalScreenInit(ScreenPtr pScreen)
 {
     int ret = TRUE;
     ScrnInfoPtr pScrn;
@@ -3534,7 +3528,7 @@ static int SavageInternalScreenInit(int scrnIndex, ScreenPtr pScreen)
 
     TRACE(("SavageInternalScreenInit()\n"));
 
-    pScrn = xf86Screens[pScreen->myNum];
+    pScrn = xf86ScreenToScrn(pScreen);
     psav = SAVPTR(pScrn);
 
     displayWidth = pScrn->displayWidth;
@@ -3609,10 +3603,10 @@ static int SavageGetRefresh(DisplayModePtr mode)
 }
 
 
-static ModeStatus SavageValidMode(int index, DisplayModePtr pMode,
+static ModeStatus SavageValidMode(SCRN_ARG_TYPE arg, DisplayModePtr pMode,
 				  Bool verbose, int flags)
 {
-    ScrnInfoPtr pScrn = xf86Screens[index];
+    SCRN_INFO_PTR(arg);
     SavagePtr psav = SAVPTR(pScrn);
     int refresh;
 
@@ -3701,7 +3695,7 @@ static Bool SavageModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
 	    SavageInitSecondaryStream(pScrn);
         }
 
-        SavageAdjustFrame(pScrn->scrnIndex, pScrn->frameX0, pScrn->frameY0, 0);
+        SavageAdjustFrame(ADJUST_FRAME_ARGS(pScrn, pScrn->frameX0, pScrn->frameY0));
 	return TRUE;


Reply to: