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

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



 .gitignore          |   70 +++++++++-
 COPYING             |   68 +++++++++-
 ChangeLog           |   67 ----------
 Makefile.am         |   13 +-
 README              |   24 +++
 configure.ac        |   66 ++++++----
 man/.cvsignore      |    2 
 man/Makefile.am     |   63 +++------
 man/cirrus.man      |    6 
 src/.cvsignore      |    6 
 src/CirrusClk.c     |    5 
 src/Makefile.am     |    5 
 src/alp.h           |    4 
 src/alp_driver.c    |  336 ++++++++++++++++++++++++++++------------------------
 src/alp_hwcurs.c    |    7 -
 src/alp_i2c.c       |    3 
 src/alp_xaa.c       |    8 -
 src/alp_xaam.c      |   10 -
 src/cir.h           |   13 +-
 src/cir_dga.c       |   27 ++--
 src/cir_driver.c    |   68 +++-------
 src/cir_pcirename.h |   51 +++++++
 src/cir_shadow.c    |   22 +--
 src/compat-api.h    |   99 +++++++++++++++
 src/lg.h            |    4 
 src/lg_driver.c     |  196 +++++++++---------------------
 src/lg_hwcurs.c     |    6 
 src/lg_i2c.c        |    3 
 src/lg_xaa.c        |    8 -
 src/lg_xaa.h        |    1 
 30 files changed, 705 insertions(+), 556 deletions(-)

New commits:
commit e443ede15981549ff5f6b01f42c3cb8dc909d778
Author: Dave Airlie <airlied@gmail.com>
Date:   Fri Jul 13 14:47:40 2012 +1000

    cirrus: handle server with no XAA
    
    this fixes cirrus to work with a server with no XAA module.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/configure.ac b/configure.ac
index 1cc4d93..1157ab1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -72,6 +72,24 @@ AC_CHECK_HEADER(xf1bpp.h,[AC_DEFINE(HAVE_XF1BPP, 1, [Have 1bpp support])],[])
 AC_CHECK_HEADER(xf4bpp.h,[AC_DEFINE(HAVE_XF4BPP, 1, [Have 4bpp support])],[])
 CPPFLAGS="$SAVE_CPPFLAGS"
 
+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])
+
 if test "x$XSERVER_LIBPCIACCESS" = xyes; then
     PKG_CHECK_MODULES([PCIACCESS], [pciaccess >= 0.8.0])
     XORG_CFLAGS="$XORG_CFLAGS $PCIACCESS_CFLAGS"
diff --git a/src/alp.h b/src/alp.h
index a182d0c..c09e24b 100644
--- a/src/alp.h
+++ b/src/alp.h
@@ -40,8 +40,10 @@ typedef struct {
 } AlpRegRec, *AlpRegPtr;
 
 extern Bool AlpHWCursorInit(ScreenPtr pScreen, int size);
+#ifdef HAVE_XAA_H
 extern Bool AlpXAAInit(ScreenPtr pScreen);
 extern Bool AlpXAAInitMMIO(ScreenPtr pScreen);
+#endif
 extern Bool AlpDGAInit(ScreenPtr pScreen);
 extern Bool AlpI2CInit(ScrnInfoPtr pScrn);
 
diff --git a/src/alp_driver.c b/src/alp_driver.c
index d1300df..e38c613 100644
--- a/src/alp_driver.c
+++ b/src/alp_driver.c
@@ -1088,7 +1088,12 @@ AlpPreInit(ScrnInfoPtr pScrn, int flags)
 
 	/* Load XAA if needed */
 	if (!pCir->NoAccel) {
-		if (!xf86LoadSubModule(pScrn, "xaa")) {
+#ifdef HAVE_XAA_H
+		if (!xf86LoadSubModule(pScrn, "xaa"))
+#else
+		if (1)
+#endif
+                {
 			xf86DrvMsg(pScrn->scrnIndex, X_INFO,
 				   "Falling back to shadowfb\n");
 			pCir->NoAccel = TRUE;
@@ -1096,6 +1101,7 @@ AlpPreInit(ScrnInfoPtr pScrn, int flags)
 		}
 	}
 
+
 	/* Load ramdac if needed */
 	if (pCir->HWCursor) {
 		if (!xf86LoadSubModule(pScrn, "ramdac")) {
@@ -1650,10 +1656,12 @@ AlpScreenInit(SCREEN_INIT_ARGS_DECL)
 
 	if (!pCir->NoAccel) { /* Initialize XAA functions */
 	    AlpOffscreenAccelInit(pScrn);
+#ifdef HAVE_XAA_H
 	    if (!(pCir->UseMMIO ? AlpXAAInitMMIO(pScreen) :
 		  AlpXAAInit(pScreen)))
 	      xf86DrvMsg(pScrn->scrnIndex, X_ERROR, 
 			 "Could not initialize XAA\n");
+#endif
 	}
 
 #if 1
@@ -1860,9 +1868,11 @@ AlpCloseScreen(CLOSE_SCREEN_ARGS_DECL)
 	    CirUnmapMem(pCir, pScrn->scrnIndex);
 	}
 
+#ifdef HAVE_XAA_H
 	if (pCir->AccelInfoRec)
 		XAADestroyInfoRec(pCir->AccelInfoRec);
 	pCir->AccelInfoRec = NULL;
+#endif
 	if (pCir->CursorInfoRec)
 		xf86DestroyCursorInfoRec(pCir->CursorInfoRec);
 	pCir->CursorInfoRec = NULL;
diff --git a/src/alp_xaa.c b/src/alp_xaa.c
index 5a43357..b3ddd64 100644
--- a/src/alp_xaa.c
+++ b/src/alp_xaa.c
@@ -16,6 +16,7 @@
 #define _ALP_PRIVATE_
 #include "alp.h"
 
+#ifdef HAVE_XAA_H
 #define WAIT	outb(pCir->PIOReg, 0x31); \
 		while(inb(pCir->PIOReg + 1) & pCir->chip.alp->waitMsk){};
 #define WAIT_1	outb(pCir->PIOReg, 0x31); \
@@ -683,4 +684,4 @@ AlpXAAInit(ScreenPtr pScreen)
 
     return TRUE;
 }
-
+#endif
diff --git a/src/alp_xaam.c b/src/alp_xaam.c
index 79f621d..8e9fd52 100644
--- a/src/alp_xaam.c
+++ b/src/alp_xaam.c
@@ -17,6 +17,7 @@
 #define _ALP_PRIVATE_
 #include "alp.h"
 
+#ifdef HAVE_XAA_H
 #ifdef DEBUG
 #define minb(p) \
         (ErrorF("minb(%X)\n", p),\
@@ -266,7 +267,4 @@ AlpXAAInitMMIO(ScreenPtr pScreen)
 	return TRUE;
 }
 
-
-
-
-
+#endif
diff --git a/src/cir.h b/src/cir.h
index 3915a31..0a5d403 100644
--- a/src/cir.h
+++ b/src/cir.h
@@ -4,7 +4,9 @@
 #define CIR_H
 
 #include "xf86Cursor.h"
+#ifdef HAVE_XAA_H
 #include "xaa.h"
+#endif
 #include "xf86i2c.h"
 #include <string.h>
 #include <stdlib.h>
@@ -44,7 +46,9 @@ typedef struct {
 	Bool			NoAccel;
 	Bool			HWCursor;
 	Bool			UseMMIO;
+#ifdef HAVE_XAA_H
 	XAAInfoRecPtr		AccelInfoRec;
+#endif
 	xf86CursorInfoPtr	CursorInfoRec;
 	int			DGAnumModes;
 	DGAModePtr		DGAModes;
diff --git a/src/cir_dga.c b/src/cir_dga.c
index b841be3..bf3a9dd 100644
--- a/src/cir_dga.c
+++ b/src/cir_dga.c
@@ -30,8 +30,10 @@
 #include "xf86.h"
 #include "xf86_OSproc.h"
 #include "xf86Pci.h"
+#ifdef HAVE_XAA_H
 #include "xaa.h"
 #include "xaalocal.h"
+#endif
 #include "vgaHW.h"
 #include "cir.h"
 #include "dgaproc.h"
@@ -39,15 +41,17 @@
 static Bool Cir_OpenFramebuffer(ScrnInfoPtr, char **, unsigned char **, 
 				  int *, int *, int *);
 static Bool Cir_SetMode(ScrnInfoPtr, DGAModePtr);
-static void Cir_Sync(ScrnInfoPtr);
 static int  Cir_GetViewport(ScrnInfoPtr);
 static void Cir_SetViewport(ScrnInfoPtr, int, int, int);
+#ifdef HAVE_XAA_H
+static void Cir_Sync(ScrnInfoPtr);
 static void Cir_FillRect(ScrnInfoPtr, int, int, int, int, unsigned long);
 static void Cir_BlitRect(ScrnInfoPtr, int, int, int, int, int, int);
 /*
 static void Cir_BlitTransRect(ScrnInfoPtr, int, int, int, int, int, int, 
                                 unsigned long);
 */
+#endif
 
 static
 DGAFunctionRec CirDGAFuncs = {
@@ -56,9 +60,13 @@ DGAFunctionRec CirDGAFuncs = {
    Cir_SetMode,
    Cir_SetViewport,
    Cir_GetViewport,
+#ifdef HAVE_XAA_H
    Cir_Sync,
    Cir_FillRect,
    Cir_BlitRect,
+#else
+   NULL, NULL, NULL,
+#endif
    NULL  /* Cir_BlitTransRect */
 };
 
@@ -207,14 +215,12 @@ Cir_GetViewport(
     return pCir->DGAViewportStatus;
 }
 
-
-
+#ifdef HAVE_XAA_H
 static void 
 Cir_Sync(
    ScrnInfoPtr pScrn
 ){
     CirPtr pCir = CIRPTR(pScrn);
-
     if(pCir->AccelInfoRec) {
 	(*pCir->AccelInfoRec->Sync)(pScrn);
     }
@@ -255,3 +261,4 @@ Cir_BlitRect(
 	SET_SYNC_FLAG(pCir->AccelInfoRec);
     }
 }
+#endif
diff --git a/src/lg.h b/src/lg.h
index 985f634..fa716d6 100644
--- a/src/lg.h
+++ b/src/lg.h
@@ -59,8 +59,10 @@ typedef struct {
 /* lg_driver.c */
 extern LgLineDataRec LgLineData[];
 
+#ifdef HAVE_XAA_H
 /* lg_xaa.c */
 extern Bool LgXAAInit(ScreenPtr pScreen);
+#endif
 
 /* lg_hwcurs.c */
 extern Bool LgHWCursorInit(ScreenPtr pScreen);
diff --git a/src/lg_driver.c b/src/lg_driver.c
index ab613d8..13f222d 100644
--- a/src/lg_driver.c
+++ b/src/lg_driver.c
@@ -797,7 +797,12 @@ LgPreInit(ScrnInfoPtr pScrn, int flags)
 
 	/* Load XAA if needed */
 	if (!pCir->NoAccel) {
-		if (!xf86LoadSubModule(pScrn, "xaa")) {
+#ifdef HAVE_XAA_H
+		if (!xf86LoadSubModule(pScrn, "xaa"))
+#else
+		if (1)
+#endif
+                {
 			xf86DrvMsg(pScrn->scrnIndex, X_INFO,
 				   "Falling back to shadowfb\n");
 			pCir->NoAccel = TRUE;
@@ -1375,10 +1380,12 @@ LgScreenInit(SCREEN_INIT_ARGS_DECL)
 	 */
 	xf86SetBlackWhitePixels(pScreen);
 
+#ifdef HAVE_XAA_H
 	if (!pCir->NoAccel) { /* Initialize XAA functions */
 		if (!LgXAAInit(pScreen))
 			xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Could not initialize XAA\n");
 	}
+#endif
 #if 1
 	pCir->DGAModeInit = LgModeInit;
 	if (!CirDGAInit(pScreen))
@@ -1609,9 +1616,11 @@ LgCloseScreen(CLOSE_SCREEN_ARGS_DECL)
 	CirUnmapMem(pCir, pScrn->scrnIndex);
 	}
 
+#ifdef HAVE_XAA_H
 	if (pCir->AccelInfoRec)
 		XAADestroyInfoRec(pCir->AccelInfoRec);
 	pCir->AccelInfoRec = NULL;
+#endif
 
 	if (pCir->CursorInfoRec)
 		xf86DestroyCursorInfoRec(pCir->CursorInfoRec);
diff --git a/src/lg_xaa.c b/src/lg_xaa.c
index 45ecea7..5e6e72e 100644
--- a/src/lg_xaa.c
+++ b/src/lg_xaa.c
@@ -26,6 +26,8 @@
 #include "cir.h"
 #define _LG_PRIVATE_
 #include "lg.h"
+
+#ifdef HAVE_XAA_H
 #include "lg_xaa.h"
 
 /* Laguna raster operations, source is OP1 and destination is OP0. */
@@ -296,4 +298,4 @@ LgSubsequentScreenToScreenCopy(ScrnInfoPtr pScrn, int x1, int y1,
 	LgSETDSTXY(x2, y2);
 	LgSETEXTENTS(w, h);
 }
-
+#endif

commit 46a9e962c6f33509e89d664115a9a2db51c9b67d
Author: Dave Airlie <airlied@redhat.com>
Date:   Mon Jul 2 11:57:59 2012 +0100

    cirrus: bump to 1.5.0 for release.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/configure.ac b/configure.ac
index e6e22f5..1cc4d93 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
 # Initialize Autoconf
 AC_PREREQ([2.60])
 AC_INIT([xf86-video-cirrus],
-        [1.4.0],
+        [1.5.0],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         [xf86-video-cirrus])
 AC_CONFIG_SRCDIR([Makefile.am])

commit 7ae890b29b12609d410f5558640bb0407b0fdd2d
Author: Johannes Obermayr <johannesobermayr@gmx.de>
Date:   Sat Jun 9 11:29:02 2012 +0100

    use int scrnIndex instead of int i in macro SCREEN_INIT_ARGS_DECL.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/src/compat-api.h b/src/compat-api.h
index 6bc946f..205ac59 100644
--- a/src/compat-api.h
+++ b/src/compat-api.h
@@ -46,7 +46,7 @@
 #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 SCREEN_INIT_ARGS_DECL int scrnIndex, 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

commit bab8041291ff81c81a98aca385cce561ecddc9d1
Author: Dave Airlie <airlied@redhat.com>
Date:   Tue Jun 5 19:35:39 2012 +0100

    cirrus: drop xf86PciInfo.
    
    This drops usage of deprecated header file.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/src/CirrusClk.c b/src/CirrusClk.c
index 6fd6270..a8b24ac 100644
--- a/src/CirrusClk.c
+++ b/src/CirrusClk.c
@@ -17,7 +17,6 @@
 
 #include "xf86.h"
 #include "xf86_OSproc.h"
-#include "xf86PciInfo.h"
 #include "xf86Pci.h"
 
 #include "cir.h"
diff --git a/src/alp_driver.c b/src/alp_driver.c
index 77a5ba9..d1300df 100644
--- a/src/alp_driver.c
+++ b/src/alp_driver.c
@@ -24,13 +24,6 @@
 /* Everything using inb/outb, etc needs "compiler.h" */
 #include "compiler.h"
 
-/* Drivers for PCI hardware need this */
-#include "xf86PciInfo.h"
-
-#ifndef PCI_CHIP_GD7556  /*  for old xf86PciInfo.h  */
-#define PCI_CHIP_GD7556            0x004C
-#endif
-
 /* Drivers that need to access the PCI config space directly need this */
 #include "xf86Pci.h"
 
diff --git a/src/alp_hwcurs.c b/src/alp_hwcurs.c
index 97c72e1..afab7a0 100644
--- a/src/alp_hwcurs.c
+++ b/src/alp_hwcurs.c
@@ -9,7 +9,6 @@
 #include "compiler.h"
 
 #include "xf86Pci.h"
-#include "xf86PciInfo.h"
 
 #include "vgaHW.h"
 
diff --git a/src/alp_i2c.c b/src/alp_i2c.c
index 7365215..9341543 100644
--- a/src/alp_i2c.c
+++ b/src/alp_i2c.c
@@ -9,7 +9,6 @@
 #include "compiler.h"
 
 #include "xf86Pci.h"
-#include "xf86PciInfo.h"
 
 #include "vgaHW.h"
 
diff --git a/src/alp_xaa.c b/src/alp_xaa.c
index cc8c0d9..5a43357 100644
--- a/src/alp_xaa.c
+++ b/src/alp_xaa.c
@@ -9,7 +9,6 @@
 #include "compiler.h"
 
 #include "xf86Pci.h"
-#include "xf86PciInfo.h"
 
 #include "vgaHW.h"
 
diff --git a/src/alp_xaam.c b/src/alp_xaam.c
index 42bbb31..79f621d 100644
--- a/src/alp_xaam.c
+++ b/src/alp_xaam.c
@@ -10,7 +10,6 @@
 #include "compiler.h"
 
 #include "xf86Pci.h"
-#include "xf86PciInfo.h"
 
 #include "vgaHW.h"
 
diff --git a/src/cir_dga.c b/src/cir_dga.c
index 44abfd9..b841be3 100644
--- a/src/cir_dga.c
+++ b/src/cir_dga.c
@@ -30,7 +30,6 @@
 #include "xf86.h"
 #include "xf86_OSproc.h"
 #include "xf86Pci.h"
-#include "xf86PciInfo.h"
 #include "xaa.h"
 #include "xaalocal.h"
 #include "vgaHW.h"
diff --git a/src/cir_driver.c b/src/cir_driver.c
index c6967da..5468b6b 100644
--- a/src/cir_driver.c
+++ b/src/cir_driver.c
@@ -24,13 +24,6 @@
 #endif
 /* All drivers need this */
 
-/* Drivers for PCI hardware need this */
-#include "xf86PciInfo.h"
-
-#ifndef PCI_CHIP_GD7556  /*  for old xf86PciInfo.h  */
-#define PCI_CHIP_GD7556            0x004C
-#endif
-
 /* Drivers that need to access the PCI config space directly need this */
 #include "xf86Pci.h"
 
diff --git a/src/cir_pcirename.h b/src/cir_pcirename.h
index 669b8fe..c1fb249 100644
--- a/src/cir_pcirename.h
+++ b/src/cir_pcirename.h
@@ -146,4 +146,28 @@ typedef struct pci_device *pciVideoPtr;
 
 #endif /* XSERVER_LIBPCIACCESS */
 
+#ifndef _XF86_PCIINFO_H
+
+#define PCI_VENDOR_CIRRUS		0x1013
+/* Cirrus Logic */
+#define PCI_CHIP_GD7548			0x0038
+#define PCI_CHIP_GD7555			0x0040
+#define PCI_CHIP_GD7556                 0x004C
+#define PCI_CHIP_GD5430			0x00A0
+#define PCI_CHIP_GD5434_4		0x00A4
+#define PCI_CHIP_GD5434_8		0x00A8
+#define PCI_CHIP_GD5436			0x00AC
+#define PCI_CHIP_GD5446			0x00B8
+#define PCI_CHIP_GD5480			0x00BC
+#define PCI_CHIP_GD5462			0x00D0
+#define PCI_CHIP_GD5464			0x00D4
+#define PCI_CHIP_GD5464BD		0x00D5
+#define PCI_CHIP_GD5465			0x00D6
+#define PCI_CHIP_6729			0x1100
+#define PCI_CHIP_6832			0x1110
+#define PCI_CHIP_GD7542			0x1200
+#define PCI_CHIP_GD7543			0x1202
+#define PCI_CHIP_GD7541			0x1204
+
+#endif
 #endif /* CIRPCIRENAME_H */
diff --git a/src/cir_shadow.c b/src/cir_shadow.c
index 5dc8d08..a9b425b 100644
--- a/src/cir_shadow.c
+++ b/src/cir_shadow.c
@@ -9,7 +9,6 @@
 
 #include "xf86.h"
 #include "xf86_OSproc.h"
-#include "xf86PciInfo.h"
 #include "xf86Pci.h"
 #include "shadowfb.h"
 #include "servermd.h"
diff --git a/src/lg_driver.c b/src/lg_driver.c
index 1ae6765..ab613d8 100644
--- a/src/lg_driver.c
+++ b/src/lg_driver.c
@@ -28,9 +28,6 @@
 
 #include "compiler.h"
 
-/* Drivers for PCI hardware need this */
-#include "xf86PciInfo.h"
-
 /* Drivers that need to access the PCI config space directly need this */
 #include "xf86Pci.h"
 
diff --git a/src/lg_hwcurs.c b/src/lg_hwcurs.c
index 80d1dff..4012db0 100644
--- a/src/lg_hwcurs.c
+++ b/src/lg_hwcurs.c
@@ -20,7 +20,6 @@
 #include "compiler.h"
 
 #include "xf86Pci.h"
-#include "xf86PciInfo.h"
 
 #include "vgaHW.h"
 
diff --git a/src/lg_i2c.c b/src/lg_i2c.c
index 145cc2e..3e8c962 100644
--- a/src/lg_i2c.c
+++ b/src/lg_i2c.c
@@ -9,7 +9,6 @@
 #include "compiler.h"
 
 #include "xf86Pci.h"
-#include "xf86PciInfo.h"
 
 #include "vgaHW.h"
 
diff --git a/src/lg_xaa.c b/src/lg_xaa.c
index 7abfb20..45ecea7 100644
--- a/src/lg_xaa.c
+++ b/src/lg_xaa.c
@@ -20,7 +20,6 @@
 #include "compiler.h"
 
 #include "xf86Pci.h"
-#include "xf86PciInfo.h"
 
 #include "vgaHW.h"
 

commit 9a5e19597be4f5ee4c1030e4a716207789e78668
Author: Dave Airlie <airlied@redhat.com>
Date:   Tue Jun 5 19:26:15 2012 +0100

    cirrus: convert to compat server API.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/src/Makefile.am b/src/Makefile.am
index f2cb24f..c649b3d 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -34,7 +34,8 @@ cirrus_drv_la_SOURCES = \
          cir.h \
          CirrusClk.c \
          cir_shadow.c \
-         cir_pcirename.h
+         cir_pcirename.h \
+         compat-api.h
 
 cirrus_alpine_la_LTLIBRARIES = cirrus_alpine.la
 cirrus_alpine_la_LDFLAGS = -module -avoid-version
diff --git a/src/alp_driver.c b/src/alp_driver.c
index 2e19461..77a5ba9 100644
--- a/src/alp_driver.c
+++ b/src/alp_driver.c
@@ -92,20 +92,20 @@ static void AlpProbeI2C(int scrnIndex);
 /* Mandatory functions */
 
 Bool AlpPreInit(ScrnInfoPtr pScrn, int flags);
-Bool AlpScreenInit(int Index, ScreenPtr pScreen, int argc, char **argv);
-Bool AlpEnterVT(int scrnIndex, int flags);
-void AlpLeaveVT(int scrnIndex, int flags);
-static Bool	AlpCloseScreen(int scrnIndex, ScreenPtr pScreen);
+Bool AlpScreenInit(SCREEN_INIT_ARGS_DECL);
+Bool AlpEnterVT(VT_FUNC_ARGS_DECL);
+void AlpLeaveVT(VT_FUNC_ARGS_DECL);
+static Bool	AlpCloseScreen(CLOSE_SCREEN_ARGS_DECL);
 static Bool	AlpSaveScreen(ScreenPtr pScreen, int mode);
 
 /* Required if the driver supports mode switching */
-Bool AlpSwitchMode(int scrnIndex, DisplayModePtr mode, int flags);
+Bool AlpSwitchMode(SWITCH_MODE_ARGS_DECL);
 /* Required if the driver supports moving the viewport */
-void AlpAdjustFrame(int scrnIndex, int x, int y, int flags);
+void AlpAdjustFrame(ADJUST_FRAME_ARGS_DECL);
 
 /* Optional functions */
-void AlpFreeScreen(int scrnIndex, int flags);
-ModeStatus AlpValidMode(int scrnIndex, DisplayModePtr mode,
+void AlpFreeScreen(FREE_SCREEN_ARGS_DECL);
+ModeStatus AlpValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode,
 			Bool verbose, int flags);
 /* Internally used functions */
 static void	AlpSave(ScrnInfoPtr pScrn);
@@ -781,7 +781,7 @@ AlpPreInit(ScrnInfoPtr pScrn, int flags)
      }
      else
  	xf86SetDDCproperties(pScrn,xf86PrintEDID(
- 	    xf86DoEDID_DDC2(pScrn->scrnIndex,pCir->I2CPtr1)));
+		 xf86DoEDID_DDC2(XF86_SCRN_ARG(pScrn),pCir->I2CPtr1)));
  
      /* Probe the possible LCD display */
      AlpProbeLCD(pScrn);
@@ -1457,9 +1457,9 @@ AlpRestore(ScrnInfoPtr pScrn)
 /* This gets called at the start of each server generation */
 
 Bool
-AlpScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+AlpScreenInit(SCREEN_INIT_ARGS_DECL)
 {
-	ScrnInfoPtr pScrn;
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	vgaHWPtr hwp;
 	CirPtr pCir;
 	int i, ret;
@@ -1473,11 +1473,6 @@ AlpScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 	ErrorF("AlpScreenInit\n");
 #endif
 
-	/*
-	 * First get the ScrnInfoRec
-	 */
-	pScrn = xf86Screens[pScreen->myNum];
-
 	hwp = VGAHWPTR(pScrn);
 	pCir = CIRPTR(pScrn);
 	
@@ -1513,7 +1508,7 @@ AlpScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 	AlpSaveScreen(pScreen, SCREEN_SAVER_ON);
 
 	/* Set the viewport */
-	AlpAdjustFrame(scrnIndex, pScrn->frameX0, pScrn->frameY0, 0);
+	AlpAdjustFrame(ADJUST_FRAME_ARGS(pScrn, pScrn->frameX0, pScrn->frameY0));
 
 	/*
 	 * The next step is to setup the screen's visuals, and initialise the
@@ -1591,7 +1586,7 @@ AlpScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 	    init_picture = 1;
 	    break;
 	default:
-	    xf86DrvMsg(scrnIndex, X_ERROR,
+	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 		       "X11: Internal error: invalid bpp (%d) in AlpScreenInit\n",
 		       pScrn->bitsPerPixel);
 	    ret = FALSE;
@@ -1747,9 +1742,10 @@ AlpScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 
 /* Usually mandatory */
 Bool
-AlpSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
+AlpSwitchMode(SWITCH_MODE_ARGS_DECL)
 {
-	return AlpModeInit(xf86Screens[scrnIndex], mode);
+	SCRN_INFO_PTR(arg);
+	return AlpModeInit(pScrn, mode);
 }
 
 
@@ -1759,13 +1755,12 @@ AlpSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
  */
 /* Usually mandatory */
 void
-AlpAdjustFrame(int scrnIndex, int x, int y, int flags)
+AlpAdjustFrame(ADJUST_FRAME_ARGS_DECL)
 {
-	ScrnInfoPtr pScrn;
+	SCRN_INFO_PTR(arg);
 	int Base, tmp;
 	vgaHWPtr hwp;
 
-	pScrn = xf86Screens[scrnIndex];
 	hwp = VGAHWPTR(pScrn);
 
 	Base = ((y * pScrn->displayWidth + x) / 8);
@@ -1803,9 +1798,9 @@ AlpAdjustFrame(int scrnIndex, int x, int y, int flags)
 
 /* Mandatory */
 Bool
-AlpEnterVT(int scrnIndex, int flags)
+AlpEnterVT(VT_FUNC_ARGS_DECL)
 {
-	ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+	SCRN_INFO_PTR(arg);
 	CirPtr pCir = CIRPTR(pScrn);
 	Bool ret;
 
@@ -1833,9 +1828,9 @@ AlpEnterVT(int scrnIndex, int flags)
 
 /* Mandatory */
 void
-AlpLeaveVT(int scrnIndex, int flags)
+AlpLeaveVT(VT_FUNC_ARGS_DECL)
 {
-	ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+	SCRN_INFO_PTR(arg);
 	vgaHWPtr hwp = VGAHWPTR(pScrn);
 #ifdef ALP_DEBUG
 	ErrorF("AlpLeaveVT\n");
@@ -1860,9 +1855,9 @@ AlpLeaveVT(int scrnIndex, int flags)
 
 /* Mandatory */
 static Bool
-AlpCloseScreen(int scrnIndex, ScreenPtr pScreen)
+AlpCloseScreen(CLOSE_SCREEN_ARGS_DECL)
 {
-	ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	vgaHWPtr hwp = VGAHWPTR(pScrn);
 	CirPtr pCir = CIRPTR(pScrn);
 
@@ -1891,7 +1886,7 @@ AlpCloseScreen(int scrnIndex, ScreenPtr pScreen)
 #endif
 
 	pScreen->CloseScreen = pCir->CloseScreen;
-	return (*pScreen->CloseScreen)(scrnIndex, pScreen);
+	return (*pScreen->CloseScreen)(CLOSE_SCREEN_ARGS);
 }
 
 
@@ -1899,8 +1894,9 @@ AlpCloseScreen(int scrnIndex, ScreenPtr pScreen)
 
 /* Optional */
 void
-AlpFreeScreen(int scrnIndex, int flags)
+AlpFreeScreen(FREE_SCREEN_ARGS_DECL)
 {
+	SCRN_INFO_PTR(arg);
 #ifdef ALP_DEBUG
 	ErrorF("AlpFreeScreen\n");
 #endif
@@ -1909,8 +1905,8 @@ AlpFreeScreen(int scrnIndex, int flags)
 	 * get called routinely at the end of a server generation.
 	 */
 	if (xf86LoaderCheckSymbol("vgaHWFreeHWRec"))
-		vgaHWFreeHWRec(xf86Screens[scrnIndex]);
-	AlpFreeRec(xf86Screens[scrnIndex]);
+		vgaHWFreeHWRec(pScrn);
+	AlpFreeRec(pScrn);
 }
 
 
@@ -1918,7 +1914,7 @@ AlpFreeScreen(int scrnIndex, int flags)
 
 /* Optional */
 ModeStatus
-AlpValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags)
+AlpValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode, Bool verbose, int flags)
 {
 	int lace;
 
diff --git a/src/alp_hwcurs.c b/src/alp_hwcurs.c
index 9891eb4..97c72e1 100644
--- a/src/alp_hwcurs.c
+++ b/src/alp_hwcurs.c
@@ -187,7 +187,7 @@ AlpShowCursor(ScrnInfoPtr pScrn)
 static Bool
 AlpUseHWCursor(ScreenPtr pScreen, CursorPtr pCurs)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 #ifdef ALP_DEBUG
 	ErrorF("AlpUseHWCursor\n");
 #endif
@@ -200,7 +200,7 @@ AlpUseHWCursor(ScreenPtr pScreen, CursorPtr pCurs)
 Bool
 AlpHWCursorInit(ScreenPtr pScreen, int size)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	const CirPtr pCir = CIRPTR(pScrn);
 	const AlpPtr pAlp = ALPPTR(pCir);
 	
diff --git a/src/alp_xaa.c b/src/alp_xaa.c
index 7a96e1a..cc8c0d9 100644
--- a/src/alp_xaa.c
+++ b/src/alp_xaa.c
@@ -588,7 +588,7 @@ AlpAccelEngineInit(ScrnInfoPtr pScrn)
 Bool
 AlpXAAInit(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     CirPtr pCir = CIRPTR(pScrn);
     AlpPtr pAlp = ALPPTR(pCir);
     XAAInfoRecPtr XAAPtr;
diff --git a/src/alp_xaam.c b/src/alp_xaam.c
index 3ecc7de..42bbb31 100644
--- a/src/alp_xaam.c
+++ b/src/alp_xaam.c
@@ -222,7 +222,7 @@ AlpAccelEngineInit(ScrnInfoPtr pScrn)
 Bool
 AlpXAAInitMMIO(ScreenPtr pScreen)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	CirPtr pCir = CIRPTR(pScrn);
 	XAAInfoRecPtr XAAPtr;
 	
diff --git a/src/cir.h b/src/cir.h
index 861966d..3915a31 100644
--- a/src/cir.h
+++ b/src/cir.h
@@ -9,6 +9,7 @@
 #include <string.h>
 #include <stdlib.h>
 
+#include "compat-api.h"
 #include "cir_pcirename.h"
 
 /* Card-specific driver information */
@@ -59,7 +60,7 @@ typedef struct {
 	int			rotate;
 	int			ShadowPitch;
 	unsigned char *		ShadowPtr;
-	void			(*PointerMoved)(int index, int x, int y);
+	void			(*PointerMoved)(SCRN_ARG_TYPE arg, int x, int y);
 	int			pitch;
 
 	unsigned char **	ScanlineColorExpandBuffers;
@@ -85,7 +86,7 @@ extern void cirProbeDDC(ScrnInfoPtr pScrn, int index);
 extern Bool CirDGAInit(ScreenPtr pScreen);
 
 /* in cir_shadow.c */
-void cirPointerMoved(int index, int x, int y);
+void cirPointerMoved(SCRN_ARG_TYPE arg, int x, int y);
 void cirRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
 void cirRefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
 void cirRefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
diff --git a/src/cir_dga.c b/src/cir_dga.c
index f930231..44abfd9 100644
--- a/src/cir_dga.c
+++ b/src/cir_dga.c
@@ -69,7 +69,7 @@ DGAFunctionRec CirDGAFuncs = {
 _X_EXPORT Bool
 CirDGAInit(ScreenPtr pScreen)
 {
-  ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+  ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
   CirPtr pCir = CIRPTR(pScrn);
   DGAModePtr modes = NULL, newmodes = NULL, currentMode;
   DisplayModePtr pMode, firstMode;
@@ -191,7 +191,7 @@ Cir_SetViewport(
    CirPtr pCir = CIRPTR(pScrn);
    vgaHWPtr hwp = VGAHWPTR(pScrn);
 
-   pScrn->AdjustFrame(pScrn->pScreen->myNum, x, y, flags);
+   pScrn->AdjustFrame(ADJUST_FRAME_ARGS(pScrn, x, y));
 
    while((hwp->readST01(hwp) & 0x08));
    while(!(hwp->readST01(hwp) & 0x08));
diff --git a/src/cir_shadow.c b/src/cir_shadow.c
index 0716a64..5dc8d08 100644
--- a/src/cir_shadow.c
+++ b/src/cir_shadow.c
@@ -44,9 +44,9 @@ cirRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox)
 } 
 
 _X_EXPORT void
-cirPointerMoved(int index, int x, int y)
+cirPointerMoved(SCRN_ARG_TYPE arg, int x, int y)
 {
-    ScrnInfoPtr pScrn = xf86Screens[index];
+    SCRN_INFO_PTR(arg);
     CirPtr pCir = CIRPTR(pScrn);
     int newX, newY;
 
@@ -58,7 +58,7 @@ cirPointerMoved(int index, int x, int y)
 	newY = pScrn->pScreen->width - x - 1;
     }
 
-    (*pCir->PointerMoved)(index, newX, newY);
+    (*pCir->PointerMoved)(arg, newX, newY);
 }
 
 _X_EXPORT void
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


Reply to: