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

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



 COPYING             |  143 +++++++++++++++++++-
 Makefile.am         |    6 
 README              |  110 +++++++--------
 README.sgml         |  235 ---------------------------------
 configure.ac        |   73 +++++-----
 man/Makefile.am     |   34 ----
 man/sis.man         |   28 ---
 src/Makefile.am     |    1 
 src/compat-api.h    |   99 ++++++++++++++
 src/init.c          |    1 
 src/initextx.c      |   18 +-
 src/osdef.h         |   24 +--
 src/sis.h           |   71 ++++++++--
 src/sis300_accel.c  |   12 -
 src/sis310_accel.c  |   26 +--
 src/sis6326_video.c |   10 -
 src/sis_accel.c     |   12 -
 src/sis_cursor.c    |    8 -
 src/sis_dac.c       |    8 -
 src/sis_dac.h       |    4 
 src/sis_dga.c       |   18 +-
 src/sis_dri.c       |   38 ++---
 src/sis_driver.c    |  367 +++++++++++++++++++++++++++++-----------------------
 src/sis_driver.h    |   22 +--
 src/sis_memcpy.c    |   12 -
 src/sis_opt.c       |   18 +-
 src/sis_shadow.c    |   22 +--
 src/sis_utility.c   |   64 ++++-----
 src/sis_vga.c       |   21 ++
 src/sis_video.c     |   20 +-
 src/sispcirename.h  |   29 ++++
 src/vgatypes.h      |   12 -
 32 files changed, 820 insertions(+), 746 deletions(-)

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

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

diff --git a/configure.ac b/configure.ac
index e043c95..8ce57bc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
 # Initialize Autoconf
 AC_PREREQ([2.60])
 AC_INIT([xf86-video-sis],
-        [0.10.6],
+        [0.10.7],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         [xf86-video-sis])
 AC_CONFIG_SRCDIR([Makefile.am])

commit c3d8d70edd06b8ecedd341df8b33ba71c01e64b3
Author: Dave Airlie <airlied@gmail.com>
Date:   Sun Jul 15 19:55:19 2012 +1000

    sis: add xaa configure support
    
    SIS is already plumbed to not need XAA, just hook it up.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/configure.ac b/configure.ac
index 67994b2..e043c95 100644
--- a/configure.ac
+++ b/configure.ac
@@ -103,6 +103,24 @@ if test "$DRI" = yes; then
         AC_DEFINE(SISDRI_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])
+
 # technically this should be a configure flag.  meh.
 AC_DEFINE(XF86EXA, 1, [Build support for Exa])
 
diff --git a/src/sis.h b/src/sis.h
index 5ea3eba..46fca2a 100644
--- a/src/sis.h
+++ b/src/sis.h
@@ -226,7 +226,7 @@
 #define INCL_YUV_BLIT_ADAPTOR	/* Include support for YUV->RGB blit adaptors (VRAM queue mode only) */
 #endif
 
-#if 1
+#ifdef HAVE_XAA_H
 #define SIS_USE_XAA		/* Include code for XAA */
 #endif
 

commit 314d56d0addfaa5c24d14de675416b3aca7f4a19
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Fri Jun 29 20:40:01 2012 -0700

    Make SiSRegInit & SiSSetLVDSetc args match in both headers that define them
    
    Adds include of "sis_dac.h" to init.c to force compilers to compare the
    definitions, making it obvious that sis_dac.h defined an extra argument
    to SiSSetLVDSetc that the function itself didn't have, and that SiSRegInit
    expected an unsigned long (in the form of SISIOADDRESS), not the unsigned
    short that sis_dac.h claimed to pass it.
    
    Found by the Parfait 1.0 bug checking tool:
    
    Error: Function Call Mismatch
       Function call with extra args: Forward declaration of function 'SiSSetLVDSetc' does not match its definition
          Function expects 1 argument (SiS_Private*); given 2 (SiS_Private*, unsigned short)
            at line 604 of driver/xf86-video-sis/src/sis_dac.c in function 'SiS300Restore'.
              Function defined at line 1153 of driver/xf86-video-sis/src/init.c.
    [repeated for each call]
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>

diff --git a/src/init.c b/src/init.c
index 74df1f5..a232cb7 100644
--- a/src/init.c
+++ b/src/init.c
@@ -59,6 +59,7 @@
 #endif
 
 #include "init.h"
+#include "sis_dac.h"
 
 #ifdef SIS300
 #include "300vtbl.h"
diff --git a/src/sis_dac.c b/src/sis_dac.c
index 816d0c8..04276b6 100644
--- a/src/sis_dac.c
+++ b/src/sis_dac.c
@@ -601,7 +601,7 @@ SiS300Restore(ScrnInfoPtr pScrn, SISRegPtr sisReg)
     if(!(pSiS->UseVESA)) {
        if(pSiS->VBFlags2 & VB2_LVDS) {
 	  SiSRegInit(pSiS->SiS_Pr, pSiS->RelIO + 0x30);
-	  SiSSetLVDSetc(pSiS->SiS_Pr, 0);
+	  SiSSetLVDSetc(pSiS->SiS_Pr);
 	  SiS_GetVBType(pSiS->SiS_Pr);
 	  SiS_UnLockCRT2(pSiS->SiS_Pr);
 	  SiS_DisableBridge(pSiS->SiS_Pr);
@@ -990,7 +990,7 @@ SiS301Restore(ScrnInfoPtr pScrn, SISRegPtr sisReg)
     Part4max = 0x1b;
 
     SiSRegInit(pSiS->SiS_Pr, pSiS->RelIO + 0x30);
-    SiSSetLVDSetc(pSiS->SiS_Pr, 0);
+    SiSSetLVDSetc(pSiS->SiS_Pr);
     SiS_GetVBType(pSiS->SiS_Pr);
     SiS_DisableBridge(pSiS->SiS_Pr);
     SiS_UnLockCRT2(pSiS->SiS_Pr);
@@ -1084,7 +1084,7 @@ SiS301BRestore(ScrnInfoPtr pScrn, SISRegPtr sisReg)
     } /* TODO for 307 */
 
     SiSRegInit(pSiS->SiS_Pr, pSiS->RelIO + 0x30);
-    SiSSetLVDSetc(pSiS->SiS_Pr, 0);
+    SiSSetLVDSetc(pSiS->SiS_Pr);
     SiS_GetVBType(pSiS->SiS_Pr);
     SiS_DisableBridge(pSiS->SiS_Pr);
     SiS_UnLockCRT2(pSiS->SiS_Pr);
@@ -1193,7 +1193,7 @@ SiSLVDSChrontelRestore(ScrnInfoPtr pScrn, SISRegPtr sisReg)
     int i;
 
     SiSRegInit(pSiS->SiS_Pr, pSiS->RelIO + 0x30);
-    SiSSetLVDSetc(pSiS->SiS_Pr, 0);
+    SiSSetLVDSetc(pSiS->SiS_Pr);
     SiS_GetVBType(pSiS->SiS_Pr);
     SiS_DisableBridge(pSiS->SiS_Pr);
     if(pSiS->ChipType == SIS_730) {
diff --git a/src/sis_dac.h b/src/sis_dac.h
index b270675..18d956d 100644
--- a/src/sis_dac.h
+++ b/src/sis_dac.h
@@ -72,7 +72,7 @@ extern void		SiS_DisplayOn(struct SiS_Private *SiS_Pr);
 extern unsigned char	SiS_GetSetModeID(ScrnInfoPtr pScrn, unsigned char id);
 extern void		SiS_SetEnableDstn(struct SiS_Private *SiS_Pr, int enable);
 extern void		SiS_SetEnableFstn(struct SiS_Private *SiS_Pr, int enable);
-extern void		SiSRegInit(struct SiS_Private *SiS_Pr, unsigned short BaseAddr);
-extern void		SiSSetLVDSetc(struct SiS_Private *SiS_Pr, unsigned short ModeNo);
+extern void		SiSRegInit(struct SiS_Private *SiS_Pr, SISIOADDRESS BaseAddr);
+extern void		SiSSetLVDSetc(struct SiS_Private *SiS_Pr);
 extern void		SiS_GetVBType(struct SiS_Private *SiS_Pr);
 /* End of init.c/init301.c imports */
diff --git a/src/sis_driver.c b/src/sis_driver.c
index 9df696d..61e8075 100644
--- a/src/sis_driver.c
+++ b/src/sis_driver.c
@@ -7413,7 +7413,7 @@ SISSave(ScrnInfoPtr pScrn)
 #ifdef SIS_PC_PLATFORM
        if(pSiS->VGAMemBase) {
           SiSRegInit(pSiS->SiS_Pr, pSiS->RelIO+0x30);
-          SiSSetLVDSetc(pSiS->SiS_Pr, 0);
+          SiSSetLVDSetc(pSiS->SiS_Pr);
           SiS_GetVBType(pSiS->SiS_Pr);
           SiS_DisableBridge(pSiS->SiS_Pr);
           SiSVGASave(pScrn, sisReg, SISVGA_SR_FONTS);
@@ -8089,7 +8089,7 @@ SISRestore(ScrnInfoPtr pScrn)
 
 	   if(flags & SISVGA_SR_FONTS) {
               SiSRegInit(pSiS->SiS_Pr, pSiS->RelIO+0x30);
-	      SiSSetLVDSetc(pSiS->SiS_Pr, 0);
+	      SiSSetLVDSetc(pSiS->SiS_Pr);
 	      SiS_GetVBType(pSiS->SiS_Pr);
 	      SiS_DisableBridge(pSiS->SiS_Pr);
 	      SiSVGAProtect(pScrn, TRUE);

commit aa79b0f5dbbeda194916365539d06c3c090b80d2
Author: Dave Airlie <airlied@redhat.com>
Date:   Mon Jul 2 13:19:04 2012 +0100

    sis 0.10.6 release.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/configure.ac b/configure.ac
index 4599691..67994b2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
 # Initialize Autoconf
 AC_PREREQ([2.60])
 AC_INIT([xf86-video-sis],
-        [0.10.5],
+        [0.10.6],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         [xf86-video-sis])
 AC_CONFIG_SRCDIR([Makefile.am])

commit df17d3039e856c13b0476122a01b8c20f7d2de88
Author: Dave Airlie <airlied@redhat.com>
Date:   Mon Jul 2 13:16:26 2012 +0100

    sis: fix build against older servers.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/src/sis_driver.c b/src/sis_driver.c
index 5fbf76c..9df696d 100644
--- a/src/sis_driver.c
+++ b/src/sis_driver.c
@@ -9669,7 +9669,7 @@ SISAdjustFrame(ADJUST_FRAME_ARGS_DECL)
 
 #ifdef SISMERGED
     if(pSiS->MergedFB) {
-        SISAdjustFrameMerged(ADJUST_FRAME_ARGS(arg, x, y));
+        SISAdjustFrameMerged(ADJUST_FRAME_ARGS(pScrn, x, y));
 	return;
     }
 #endif

commit 331c276b47af1140a64125bff39901f8a8271eb7
Author: Dave Airlie <airlied@redhat.com>
Date:   Mon Jul 2 13:13:42 2012 +0100

    sis: 0.10.5 release
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

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

commit f6d49466ca538c65fa8c66352e421c2624e204f1
Author: Dave Airlie <airlied@redhat.com>
Date:   Wed Jun 6 09:50:31 2012 +0100

    sis: drop xf86PciInfo.h
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/src/sis.h b/src/sis.h
index 1fbedf1..5ea3eba 100644
--- a/src/sis.h
+++ b/src/sis.h
@@ -81,7 +81,6 @@
 #include "xf86Resources.h"
 #endif
 #include "xf86.h"
-#include "xf86PciInfo.h"
 #include "xf86Cursor.h"
 #include "xf86cmap.h"
 #include "vbe.h"
@@ -305,6 +304,41 @@
 #define SISVERBLEVEL 4
 #endif
 
+#ifndef _XF86_PCIINFO_H
+#define PCI_VENDOR_SIS			0x1039
+/* SiS */
+#define PCI_CHIP_SG86C201		0x0001
+#define PCI_CHIP_SG86C202		0x0002
+#define PCI_CHIP_SG85C503		0x0008
+#define PCI_CHIP_SIS5597		0x0200
+/* Agregado por Carlos Duclos & Manuel Jander */
+#define PCI_CHIP_SIS82C204		0x0204
+#define PCI_CHIP_SG86C205		0x0205
+#define PCI_CHIP_SG86C215		0x0215
+#define PCI_CHIP_SG86C225		0x0225
+#define PCI_CHIP_85C501			0x0406
+#define PCI_CHIP_85C496			0x0496
+#define PCI_CHIP_85C601			0x0601
+#define PCI_CHIP_85C5107		0x5107
+#define PCI_CHIP_85C5511		0x5511
+#define PCI_CHIP_85C5513		0x5513
+#define PCI_CHIP_SIS5571		0x5571
+#define PCI_CHIP_SIS5597_2		0x5597
+#define PCI_CHIP_SIS530			0x6306
+#define PCI_CHIP_SIS6326		0x6326
+#define PCI_CHIP_SIS7001		0x7001
+#define PCI_CHIP_SIS300			0x0300
+#define PCI_CHIP_SIS315H		0x0310
+#define PCI_CHIP_SIS315PRO		0x0325
+#define PCI_CHIP_SIS330			0x0330
+#define PCI_CHIP_SIS630			0x6300
+#define PCI_CHIP_SIS540			0x5300
+#define PCI_CHIP_SIS550			0x5315
+#define PCI_CHIP_SIS650			0x6325
+#define PCI_CHIP_SIS730			0x7300
+
+#endif
+
 /* For SiS315/550/650/740/330/660 - these should be moved elsewhere! */
 #ifndef PCI_CHIP_SIS315H
 #define PCI_CHIP_SIS315H	0x0310

commit 1b20cd63a974f792bd15e13d1c6caa3bbabbe106
Author: Dave Airlie <airlied@redhat.com>
Date:   Wed Jun 6 09:46:42 2012 +0100

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

diff --git a/src/Makefile.am b/src/Makefile.am
index 8491d2d..52523a9 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -31,6 +31,7 @@ sis_drv_ladir = @moduledir@/drivers
 sis_drv_la_SOURCES = \
          300vtbl.h \
          310vtbl.h \
+         compat-api.h \
          init301.c \
          init301.h \
          init.c \
diff --git a/src/compat-api.h b/src/compat-api.h
new file mode 100644
index 0000000..6bc946f
--- /dev/null
+++ b/src/compat-api.h
@@ -0,0 +1,99 @@
+/*
+ * 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 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 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/sis.h b/src/sis.h
index f2ca3a9..1fbedf1 100644
--- a/src/sis.h
+++ b/src/sis.h
@@ -269,6 +269,8 @@
 #include "extnsionst.h" 			/* required */
 #include <X11/extensions/panoramiXproto.h> 	/* required */
 
+#include "compat-api.h"
+
 #undef SISCHECKOSSSE
 #ifdef XORG_VERSION_CURRENT
 #if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(6,8,99,13,0)
@@ -1144,7 +1146,7 @@ typedef struct {
     CARD32		ColorExpandBase;
 
     int			Rotate, Reflect;
-    void		(*PointerMoved)(int index, int x, int y);
+    void		(*PointerMoved)(SCRN_ARG_TYPE arg, int x, int y);
 
     /* ShadowFB support */
     Bool		ShadowFB;
diff --git a/src/sis300_accel.c b/src/sis300_accel.c
index 503dee9..af0527d 100644
--- a/src/sis300_accel.c
+++ b/src/sis300_accel.c
@@ -884,7 +884,7 @@ static const unsigned short dstcol[] = { 0x0000, 0x8000, 0xc000 };
 static void
 SiSEXASync(ScreenPtr pScreen, int marker)
 {
-	SISPtr pSiS = SISPTR(xf86Screens[pScreen->myNum]);
+	SISPtr pSiS = SISPTR(xf86ScreenToScrn(pScreen));
 
 	SiSIdle
 }
@@ -892,7 +892,7 @@ SiSEXASync(ScreenPtr pScreen, int marker)
 static Bool
 SiSPrepareSolid(PixmapPtr pPixmap, int alu, Pixel planemask, Pixel fg)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen);
 	SISPtr pSiS = SISPTR(pScrn);
 	CARD32 dstbase;
 
@@ -940,7 +940,7 @@ SiSPrepareSolid(PixmapPtr pPixmap, int alu, Pixel planemask, Pixel fg)
 static void
 SiSSolid(PixmapPtr pPixmap, int x1, int y1, int x2, int y2)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen);
 	SISPtr pSiS = SISPTR(pScrn);
 
 	SiSSetupDSTXY(x1, y1)
@@ -960,7 +960,7 @@ static Bool
 SiSPrepareCopy(PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap, int xdir, int ydir,
 					int alu, Pixel planemask)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pDstPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pDstPixmap->drawable.pScreen);
 	SISPtr pSiS = SISPTR(pScrn);
 	CARD32 srcbase, dstbase;
 
@@ -1015,7 +1015,7 @@ SiSPrepareCopy(PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap, int xdir, int ydir,
 static void
 SiSCopy(PixmapPtr pDstPixmap, int srcX, int srcY, int dstX, int dstY, int width, int height)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pDstPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pDstPixmap->drawable.pScreen);
 	SISPtr pSiS = SISPTR(pScrn);
 
 	if(!(pSiS->CommandReg & X_INC))  {
@@ -1064,7 +1064,7 @@ SiSDGABlitRect(ScrnInfoPtr pScrn, int srcx, int srcy, int dstx, int dsty, int w,
 Bool
 SiS300AccelInit(ScreenPtr pScreen)
 {
-	ScrnInfoPtr     pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr     pScrn = xf86ScreenToScrn(pScreen);
 	SISPtr          pSiS = SISPTR(pScrn);
 #ifdef SIS_USE_XAA
 	XAAInfoRecPtr   infoPtr = NULL;
diff --git a/src/sis310_accel.c b/src/sis310_accel.c
index 8bba823..1a6f639 100644
--- a/src/sis310_accel.c
+++ b/src/sis310_accel.c
@@ -199,7 +199,7 @@ SiSCalcRenderAccelArray(ScrnInfoPtr pScrn)
 void
 SiSScratchSave(ScreenPtr pScreen, ExaOffscreenArea *area)
 {
-	SISPtr pSiS = SISPTR(xf86Screens[pScreen->myNum]);
+	SISPtr pSiS = SISPTR(xf86ScreenToScrn(pScreen));
 
 	pSiS->exa_scratch = NULL;
 }
@@ -1689,7 +1689,7 @@ SiSSubsequentCPUToScreenTexture(ScrnInfoPtr pScrn,
 static void
 SiSEXASync(ScreenPtr pScreen, int marker)
 {
-	SISPtr pSiS = SISPTR(xf86Screens[pScreen->myNum]);
+	SISPtr pSiS = SISPTR(xf86ScreenToScrn(pScreen));
 
 	SiSIdle
 }
@@ -1697,7 +1697,7 @@ SiSEXASync(ScreenPtr pScreen, int marker)
 static Bool
 SiSPrepareSolid(PixmapPtr pPixmap, int alu, Pixel planemask, Pixel fg)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen);
 	SISPtr pSiS = SISPTR(pScrn);
 
 	/* Planemask not supported */
@@ -1738,7 +1738,7 @@ SiSPrepareSolid(PixmapPtr pPixmap, int alu, Pixel planemask, Pixel fg)
 static void
 SiSSolid(PixmapPtr pPixmap, int x1, int y1, int x2, int y2)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen);
 	SISPtr pSiS = SISPTR(pScrn);
 
 	/* SiSSetupCMDFlag(BITBLT)  - BITBLT = 0 */
@@ -1757,7 +1757,7 @@ static Bool
 SiSPrepareCopy(PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap, int xdir, int ydir,
 					int alu, Pixel planemask)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pDstPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pDstPixmap->drawable.pScreen);
 	SISPtr pSiS = SISPTR(pScrn);
 	CARD32 srcbase, dstbase;
 
@@ -1805,7 +1805,7 @@ SiSPrepareCopy(PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap, int xdir, int ydir,
 static void
 SiSCopy(PixmapPtr pDstPixmap, int srcX, int srcY, int dstX, int dstY, int width, int height)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pDstPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pDstPixmap->drawable.pScreen);
 	SISPtr pSiS = SISPTR(pScrn);
 
 	SiSCheckQueue(16 * 2);
@@ -1823,7 +1823,7 @@ static Bool
 SiSCheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
 				PicturePtr pDstPicture)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pDstPicture->pDrawable->pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pDstPicture->pDrawable->pScreen);
 	SISPtr pSiS = SISPTR(pScrn);
 
 	xf86DrvMsg(0, 0, "CC: %d Src %x (fi %d ca %d) Msk %x (%d %d) Dst %x (%d %d)\n",
@@ -1847,7 +1847,7 @@ SiSPrepareComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
 				PicturePtr pDstPicture, PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst)
 {
 #if 0
-	ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pDst->drawable.pScreen);
 	SISPtr pSiS = SISPTR(pScrn);
 #endif
 	return FALSE;
@@ -1858,7 +1858,7 @@ SiSComposite(PixmapPtr pDst, int srcX, int srcY, int maskX, int maskY, int dstX,
 				int width, int height)
 {
 #if 0
-	ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pDst->drawable.pScreen);
 	SISPtr pSiS = SISPTR(pScrn);
 #endif
 }
@@ -1872,7 +1872,7 @@ SiSDoneComposite(PixmapPtr pDst)
 Bool
 SiSUploadToScreen(PixmapPtr pDst, int x, int y, int w, int h, char *src, int src_pitch)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pDst->drawable.pScreen);
 	SISPtr pSiS = SISPTR(pScrn);
 	unsigned char *dst = pDst->devPrivate.ptr;
 	int dst_pitch = exaGetPixmapPitch(pDst);
@@ -1896,7 +1896,7 @@ SiSUploadToScreen(PixmapPtr pDst, int x, int y, int w, int h, char *src, int src
 Bool
 SiSUploadToScratch(PixmapPtr pSrc, PixmapPtr pDst)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pSrc->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pSrc->drawable.pScreen);
 	SISPtr pSiS = SISPTR(pScrn);
 	unsigned char *src, *dst;
 	int src_pitch = exaGetPixmapPitch(pSrc);
@@ -1951,7 +1951,7 @@ SiSUploadToScratch(PixmapPtr pSrc, PixmapPtr pDst)
 Bool
 SiSDownloadFromScreen(PixmapPtr pSrc, int x, int y, int w, int h, char *dst, int dst_pitch)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pSrc->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pSrc->drawable.pScreen);
 	SISPtr pSiS = SISPTR(pScrn);
 	unsigned char *src = pSrc->devPrivate.ptr;
 	int src_pitch = exaGetPixmapPitch(pSrc);
@@ -2013,7 +2013,7 @@ SiSDGABlitRect(ScrnInfoPtr pScrn, int srcx, int srcy, int dstx, int dsty, int w,
 Bool
 SiS315AccelInit(ScreenPtr pScreen)
 {
-	ScrnInfoPtr     pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr     pScrn = xf86ScreenToScrn(pScreen);
 	SISPtr          pSiS = SISPTR(pScrn);
 #ifdef SIS_USE_XAA
 	XAAInfoRecPtr   infoPtr = NULL;
diff --git a/src/sis6326_video.c b/src/sis6326_video.c
index 66352b7..34c3d04 100644
--- a/src/sis6326_video.c
+++ b/src/sis6326_video.c
@@ -152,7 +152,7 @@ static CARD32 get_scanline_CRT1(SISPtr pSiS)
 
 void SIS6326InitVideo(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     XF86VideoAdaptorPtr *adaptors, *newAdaptors = NULL;
     XF86VideoAdaptorPtr newAdaptor = NULL;
     int num_adaptors;
@@ -519,7 +519,7 @@ SIS6326ResetVideo(ScrnInfoPtr pScrn)
 static XF86VideoAdaptorPtr
 SIS6326SetupImageVideo(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     SISPtr pSiS = SISPTR(pScrn);
     XF86VideoAdaptorPtr adapt;
     SISPortPrivPtr pPriv;
diff --git a/src/sis_accel.c b/src/sis_accel.c
index b85c893..c2c24c7 100644
--- a/src/sis_accel.c
+++ b/src/sis_accel.c
@@ -466,7 +466,7 @@ SiSSubsequentColorExpandScanline(ScrnInfoPtr pScrn, int bufno)
 static void
 SiSEXASync(ScreenPtr pScreen, int marker)
 {
-	SISPtr pSiS = SISPTR(xf86Screens[pScreen->myNum]);
+	SISPtr pSiS = SISPTR(xf86ScreenToScrn(pScreen));
 
 	sisBLTSync;
 }
@@ -474,7 +474,7 @@ SiSEXASync(ScreenPtr pScreen, int marker)
 static Bool
 SiSPrepareSolid(PixmapPtr pPixmap, int alu, Pixel planemask, Pixel fg)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen);
 	SISPtr pSiS = SISPTR(pScrn);
 
 	/* Planemask not supported */
@@ -509,7 +509,7 @@ SiSPrepareSolid(PixmapPtr pPixmap, int alu, Pixel planemask, Pixel fg)
 static void
 SiSSolid(PixmapPtr pPixmap, int x1, int y1, int x2, int y2)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen);
 	SISPtr pSiS = SISPTR(pScrn);
 
 	sisBLTSync;
@@ -527,7 +527,7 @@ static Bool
 SiSPrepareCopy(PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap, int xdir, int ydir,
 					int alu, Pixel planemask)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pSrcPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pSrcPixmap->drawable.pScreen);
 	SISPtr pSiS = SISPTR(pScrn);
 
 	/* Planemask not supported */
@@ -567,7 +567,7 @@ SiSPrepareCopy(PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap, int xdir, int ydir,
 static void
 SiSCopy(PixmapPtr pDstPixmap, int srcX, int srcY, int dstX, int dstY, int width, int height)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pDstPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pDstPixmap->drawable.pScreen);
 	SISPtr pSiS = SISPTR(pScrn);
 	CARD32 srcbase, dstbase, cmd;
 	int bpp = pSiS->copyBpp;
@@ -644,7 +644,7 @@ SiSDGABlitRect(ScrnInfoPtr pScrn, int srcx, int srcy, int dstx, int dsty, int w,
 Bool
 SiSAccelInit(ScreenPtr pScreen)
 {
-    ScrnInfoPtr    pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
     SISPtr         pSiS = SISPTR(pScrn);
 #ifdef SIS_USE_XAA
     XAAInfoRecPtr  infoPtr = NULL;
diff --git a/src/sis_cursor.c b/src/sis_cursor.c
index 13eddc4..32dcd9d 100644
--- a/src/sis_cursor.c
+++ b/src/sis_cursor.c
@@ -908,7 +908,7 @@ SiS310LoadCursorImage(ScrnInfoPtr pScrn, UChar *src)
 static Bool
 SiSUseHWCursor(ScreenPtr pScreen, CursorPtr pCurs)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     SISPtr  pSiS = SISPTR(pScrn);
     DisplayModePtr  mode = pSiS->CurrentLayout.mode;
 
@@ -924,7 +924,7 @@ SiSUseHWCursor(ScreenPtr pScreen, CursorPtr pCurs)
 static Bool
 SiS300UseHWCursor(ScreenPtr pScreen, CursorPtr pCurs)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     SISPtr  pSiS = SISPTR(pScrn);
     DisplayModePtr  mode = pSiS->CurrentLayout.mode;
 #ifdef SISMERGED
@@ -1000,7 +1000,7 @@ SiS300UseHWCursor(ScreenPtr pScreen, CursorPtr pCurs)
 static Bool
 SiSUseHWCursorARGB(ScreenPtr pScreen, CursorPtr pCurs)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     SISPtr  pSiS = SISPTR(pScrn);
     DisplayModePtr  mode = pSiS->CurrentLayout.mode;
 #ifdef SISMERGED
@@ -1352,7 +1352,7 @@ static void SiS310LoadCursorImageARGB(ScrnInfoPtr pScrn, CursorPtr pCurs)
 Bool
 SiSHWCursorInit(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     SISPtr pSiS = SISPTR(pScrn);
     xf86CursorInfoPtr infoPtr;
 
diff --git a/src/sis_dga.c b/src/sis_dga.c
index 16b0ee4..ad37d66 100644
--- a/src/sis_dga.c
+++ b/src/sis_dga.c
@@ -247,7 +247,7 @@ mode_nogood:
 Bool
 SISDGAInit(ScreenPtr pScreen)
 {
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    SISPtr pSiS = SISPTR(pScrn);
    DGAModePtr modes = NULL;
    int num = 0;
@@ -371,8 +371,8 @@ SIS_SetMode(
 	pScrn->currentMode = pSiS->CurrentLayout.mode;
 	pSiS->DGAactive = FALSE;
 
-	(*pScrn->SwitchMode)(index, pScrn->currentMode, 0);
-	(*pScrn->AdjustFrame)(index, pScrn->frameX0, pScrn->frameY0, 0);
+	(*pScrn->SwitchMode)(SWITCH_MODE_ARGS(pScrn, pScrn->currentMode));
+	(*pScrn->AdjustFrame)(ADJUST_FRAME_ARGS(pScrn, pScrn->frameX0, pScrn->frameY0));
 
     } else {	/* set new mode */
 
@@ -387,10 +387,10 @@ SIS_SetMode(
 	pSiS->CurrentLayout.displayWidth  = pMode->bytesPerScanline / (pMode->bitsPerPixel >> 3);
 	pSiS->CurrentLayout.displayHeight = pMode->imageHeight;
 
-	(*pScrn->SwitchMode)(index, pMode->mode, 0);
+	(*pScrn->SwitchMode)(SWITCH_MODE_ARGS(pScrn, pMode->mode));
 	/* Adjust viewport to 0/0 after mode switch */
 	/* This fixes the vmware-in-dualhead problems */
-	(*pScrn->AdjustFrame)(index, 0, 0, 0);
+	(*pScrn->AdjustFrame)(ADJUST_FRAME_ARGS(pScrn, 0, 0));
 	pSiS->CurrentLayout.DGAViewportX = pSiS->CurrentLayout.DGAViewportY = 0;
     }
 
@@ -414,7 +414,7 @@ SIS_SetViewport(
 ){
    SISPtr pSiS = SISPTR(pScrn);
 
-   (*pScrn->AdjustFrame)(pScrn->pScreen->myNum, x, y, flags);
+   (*pScrn->AdjustFrame)(ADJUST_FRAME_ARGS(pScrn, x, y));
    pSiS->DGAViewportStatus = 0;  /* There are never pending Adjusts */
    pSiS->CurrentLayout.DGAViewportX = x;
    pSiS->CurrentLayout.DGAViewportY = y;
diff --git a/src/sis_dri.c b/src/sis_dri.c
index 97ed951..9a045a2 100644
--- a/src/sis_dri.c
+++ b/src/sis_dri.c
@@ -128,7 +128,7 @@ static void SISDRIMoveBuffers(WindowPtr pParent, DDXPointRec ptOldOrg,
 static Bool
 SISInitVisualConfigs(ScreenPtr pScreen)
 {
-  ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+  ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
   SISPtr pSIS = SISPTR(pScrn);
   int numConfigs = 0;
   __GLXvisualConfig *pConfigs = 0;
@@ -263,7 +263,7 @@ SISInitVisualConfigs(ScreenPtr pScreen)
 Bool
 SISDRIScreenInit(ScreenPtr pScreen)
 {
-  ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+  ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
   SISPtr pSIS = SISPTR(pScrn);
   DRIInfoPtr pDRIInfo;
   SISDRIPtr pSISDRI;
@@ -664,7 +664,7 @@ SISDRIScreenInit(ScreenPtr pScreen)
 Bool
 SISDRIFinishScreenInit(ScreenPtr pScreen)
 {
-  ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+  ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
   SISPtr pSiS = SISPTR(pScrn);
   SISDRIPtr pSISDRI;
 
@@ -751,7 +751,7 @@ SISDRIFinishScreenInit(ScreenPtr pScreen)
 void
 SISDRICloseScreen(ScreenPtr pScreen)
 {
-  ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+  ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
   SISPtr pSIS = SISPTR(pScrn);
 
   switch(pSIS->VGAEngine) {
@@ -835,7 +835,7 @@ SISDRISwapContext(ScreenPtr pScreen, DRISyncType syncType,
            DRIContextType oldContextType, void *oldContext,
            DRIContextType newContextType, void *newContext)
 {
-  ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+  ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
   SISPtr pSiS = SISPTR(pScrn);
 
 #if 0
@@ -871,7 +871,7 @@ static void
 SISDRIInitBuffers(WindowPtr pWin, RegionPtr prgn, CARD32 index)
 {
   ScreenPtr pScreen = pWin->drawable.pScreen;
-  ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+  ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
   SISPtr pSiS = SISPTR(pScrn);
 
   switch(pSiS->VGAEngine) {
@@ -891,7 +891,7 @@ SISDRIMoveBuffers(WindowPtr pParent, DDXPointRec ptOldOrg,
            RegionPtr prgnSrc, CARD32 index)
 {
   ScreenPtr pScreen = pParent->drawable.pScreen;
-  ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+  ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
   SISPtr pSiS = SISPTR(pScrn);
 
   switch(pSiS->VGAEngine) {
diff --git a/src/sis_driver.c b/src/sis_driver.c
index 7a5be4e..5fbf76c 100644
--- a/src/sis_driver.c
+++ b/src/sis_driver.c
@@ -7586,9 +7586,9 @@ SISModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
 	     }
 	     SiSPostSetMode(pScrn, &pSiS->ModeReg);
 	     if(pSiSEnt->pScrn_2) {
-		SISAdjustFrame(pSiSEnt->pScrn_2->scrnIndex,
+		SISAdjustFrame(ADJUST_FRAME_ARGS(pSiSEnt->pScrn_2,
 			       pSiSEnt->pScrn_2->frameX0,
-			       pSiSEnt->pScrn_2->frameY0, 0);
+						 pSiSEnt->pScrn_2->frameY0));
 	     }
 	  } else {
 	     /* Head 2 (slave) is always CRT1 */
@@ -7599,9 +7599,9 @@ SISModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
 	     }
 	     SiSPostSetMode(pScrn, &pSiS->ModeReg);
 	     if(pSiSEnt->pScrn_1) {
-		SISAdjustFrame(pSiSEnt->pScrn_1->scrnIndex,
+		SISAdjustFrame(ADJUST_FRAME_ARGS(pSiSEnt->pScrn_1,
 			       pSiSEnt->pScrn_1->frameX0,
-			       pSiSEnt->pScrn_1->frameY0, 0);
+			       pSiSEnt->pScrn_1->frameY0));
 	     }
 	  }
 
@@ -8212,14 +8212,14 @@ SISBridgeRestore(ScrnInfoPtr pScrn)
 
 /* Our BlockHandler */
 static void
-SISBlockHandler(int i, pointer blockData, pointer pTimeout, pointer pReadmask)
+SISBlockHandler(BLOCKHANDLER_ARGS_DECL)
 {
-    ScreenPtr pScreen = screenInfo.screens[i];
-    ScrnInfoPtr pScrn = xf86Screens[i];
+    SCREEN_PTR(arg);
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     SISPtr pSiS = SISPTR(pScrn);
 
     pScreen->BlockHandler = pSiS->BlockHandler;
-    (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
+    (*pScreen->BlockHandler) (BLOCKHANDLER_ARGS);
     pScreen->BlockHandler = SISBlockHandler;
 
 #ifdef SISDUALHEAD
@@ -8297,7 +8297,7 @@ SiSHandleBackLight(SISPtr pSiS, Bool blon)
 static Bool
 SISSaveScreen(ScreenPtr pScreen, int mode)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     SISPtr pSiS;
     Bool IsUnblank = xf86IsUnblank(mode) ? TRUE : FALSE;
 
@@ -8325,7 +8325,7 @@ SISSaveScreen(ScreenPtr pScreen, int mode)
 static Bool
 SISSaveScreenDH(ScreenPtr pScreen, int mode)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     SISPtr pSiS;
     Bool IsUnblank = xf86IsUnblank(mode) ? TRUE : FALSE;
 
@@ -8517,9 +8517,9 @@ SISDisplayPowerManagementSet(ScrnInfoPtr pScrn, int PowerManagementMode, int fla
  * depth, bitsPerPixel)
  */
 static Bool
-SISScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+SISScreenInit(SCREEN_INIT_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     SISPtr pSiS = SISPTR(pScrn);
     VisualPtr visual;
     ULong OnScreenSize;
@@ -8671,7 +8671,7 @@ SISScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
     SISSaveScreen(pScreen, SCREEN_SAVER_ON);
 
     /* Set the viewport */
-    SISAdjustFrame(scrnIndex, pScrn->frameX0, pScrn->frameY0, 0);
+    SISAdjustFrame(ADJUST_FRAME_ARGS(pScrn, pScrn->frameX0, pScrn->frameY0));
 
     /* Reset visual list. */
     miClearVisualTypes();
@@ -9084,7 +9084,7 @@ SISScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 	     pSiS->SiS_SD_Flags |= SiS_SD_PSEUDOXINERAMA;
 	     if(pSiS->HaveNonRect) {
 		/* Reset the viewport (now eventually non-recangular) */


Reply to: