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

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



 .gitignore       |   70 ++++++++-
 COPYING          |   74 ++++++++-
 ChangeLog        |   92 ------------
 Makefile.am      |   14 +
 README           |   20 ++
 configure.ac     |   69 +++++----
 man/Makefile.am  |   41 +++++
 man/s3.man       |  240 +++++++++++++++++++++++++++++++
 src/.cvsignore   |    6 
 src/Makefile.am  |    4 
 src/compat-api.h |   99 +++++++++++++
 src/s3.h         |   32 +++-
 src/s3_IBMRGB.c  |    4 
 src/s3_Ti.c      |    6 
 src/s3_accel.c   |    8 -
 src/s3_bios.c    |   33 ++--
 src/s3_cursor.c  |    4 
 src/s3_dga.c     |   28 ++-
 src/s3_driver.c  |  418 +++++++++++++++++++++++--------------------------------
 src/s3_shadow.c  |  273 +++++++++++++++++++++++++++++++++++
 src/s3_video.c   |   37 +++-
 21 files changed, 1148 insertions(+), 424 deletions(-)

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

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

diff --git a/configure.ac b/configure.ac
index c469706..6ba9870 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
 # Initialize Autoconf
 AC_PREREQ([2.60])
 AC_INIT([xf86-video-s3],
-        [0.6.4],
+        [0.6.5],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         [xf86-video-s3])
 AC_CONFIG_SRCDIR([Makefile.am])

commit 8f35d7311ee74e8eb8c4c957e793bf230941a7b5
Author: Dave Airlie <airlied@redhat.com>
Date:   Tue Jul 17 14:50:10 2012 +1000

    s3: fixup scrn/screen conversion.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/src/s3_IBMRGB.c b/src/s3_IBMRGB.c
index a9f8a20..bc1cd1c 100644
--- a/src/s3_IBMRGB.c
+++ b/src/s3_IBMRGB.c
@@ -511,7 +511,7 @@ static void S3IBMRGBLoadCursorImage(ScrnInfoPtr pScrn, unsigned char *image)
 
 static Bool S3IBMRGBUseHWCursor(ScreenPtr pScreen, CursorPtr pCurs)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	S3Ptr pS3 = S3PTR(pScrn);
 	return (pS3->hwCursor);
 }
@@ -519,7 +519,7 @@ static Bool S3IBMRGBUseHWCursor(ScreenPtr pScreen, CursorPtr pCurs)
 
 Bool S3IBMRGB_CursorInit(ScreenPtr pScreen)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	S3Ptr pS3 = S3PTR(pScrn);
 	xf86CursorInfoPtr pCurs;
 
diff --git a/src/s3_Ti.c b/src/s3_Ti.c
index fd83bfb..bb0ce51 100644
--- a/src/s3_Ti.c
+++ b/src/s3_Ti.c
@@ -725,7 +725,7 @@ static void S3TiLoadCursorImage(ScrnInfoPtr pScrn, unsigned char *image)
 
 static Bool S3TiUseHWCursor(ScreenPtr pScreen, CursorPtr pCurs)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	S3Ptr pS3 = S3PTR(pScrn);
 	return (pS3->hwCursor);
 }       
@@ -734,7 +734,7 @@ static Bool S3TiUseHWCursor(ScreenPtr pScreen, CursorPtr pCurs)
 
 Bool S3Ti_CursorInit(ScreenPtr pScreen)
 {
-        ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+        ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
         S3Ptr pS3 = S3PTR(pScrn);
         xf86CursorInfoPtr pCurs;      
         
diff --git a/src/s3_accel.c b/src/s3_accel.c
index a9cb9c9..5d11ac4 100644
--- a/src/s3_accel.c
+++ b/src/s3_accel.c
@@ -549,7 +549,7 @@ Bool S3AccelInitPIO(ScreenPtr pScreen)
 #endif
 {
 #ifdef HAVE_XAA_H
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	S3Ptr pS3 = S3PTR(pScrn);
 	XAAInfoRecPtr pXAA;
 
diff --git a/src/s3_cursor.c b/src/s3_cursor.c
index 1cb1c65..dec5f43 100644
--- a/src/s3_cursor.c
+++ b/src/s3_cursor.c
@@ -197,7 +197,7 @@ static void S3LoadCursorImage(ScrnInfoPtr pScrn, unsigned char *image)
 
 static Bool S3UseHWCursor(ScreenPtr pScreen, CursorPtr pCurs)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	S3Ptr pS3 = S3PTR(pScrn);
 	return (pS3->hwCursor);
 }
@@ -205,7 +205,7 @@ static Bool S3UseHWCursor(ScreenPtr pScreen, CursorPtr pCurs)
 
 Bool S3_CursorInit(ScreenPtr pScreen)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	S3Ptr pS3 = S3PTR(pScrn);
 	xf86CursorInfoPtr pCurs;
 
diff --git a/src/s3_dga.c b/src/s3_dga.c
index 5b61d1c..e384c45 100644
--- a/src/s3_dga.c
+++ b/src/s3_dga.c
@@ -176,7 +176,7 @@ SECOND_PASS:
 
 Bool S3DGAInit(ScreenPtr pScreen)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	S3Ptr pS3 = S3PTR(pScrn);
 	DGAModePtr modes = NULL;
 	int num = 0;
diff --git a/src/s3_video.c b/src/s3_video.c
index f47bf20..998ce74 100644
--- a/src/s3_video.c
+++ b/src/s3_video.c
@@ -62,7 +62,7 @@ static FBLinearPtr S3XVMemAlloc(ScrnInfoPtr pScrn, pointer pVideo, int size);
 
 void S3InitVideo(ScreenPtr pScreen)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	S3Ptr pS3 = S3PTR(pScrn);
 	XF86VideoAdaptorPtr *adaptors, *newAdaptors = NULL;
 	XF86VideoAdaptorPtr newAdaptor = NULL;
@@ -238,7 +238,7 @@ static XF86VideoAdaptorPtr S3AllocAdaptor(ScrnInfoPtr pScrn)
 
 static XF86VideoAdaptorPtr S3SetupImageVideoOverlay(ScreenPtr pScreen)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	S3Ptr pS3 = S3PTR(pScrn);
 	XF86VideoAdaptorPtr adapt;
 

commit 2c02712a860abb0a8584290a197071b8c0aa3fed
Author: Dave Airlie <airlied@redhat.com>
Date:   Tue Jul 17 14:33:15 2012 +1000

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

diff --git a/src/Makefile.am b/src/Makefile.am
index 84f926c..bd8d4b2 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -29,6 +29,7 @@ s3_drv_la_LDFLAGS = -module -avoid-version
 s3_drv_ladir = @moduledir@/drivers
 
 s3_drv_la_SOURCES = \
+         compat-api.h \
          newmmio.h \
          s3_bios.c \
          s3_cursor.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/s3.h b/src/s3.h
index 769bc3d..1609b18 100644
--- a/src/s3.h
+++ b/src/s3.h
@@ -48,6 +48,7 @@
 #include <X11/extensions/Xv.h>
 #include "fourcc.h"
 
+#include "compat-api.h"
 
 typedef struct _S3RegRec {
 	unsigned char	cr31, cr32, cr33, cr34, cr3a, cr3b, cr3c;
@@ -161,7 +162,7 @@ typedef struct _S3Rec {
 					       int *indicies, LOCO *colors,
 					       VisualPtr pVisual);
 
-        Bool                    (*CloseScreen)(int, ScreenPtr);
+	Bool                    (*CloseScreen)(CLOSE_SCREEN_ARGS_DECL);
 
 	unsigned char		*imageBuffer;
 	int			imageWidth;
@@ -172,7 +173,7 @@ typedef struct _S3Rec {
 	int                     rotate;
 	unsigned char           * ShadowPtr;
 	int                     ShadowPitch;
-	void	                (*PointerMoved)(int index, int x, int y);
+	void	                (*PointerMoved)(SCRN_ARG_TYPE arg, int x, int y);
     
 } S3Rec, *S3Ptr;
 
@@ -198,7 +199,7 @@ Bool S3AccelInit(ScreenPtr pScreen);
 Bool S3AccelInitNewMMIO(ScreenPtr pScreen);
 Bool S3AccelInitPIO(ScreenPtr pScreen);
 Bool S3DGAInit(ScreenPtr pScreen);
-Bool S3SwitchMode(int scrnIndex, DisplayModePtr mode, int flags);
+Bool S3SwitchMode(SWITCH_MODE_ARGS_DECL);
 int S3GetRefClock(ScrnInfoPtr pScrn);
 
 void S3InitVideo(ScreenPtr pScreen);
@@ -236,7 +237,7 @@ void S3OutTiIndReg(ScrnInfoPtr pScrn, CARD32 reg, unsigned char mask,
 Bool S3_CursorInit(ScreenPtr pScreen);
 
 /* in s3_shadow.c */
-void S3PointerMoved(int index, int x, int y);
+void S3PointerMoved(SCRN_ARG_TYPE arg, int x, int y);
 void S3RefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
 void S3RefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
 void S3RefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
diff --git a/src/s3_dga.c b/src/s3_dga.c
index a1fa86b..5b61d1c 100644
--- a/src/s3_dga.c
+++ b/src/s3_dga.c
@@ -251,7 +251,7 @@ static Bool S3_SetMode(ScrnInfoPtr pScrn, DGAModePtr pMode)
 						 pMode->bitsPerPixel :
 						 pMode->depth);
 
-		S3SwitchMode(indx, pMode->mode, 0);
+		S3SwitchMode(SWITCH_MODE_ARGS(pScrn, pMode->mode));
 	}
 
 	return TRUE;
@@ -270,7 +270,7 @@ static void S3_SetViewport(ScrnInfoPtr pScrn, int x, int y, int flags)
 {
 	S3Ptr pS3 = S3PTR(pScrn);
 
-	pScrn->AdjustFrame(pScrn->pScreen->myNum, x, y, flags);
+	pScrn->AdjustFrame(ADJUST_FRAME_ARGS(pScrn, x, y));
 	pS3->DGAViewportStatus = 0;
 }
 
diff --git a/src/s3_driver.c b/src/s3_driver.c
index 01250ba..61242ad 100644
--- a/src/s3_driver.c
+++ b/src/s3_driver.c
@@ -93,18 +93,17 @@ static const OptionInfoRec * S3AvailableOptions(int chipid, int busid);
 static void S3Identify(int flags);
 static Bool S3Probe(DriverPtr drv, int flags);
 static Bool S3PreInit(ScrnInfoPtr pScrn, int flags);
-static Bool S3EnterVT(int scrnIndex, int flags);
-static void S3LeaveVT(int scrnIndex, int flags);
+static Bool S3EnterVT(VT_FUNC_ARGS_DECL);
+static void S3LeaveVT(VT_FUNC_ARGS_DECL);
 static void S3Save(ScrnInfoPtr pScrn);
-static Bool S3ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc,
-			 char **argv);
+static Bool S3ScreenInit(SCREEN_INIT_ARGS_DECL);
 static Bool S3MapMem(ScrnInfoPtr pScrn);
 static void S3UnmapMem(ScrnInfoPtr pScrn);
 static Bool S3ModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode);
-static void S3AdjustFrame(int scrnIndex, int x, int y, int flags);
-Bool S3CloseScreen(int scrnIndex, ScreenPtr pScreen);
+static void S3AdjustFrame(ADJUST_FRAME_ARGS_DECL);
+Bool S3CloseScreen(CLOSE_SCREEN_ARGS_DECL);
 Bool S3SaveScreen(ScreenPtr pScreen, int mode);
-static void S3FreeScreen(int scrnIndex, int flags);
+static void S3FreeScreen(FREE_SCREEN_ARGS_DECL);
 static void S3GenericLoadPalette(ScrnInfoPtr pScrn, int numColors,
                                  int *indicies, LOCO *colors,
                                  VisualPtr pVisual);
@@ -738,10 +737,9 @@ static Bool S3PreInit(ScrnInfoPtr pScrn, int flags)
 }
 
 
-static Bool S3ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc,
-			 char **argv)
+static Bool S3ScreenInit(SCREEN_INIT_ARGS_DECL)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	S3Ptr pS3 = S3PTR(pScrn);
 	BoxRec ScreenArea;
 	int width, height, displayWidth;
@@ -1078,9 +1076,9 @@ Bool S3SaveScreen(ScreenPtr pScreen, int mode)
 }
 
 
-static void S3FreeScreen(int scrnIndex, int flags)
+static void S3FreeScreen(FREE_SCREEN_ARGS_DECL)
 {
-        ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+	SCRN_INFO_PTR(arg);
                            
         vgaHWFreeHWRec(pScrn);
         
@@ -1088,9 +1086,9 @@ static void S3FreeScreen(int scrnIndex, int flags)
 }
 
 
-Bool S3CloseScreen(int scrnIndex, ScreenPtr pScreen)
+Bool S3CloseScreen(CLOSE_SCREEN_ARGS_DECL)
 {
-        ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+        ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
         S3Ptr pS3 = S3PTR(pScrn);
         vgaHWPtr hwp = VGAHWPTR(pScrn);
 
@@ -1107,14 +1105,14 @@ Bool S3CloseScreen(int scrnIndex, ScreenPtr pScreen)
         pScrn->vtSema = FALSE;
         pScreen->CloseScreen = pS3->CloseScreen;
                 
-        return (*pScreen->CloseScreen)(scrnIndex, pScreen);
+        return (*pScreen->CloseScreen)(CLOSE_SCREEN_ARGS);
 }
 
 
-Bool S3SwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
+Bool S3SwitchMode(SWITCH_MODE_ARGS_DECL)
 {    
-	return S3ModeInit(xf86Screens[scrnIndex], mode);
-
+	SCRN_INFO_PTR(arg);
+	return S3ModeInit(pScrn, mode);
 }
 
 
@@ -1742,7 +1740,7 @@ static Bool S3ModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
 		outb(0x3c5, 0x00);
 	}
 
-	pScrn->AdjustFrame(pScrn->scrnIndex, pScrn->frameX0, pScrn->frameY0, 0);
+	pScrn->AdjustFrame(ADJUST_FRAME_ARGS(pScrn, pScrn->frameX0, pScrn->frameY0));
 
        	vgaHWProtect(pScrn, FALSE);
 
@@ -1794,9 +1792,9 @@ static Bool S3ModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
 }
 
 
-static Bool S3EnterVT(int scrnIndex, int flags)
+static Bool S3EnterVT(VT_FUNC_ARGS_DECL)
 {       
-        ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+	SCRN_INFO_PTR(arg);
         vgaHWPtr hwp = VGAHWPTR(pScrn);
 
         vgaHWUnlock(hwp);
@@ -1879,9 +1877,9 @@ static void S3Restore(ScrnInfoPtr pScrn)
 }
 
 
-static void S3LeaveVT(int scrnIndex, int flags)
+static void S3LeaveVT(VT_FUNC_ARGS_DECL)
 {
-        ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+	SCRN_INFO_PTR(arg);
         vgaHWPtr hwp = VGAHWPTR(pScrn);
 
         S3Restore(pScrn);
@@ -1891,9 +1889,9 @@ static void S3LeaveVT(int scrnIndex, int flags)
 }       
 
 
-static void S3AdjustFrame(int scrnIndex, int x, int y, int flags)
+static void S3AdjustFrame(ADJUST_FRAME_ARGS_DECL)
 {
-        ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+	SCRN_INFO_PTR(arg);
         S3Ptr pS3 = S3PTR(pScrn);
 	S3RegPtr regs = &pS3->ModeRegs;
         int vgaCRIndex = pS3->vgaCRIndex, vgaCRReg = pS3->vgaCRReg;
diff --git a/src/s3_shadow.c b/src/s3_shadow.c
index f4fbbb3..36406dd 100644
--- a/src/s3_shadow.c
+++ b/src/s3_shadow.c
@@ -69,9 +69,9 @@ S3RefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox)
 } 
 
 void
-S3PointerMoved(int index, int x, int y)
+S3PointerMoved(SCRN_ARG_TYPE arg, int x, int y)
 {
-    ScrnInfoPtr pScrn = xf86Screens[index];
+    SCRN_INFO_PTR(arg);
     S3Ptr pS3 = S3PTR(pScrn);
     int newX, newY;
 
@@ -83,7 +83,7 @@ S3PointerMoved(int index, int x, int y)
 	newY = pScrn->pScreen->width - x - 1;
     }
 
-    (*pS3->PointerMoved)(index, newX, newY);
+    (*pS3->PointerMoved)(arg, newX, newY);
 }
 
 void

commit 09c3c15aa3bfb44e35325c3beee1de08f9366734
Author: Dave Airlie <airlied@redhat.com>
Date:   Tue Jul 17 14:24:57 2012 +1000

    s3: convert to XAA-less server world.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/configure.ac b/configure.ac
index 7bce533..c469706 100644
--- a/configure.ac
+++ b/configure.ac
@@ -79,6 +79,24 @@ if test "x$XSERVER_LIBPCIACCESS" = xyes; then
 fi
 AM_CONDITIONAL(XSERVER_LIBPCIACCESS, test "x$XSERVER_LIBPCIACCESS" = xyes)
 
+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])
+
 AC_SUBST([moduledir])
 
 DRIVER_NAME=s3
diff --git a/src/s3.h b/src/s3.h
index 0875fc9..769bc3d 100644
--- a/src/s3.h
+++ b/src/s3.h
@@ -36,7 +36,10 @@
 #include "xf86Pci.h"
 #include "xf86PciInfo.h"
 #include "xf86RamDac.h"
+#ifdef HAVE_XAA_H
 #include "xaa.h"
+#endif
+#include "xf86fbman.h"
 #include "vbe.h"
 #include "vgaHW.h"
 
@@ -110,7 +113,9 @@ typedef struct _S3Rec {
 	Bool			PCIRetry;
 	Bool			ColorExpandBug;
 
+#ifdef HAVE_XAA_H
         XAAInfoRecPtr           pXAA;
+#endif
 	xf86CursorInfoPtr	pCurs;
 	xf86Int10InfoPtr	pInt10;
         XF86VideoAdaptorPtr     adaptor;
diff --git a/src/s3_accel.c b/src/s3_accel.c
index 78db3b1..a9cb9c9 100644
--- a/src/s3_accel.c
+++ b/src/s3_accel.c
@@ -36,6 +36,7 @@
 #include "s3.h"
 #include "s3_reg.h"
 
+#ifdef HAVE_XAA_H
 
 #if 0
 static Bool NicePattern;
@@ -539,6 +540,7 @@ static void S3SubsequentDashedBresenhamLine32(ScrnInfoPtr pScrn,
 }
 
 #endif
+#endif
  	
 #ifdef S3_NEWMMIO
 Bool S3AccelInitNewMMIO(ScreenPtr pScreen)
@@ -546,6 +548,7 @@ Bool S3AccelInitNewMMIO(ScreenPtr pScreen)
 Bool S3AccelInitPIO(ScreenPtr pScreen)
 #endif
 {
+#ifdef HAVE_XAA_H
 	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
 	S3Ptr pS3 = S3PTR(pScrn);
 	XAAInfoRecPtr pXAA;
@@ -625,4 +628,7 @@ Bool S3AccelInitPIO(ScreenPtr pScreen)
 #endif
 
 	return XAAInit(pScreen, pXAA);
+#else
+	return FALSE;
+#endif
 }
diff --git a/src/s3_dga.c b/src/s3_dga.c
index d585ba8..a1fa86b 100644
--- a/src/s3_dga.c
+++ b/src/s3_dga.c
@@ -41,14 +41,16 @@
 static Bool S3_SetMode(ScrnInfoPtr pScrn, DGAModePtr pMode);
 static int S3_GetViewport(ScrnInfoPtr pScrn);
 static void S3_SetViewport(ScrnInfoPtr pScrn, int x, int y, int flags);
+#ifdef HAVE_XAA_H
 static void S3_FillRect(ScrnInfoPtr pScrn, int x, int y, int w, int h,
 		        unsigned long color);
 static void S3_BltRect(ScrnInfoPtr pScrn, int srcx, int srcy, int w, int h,
 		       int dstx, int dsty);
+static void S3_Sync(ScrnInfoPtr pScrn);
+#endif
 static Bool S3_OpenFramebuffer(ScrnInfoPtr pScrn, char **name,
 			       unsigned char **mem, int *size, int *offset,
 			       int *flags);
-static void S3_Sync(ScrnInfoPtr pScrn);
 
 
 static DGAFunctionRec S3_DGAFuncs = {
@@ -57,9 +59,13 @@ static DGAFunctionRec S3_DGAFuncs = {
 	S3_SetMode,
 	S3_SetViewport,
 	S3_GetViewport,
+#ifdef HAVE_XAA_H
 	S3_Sync,
 	S3_FillRect,
 	S3_BltRect,
+#else
+	NULL, NULL, NULL,
+#endif
 	NULL
 };
 
@@ -105,8 +111,10 @@ SECOND_PASS:
 		currentMode->flags = DGA_CONCURRENT_ACCESS;
 		if (pixmap)
 			currentMode->flags |= DGA_PIXMAP_AVAILABLE;
+#ifdef HAVE_XAA_H
 		if (pS3->pXAA)
 			currentMode->flags |= DGA_FILL_RECT | DGA_BLIT_RECT;
+#endif
 		if (pMode->Flags & V_DBLSCAN)
 			currentMode->flags |= DGA_DOUBLESCAN;
 		if (pMode->Flags & V_INTERLACE)
@@ -267,6 +275,7 @@ static void S3_SetViewport(ScrnInfoPtr pScrn, int x, int y, int flags)
 }
 
 
+#ifdef HAVE_XAA_H
 static void S3_FillRect(ScrnInfoPtr pScrn, int x, int y, int w, int h,
 		        unsigned long color)
 {
@@ -296,7 +305,7 @@ static void S3_BltRect(ScrnInfoPtr pScrn, int srcx, int srcy, int w, int h,
 		SET_SYNC_FLAG(pS3->pXAA);
 	}
 }
-
+#endif
 
 static Bool S3_OpenFramebuffer(ScrnInfoPtr pScrn, char **name,
 			       unsigned char **mem, int *size, int *offset,
@@ -313,8 +322,9 @@ static Bool S3_OpenFramebuffer(ScrnInfoPtr pScrn, char **name,
 	return TRUE;
 }
 
-
+#ifdef HAVE_XAA_H
 static void S3_Sync(ScrnInfoPtr pScrn)
 {
 	WaitIdle();
 }
+#endif
diff --git a/src/s3_driver.c b/src/s3_driver.c
index df74357..01250ba 100644
--- a/src/s3_driver.c
+++ b/src/s3_driver.c
@@ -50,7 +50,6 @@
 #include "xf86RAC.h"
 #endif
 #include "compiler.h"
-#include "xaa.h"
 #include "mipointer.h"
 #include "micmap.h"
 #include "mibstore.h"

commit ba2e11464f17ba17d65214e0344422a5b00b1acb
Author: Julien Cristau <jcristau@debian.org>
Date:   Sat May 12 13:50:32 2012 +0200

    xf86-video-s3 0.6.4

diff --git a/configure.ac b/configure.ac
index 0ac34f9..7bce533 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
 # Initialize Autoconf
 AC_PREREQ([2.60])
 AC_INIT([xf86-video-s3],
-        [0.6.3],
+        [0.6.4],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         [xf86-video-s3])
 AC_CONFIG_SRCDIR([Makefile.am])

commit 6a8cead012e36c9e709f0198af17a94dfae17048
Author: Julien Cristau <jcristau@debian.org>
Date:   Sat May 12 13:47:36 2012 +0200

    Include unistd.h for usleep
    
    Signed-off-by: Julien Cristau <jcristau@debian.org>

diff --git a/src/s3_Ti.c b/src/s3_Ti.c
index 9ea949a..fd83bfb 100644
--- a/src/s3_Ti.c
+++ b/src/s3_Ti.c
@@ -29,6 +29,8 @@
 #include "config.h"
 #endif
 
+#include <unistd.h>
+
 #include "xf86.h"
 #include "xf86_OSproc.h"
 

commit db87c42485f7748a7a5ccdc94f4fc6065766bd0f
Author: Julien Cristau <jcristau@debian.org>
Date:   Sat May 12 13:44:58 2012 +0200

    Use standard allocation functions
    
    Signed-off-by: Julien Cristau <jcristau@debian.org>

diff --git a/src/s3_bios.c b/src/s3_bios.c
index 6ea9181..323e2ce 100644
--- a/src/s3_bios.c
+++ b/src/s3_bios.c
@@ -45,7 +45,7 @@ static unsigned char *find_bios_string(ScrnInfoPtr pScrn, int BIOSbase,
 
 	S3Ptr pS3 = S3PTR(pScrn);
 
-	bios = xalloc(BIOS_BSIZE);
+	bios = malloc(BIOS_BSIZE);
 	if (bios = NULL)
 		return NULL;
 
@@ -86,7 +86,7 @@ static unsigned char *find_bios_string(ScrnInfoPtr pScrn, int BIOSbase,
 						return &bios[j+l2];
 		}
 error:
-	xfree(bios);
+	free(bios);
 	return NULL;
 }
 
diff --git a/src/s3_dga.c b/src/s3_dga.c
index 680aa02..d585ba8 100644
--- a/src/s3_dga.c
+++ b/src/s3_dga.c
@@ -82,15 +82,15 @@ static DGAModePtr S3SetupDGAMode(ScrnInfoPtr pScrn, DGAModePtr modes,
 		otherPitch = secondPitch ? secondPitch : pMode->HDisplay;
 
 		if (pMode->HDisplay != otherPitch) {
-			newmodes = xrealloc(modes, (*num + 2) * sizeof(DGAModeRec));
+			newmodes = realloc(modes, (*num + 2) * sizeof(DGAModeRec));
 			oneMore = TRUE;
 		} else {
-			newmodes = xrealloc(modes, (*num + 1) * sizeof(DGAModeRec));
+			newmodes = realloc(modes, (*num + 1) * sizeof(DGAModeRec));
 			oneMore = FALSE;
 		}
 
 		if (!newmodes) {
-			xfree(modes);
+			free(modes);
 			return NULL;
 		}
 
diff --git a/src/s3_driver.c b/src/s3_driver.c
index 2011dfc..df74357 100644
--- a/src/s3_driver.c
+++ b/src/s3_driver.c
@@ -237,10 +237,7 @@ static Bool S3GetRec(ScrnInfoPtr pScrn)
                         
 static void S3FreeRec(ScrnInfoPtr pScrn)
 {
-        if (!pScrn->driverPrivate)
-                return;
-
-        xfree(pScrn->driverPrivate);
+        free(pScrn->driverPrivate);
         pScrn->driverPrivate = NULL;
 }
 
@@ -271,7 +268,7 @@ static Bool S3Probe(DriverPtr drv, int flags)
 					devSections, numDevSections,
 					drv, &usedChips);
 
-	xfree(devSections);
+	free(devSections);
 
 	if (numUsed <= 0)
 		return FALSE;
@@ -298,7 +295,7 @@ static Bool S3Probe(DriverPtr drv, int flags)
 		foundScreen = TRUE;
         }
                 
-        xfree(usedChips);
+        free(usedChips);
                 
         return foundScreen;
 }
@@ -427,7 +424,7 @@ static Bool S3PreInit(ScrnInfoPtr pScrn, int flags)
         pEnt = xf86GetEntityInfo(pScrn->entityList[0]);
 #ifndef XSERVER_LIBPCIACCESS
         if (pEnt->resources) {
-                xfree(pEnt);
+                free(pEnt);
                 S3FreeRec(pScrn);
                 return FALSE;
         }
@@ -487,7 +484,7 @@ static Bool S3PreInit(ScrnInfoPtr pScrn, int flags)
         } else
 	        pS3->ChipRev = PCI_DEV_REVISION(pS3->PciInfo);
         
-        xfree(pEnt);
+        free(pEnt);
         
         xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Chipset: \"%s\"\n", 
 		   pScrn->chipset);
@@ -795,7 +792,7 @@ static Bool S3ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc,
         /* no screen rotation assumed */
         if(pS3->shadowFB) {
         	pS3->ShadowPitch = BitmapBytePad(pScrn->bitsPerPixel * width);
-        	pS3->ShadowPtr = xalloc(pS3->ShadowPitch * height);
+        	pS3->ShadowPtr = malloc(pS3->ShadowPitch * height);
 		displayWidth = pS3->ShadowPitch / (pScrn->bitsPerPixel >> 3);
         } else {
         	pS3->ShadowPtr = NULL;
@@ -1105,8 +1102,7 @@ Bool S3CloseScreen(int scrnIndex, ScreenPtr pScreen)
                 S3UnmapMem(pScrn);
         }
 
-	if (pS3->DGAModes)
-		xfree(pS3->DGAModes);
+	free(pS3->DGAModes);
 	pS3->DGAModes = NULL;
 
         pScrn->vtSema = FALSE;
diff --git a/src/s3_video.c b/src/s3_video.c
index 9a2d458..f47bf20 100644
--- a/src/s3_video.c
+++ b/src/s3_video.c
@@ -79,7 +79,7 @@ void S3InitVideo(ScreenPtr pScreen)
             		adaptors = &newAdaptor;
         	} else {
             		newAdaptors =  /* need to free this someplace */
-                		xalloc((num_adaptors + 1) * sizeof(XF86VideoAdaptorPtr*));   
+                		malloc((num_adaptors + 1) * sizeof(XF86VideoAdaptorPtr*));   
             		if(newAdaptors) {
                 		memcpy(newAdaptors, adaptors, num_adaptors *
                                        sizeof(XF86VideoAdaptorPtr));
@@ -93,8 +93,7 @@ void S3InitVideo(ScreenPtr pScreen)
     	if(num_adaptors)
         	xf86XVScreenInit(pScreen, adaptors, num_adaptors);
             
-    	if(newAdaptors)
-        	xfree(newAdaptors);
+        free(newAdaptors);
 }
 
 
@@ -211,10 +210,10 @@ static XF86VideoAdaptorPtr S3AllocAdaptor(ScrnInfoPtr pScrn)
     	if(!(adapt = xf86XVAllocateVideoAdaptorRec(pScrn)))
         	return NULL;
    
-    	if(!(pPriv = xcalloc(1, sizeof(S3PortPrivRec)  +
+    	if(!(pPriv = calloc(1, sizeof(S3PortPrivRec)  +
 			     (sizeof(DevUnion) * S3_MAX_PORTS))))
     	{
-        	xfree(adapt);
+        	free(adapt);
         	return NULL;
     	}
     

commit fb368727b9251b23f937a6432946dd376a153e27
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date:   Wed Dec 28 20:04:22 2011 -0800

    If it couldn't allocate memory, don't attempt to write a bunch of values
    to the NULL pointer before returning it, but just pass the NULL along
    right away.
    
    Resolves parfait warnings of the form:
    
    Error: Null pointer dereference (CWE 476)
       Write to null pointer 'adapt'
            at line 248 of driver/xf86-video-s3/src/s3_video.c in function 'S3SetupImageVideoOverlay'.
              Function 'S3AllocAdaptor' may return constant 'NULL' at line 218, called at line 246.
              Null pointer introduced at line 218 in function 'S3AllocAdaptor'.
    
    repeated for every line writing to the adapt pointer in the function.
    
    [ This bug was found by the Parfait 0.4.2 bug checking tool.
      For more information see http://labs.oracle.com/projects/parfait/ ]
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>

diff --git a/src/s3_video.c b/src/s3_video.c
index 3e88889..9a2d458 100644
--- a/src/s3_video.c
+++ b/src/s3_video.c
@@ -244,6 +244,8 @@ static XF86VideoAdaptorPtr S3SetupImageVideoOverlay(ScreenPtr pScreen)
 	XF86VideoAdaptorPtr adapt;
 
 	adapt = S3AllocAdaptor(pScrn);
+	if (adapt == NULL)
+		return NULL;
 
     	adapt->type = XvWindowMask | XvInputMask | XvImageMask;
     	adapt->flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT;

commit e5c1c27b83e93d9cb2a74c7c4ee85b36eb1bbdef
Author: Adam Jackson <ajax@redhat.com>
Date:   Mon Dec 19 17:17:28 2011 -0500

    Fix for new vgahw ABI
    
    Signed-off-by: Adam Jackson <ajax@redhat.com>

diff --git a/src/s3_driver.c b/src/s3_driver.c
index ec7e7ee..2011dfc 100644
--- a/src/s3_driver.c
+++ b/src/s3_driver.c
@@ -326,6 +326,7 @@ static Bool S3PreInit(ScrnInfoPtr pScrn, int flags)
                 return FALSE;
         
         hwp = VGAHWPTR(pScrn);
+	vgaHWSetStdFuncs(hwp);
         vgaHWGetIOBase(hwp);
         
         pScrn->monitor = pScrn->confScreen->monitor;

commit 1aa3e0413bcf89734083649c2057fc4065c8348d
Author: Adam Jackson <ajax@redhat.com>
Date:   Mon Dec 19 17:16:44 2011 -0500

    Fall back to shadowfb if XAA is unavailable
    
    Signed-off-by: Adam Jackson <ajax@redhat.com>

diff --git a/src/s3_driver.c b/src/s3_driver.c
index 4519b33..ec7e7ee 100644
--- a/src/s3_driver.c
+++ b/src/s3_driver.c
@@ -441,6 +441,15 @@ static Bool S3PreInit(ScrnInfoPtr pScrn, int flags)
 		vbeFree(pVBE);
 	}
 	
+	xf86LoadSubModule(pScrn, "fb");
+
+	if (!xf86LoadSubModule(pScrn, "xaa")) {
+		xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+			   "Falling back to shadowfb\n");
+		pS3->NoAccel = TRUE;
+		pS3->shadowFB = TRUE;
+	}
+
 	if (pS3->shadowFB) {
 		if (!xf86LoadSubModule(pScrn, "shadowfb")) {
 			S3FreeRec(pScrn);
@@ -728,11 +737,6 @@ static Bool S3PreInit(ScrnInfoPtr pScrn, int flags)
         xf86PrintModes(pScrn);
         xf86SetDpi(pScrn, 0, 0);
  
-        xf86LoadSubModule(pScrn, "fb");


Reply to: