Sophie

Sophie

distrib > Mageia > 5 > x86_64 > media > core-release-src > by-pkgid > c471c5773edd56202c16f056fce84ad4 > files > 2

x11-driver-video-xgi-1.6.0-18.mga5.src.rpm

diff --git a/configure.ac b/configure.ac
index 0116265..3dae714 100644
--- a/configure.ac
+++ b/configure.ac
@@ -119,6 +119,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])
 AC_DEFINE_UNQUOTED(XGI_RELEASE_DATE, ["$RELEASE_DATE"], [Driver release])
 DRIVER_NAME=xgi
diff --git a/man/xgi.man b/man/xgi.man
index 19880f2..5699ae4 100644
--- a/man/xgi.man
+++ b/man/xgi.man
@@ -1,4 +1,3 @@
-.\" $XFree86: xc/programs/Xserver/hw/xfree86/drivers/xgi/xgi.man,v 1.14 2003/11/12 16:50:36 twini Exp $
 .\" shorthand for double quote that works everywhere.
 .ds q \N'34'
 .TH XGI __drivermansuffix__ __vendorversion__
diff --git a/src/Makefile.am b/src/Makefile.am
index 96e7018..54b0daf 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -29,6 +29,7 @@ xgi_drv_la_LDFLAGS = -module -avoid-version
 xgi_drv_ladir = @moduledir@/drivers
 
 xgi_drv_la_SOURCES = \
+	compat-api.h\
 	init.c \
 	init.h \
 	osdef.h \
@@ -36,6 +37,8 @@ xgi_drv_la_SOURCES = \
 	vb_def.h \
 	vb_ext.c \
 	vb_ext.h \
+	vb_i2c.c \
+	vb_i2c.h \
 	vb_init.c \
 	vb_init.h \
 	vb_setmode.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/vb_i2c.c b/src/vb_i2c.c
index 96e26e3..d238d90 100755
--- a/src/vb_i2c.c
+++ b/src/vb_i2c.c
@@ -1607,7 +1607,7 @@ VOID vWriteClockLine(PXGI_HW_DEVICE_INFO pHWDE, UCHAR data)
 	else if(pHWDE->crtno == 2)
 		vWriteClockLineFCNT(pHWDE, data);
 	else
-		ErrorF("Error(XGI) : Unkonwn output device! \n");
+	    ErrorF("Error(XGI) : Unknown output device!\n");
 }
 
 VOID vWriteDataLine(PXGI_HW_DEVICE_INFO pHWDE, UCHAR data)
@@ -1619,7 +1619,7 @@ VOID vWriteDataLine(PXGI_HW_DEVICE_INFO pHWDE, UCHAR data)
 	else if(pHWDE->crtno == 2)
 		vWriteDataLineFCNT(pHWDE, data);
 	else
-		ErrorF("Error(XGI) : Unkonwn output device! \n");
+	    ErrorF("Error(XGI) : Unknown output device!\n");
 }
 
 BOOLEAN bReadClockLine(PXGI_HW_DEVICE_INFO pHWDE)
@@ -1630,8 +1630,9 @@ BOOLEAN bReadClockLine(PXGI_HW_DEVICE_INFO pHWDE)
 		return(bReadClockLineDVI(pHWDE));
 	else if(pHWDE->crtno == 2)
 		return(bReadClockLineFCNT(pHWDE));
-	else
-		ErrorF("Error(XGI) : Unkonwn output device! \n");
+
+	ErrorF("Error(XGI) : Unknown output device!\n");
+	return FALSE;
 }
 
 BOOLEAN bReadDataLine(PXGI_HW_DEVICE_INFO pHWDE)
@@ -1642,8 +1643,9 @@ BOOLEAN bReadDataLine(PXGI_HW_DEVICE_INFO pHWDE)
 		return(bReadDataLineDVI(pHWDE));
 	else if(pHWDE->crtno == 2)
 		return(bReadDataLineFCNT(pHWDE));
-	else
-		ErrorF("Error(XGI) : Unkonwn output device! \n");
+
+	ErrorF("Error(XGI) : Unknown output device!\n");
+	return FALSE;
 }
 
 BOOLEAN bEDIDCheckSum(PUCHAR  pjEDIDBuf,ULONG   ulBufSize)
@@ -1890,4 +1892,4 @@ BOOLEAN bGetEDID(
 
    PDEBUGI2C(ErrorF("bGetEDID()-return(%d)\n", status == NO_ERROR ? 1:0));
     return (status == NO_ERROR);
-}
\ No newline at end of file
+}
diff --git a/src/vb_init.c b/src/vb_init.c
index 8338410..50980c4 100755
--- a/src/vb_init.c
+++ b/src/vb_init.c
@@ -131,6 +131,8 @@ static void XGINew_SetDRAMDefaultRegister340(PXGI_HW_DEVICE_INFO, USHORT,
 static void XGINew_SetDRAMDefaultRegisterXG45(PXGI_HW_DEVICE_INFO, USHORT, 
     PVB_DEVICE_INFO);
 static UCHAR XGINew_Get340DRAMType(PXGI_HW_DEVICE_INFO, PVB_DEVICE_INFO);
+/* horrible */
+#define XGINew_GetXG20DRAMType XGINew_Get340DRAMType
 
 static int XGINew_SetDDRChannel(int index, UCHAR ChannelNo,
     UCHAR XGINew_ChannelAB, const USHORT DRAMTYPE_TABLE[][5],
@@ -1451,7 +1453,7 @@ void XGINew_SetDRAMDefaultRegister340( PXGI_HW_DEVICE_INFO HwDeviceExtension ,
     }
 
     temp3 = 0 ;
-    for( k = 0 ; k < 4 ; k++ )
+    for( k = 1 ; k < 4 ; k++ )
     {
         XGI_SetRegANDOR((XGIIOADDRESS) P3d4 , 0x6E , 0xFC , temp3 ) ;		/* CR6E_D[1:0] select channel */
         temp2 = 0 ;
diff --git a/src/vgatypes.h b/src/vgatypes.h
index 8a60927..df002b8 100755
--- a/src/vgatypes.h
+++ b/src/vgatypes.h
@@ -1,5 +1,3 @@
-/* $XFree86$ */
-/* $XdotOrg$ */
 /*
  * General type definitions for universal mode switching modules
  *
@@ -133,7 +131,7 @@ typedef unsigned long XGIIOADDRESS;
 #endif
 
 #ifdef LINUX_XF86
-typedef IOADDRESS XGIIOADDRESS;
+typedef unsigned long XGIIOADDRESS;
 #endif
 
 #ifndef VBIOS_VER_MAX_LENGTH
diff --git a/src/xgi.h b/src/xgi.h
index 715502f..0bc8d30 100755
--- a/src/xgi.h
+++ b/src/xgi.h
@@ -169,7 +169,9 @@ extern BOOL g_bRunTimeDebug;
 #endif
 
 /* Jong 01/13/2009; support EXA */
+#ifdef HAVE_XAA_H
 #define XGI_USE_XAA 
+#endif
 /* #define XGI_USE_EXA */
 
 #ifdef XGI_USE_XAA
@@ -194,6 +196,8 @@ extern BOOL g_bRunTimeDebug;
 #include "vgatypes.h"
 #include "vb_struct.h"
 
+#include "compat-api.h"
+
 #ifdef XF86DRI
 #define XGINEWDRI
 #undef XGINEWDRI2
@@ -623,7 +627,7 @@ typedef struct {
     unsigned char *     FbBase;         /* VRAM virtual linear address */
     CARD32              IOAddress;      /* MMIO physical address */
     unsigned char *     IOBase;         /* MMIO linear address */
-    IOADDRESS           IODBase;        /* Base of PIO memory area */
+    unsigned long           IODBase;        /* Base of PIO memory area */
 #ifdef __alpha__
     unsigned char *     IOBaseDense;    /* MMIO for Alpha platform */
 #endif
@@ -981,6 +985,7 @@ int compute_vclk(int Clock, int *out_n, int *out_dn, int *out_div,
 void XGI_WaitBeginRetrace(XGIIOADDRESS RelIO);
 void XGI_WaitEndRetrace(XGIIOADDRESS RelIO);
 
+#include <unistd.h>
 /* 2005/11/21 added by jjtseng */
 #define DelayS(sec) usleep((sec)*1000000)
 #define DelayMS(millisec) usleep((millisec)*1000)
diff --git a/src/xgi_accel.c b/src/xgi_accel.c
index c072691..8392628 100755
--- a/src/xgi_accel.c
+++ b/src/xgi_accel.c
@@ -200,20 +200,7 @@ extern int FbDevExist;
 #endif
 
 #if X_BYTE_ORDER == X_BIG_ENDIAN
-static CARD32 BE_SWAP32 (CARD32 val)
-{
-	PDEBUG(ErrorF("X_BIG_ENDIAN...\n"));
-    if (CurrentColorDepth == 8)
-	    return   ((((val) & 0x000000ff) << 24) | \
-                  (((val) & 0x0000ff00) << 8) |  \
-                  (((val) & 0x00ff0000) >> 8) |  \
-                  (((val) & 0xff000000) >> 24));
-    if (CurrentColorDepth == 24)
-        return val;
-    if (CurrentColorDepth == 16)
-        return ((((val) & 0x0000ffff) << 16) | \
-		         (((val) & 0xffff0000) >> 16));
-}    
+#define BE_SWAP32(x) lswapl(x)
 #else 
 static CARD32 BE_SWAP32 (CARD32 val)
 {
@@ -639,7 +626,7 @@ Volari_AccelInit(ScreenPtr pScreen)
     XAAInfoRecPtr     infoPtr;
 #endif
 
-    ScrnInfoPtr       pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr       pScrn = xf86ScreenToScrn(pScreen);
     XGIPtr            pXGI = XGIPTR(pScrn);
     int               reservedFbSize;
     long               UsableFbSize;
@@ -958,6 +945,7 @@ Volari_AccelInit(ScreenPtr pScreen)
             return TRUE;
 	}
 #endif /* EXA */
+    return TRUE;
 }
 
 void
@@ -1244,7 +1232,7 @@ Volari_SubsequentMonoPatternFill(ScrnInfoPtr pScrn,
 #ifdef XGI_USE_EXA  /* ---------------------------- EXA -------------------------- */
 void XGIEXASync(ScreenPtr pScreen, int marker)
 {
-	XGIPtr pXGI = XGIPTR(xf86Screens[pScreen->myNum]);
+	XGIPtr pXGI = XGIPTR(xf86ScreenToScrn(pScreen));
 
 	PACCELDEBUG(ErrorF("XGIEXASync()...\n"));
 
@@ -1254,7 +1242,7 @@ void XGIEXASync(ScreenPtr pScreen, int marker)
 static Bool
 XGIPrepareSolid(PixmapPtr pPixmap, int alu, Pixel planemask, Pixel fg)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen);
 	XGIPtr pXGI = XGIPTR(pScrn);
 	CARD16 pitch;
 
@@ -1299,7 +1287,7 @@ XGIPrepareSolid(PixmapPtr pPixmap, int alu, Pixel planemask, Pixel fg)
 static void
 XGISolid(PixmapPtr pPixmap, int x1, int y1, int x2, int y2)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen);
 	XGIPtr pXGI = XGIPTR(pScrn);
 	CARD32  Command;
 
@@ -1323,7 +1311,7 @@ static Bool
 XGIPrepareCopy(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);
 	XGIPtr pXGI = XGIPTR(pScrn);
 	CARD32 srcbase, dstbase;
 	CARD16 srcpitch, dstpitch;
@@ -1383,7 +1371,7 @@ XGIPrepareCopy(PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap, int xdir, int ydir,
 static void
 XGICopy(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);
 	XGIPtr pXGI = XGIPTR(pScrn);
 	CARD32  Command;
 
@@ -1410,7 +1398,7 @@ static Bool
 XGICheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
 				PicturePtr pDstPicture)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pDstPicture->pDrawable->pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pDstPicture->pDrawable->pScreen);
 	XGIPtr pXGI = XGIPTR(pScrn);
 
 	PACCELDEBUG(ErrorF("XGICheckComposite()...\n"));
@@ -1436,7 +1424,7 @@ static Bool
 XGIPrepareComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
 				PicturePtr pDstPicture, PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pDst->drawable.pScreen);
 	XGIPtr pXGI = XGIPTR(pScrn);
 
 	PACCELDEBUG(ErrorF("XGIPrepareComposite()...\n"));
@@ -1451,7 +1439,7 @@ static void
 XGIComposite(PixmapPtr pDst, int srcX, int srcY, int maskX, int maskY, int dstX, int dstY,
 				int width, int height)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pDst->drawable.pScreen);
 	XGIPtr pXGI = XGIPTR(pScrn);
 
 	PACCELDEBUG(ErrorF("XGIComposite()...\n"));
@@ -1546,7 +1534,7 @@ void XGIMemCopyFromVideoRam(XGIPtr pXGI, unsigned char *to, unsigned char *from,
 Bool
 XGIUploadToScreen(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);
 	XGIPtr pXGI = XGIPTR(pScrn);
 	unsigned char *dst = pDst->devPrivate.ptr;
 	int dst_pitch = exaGetPixmapPitch(pDst);
@@ -1599,7 +1587,7 @@ XGIUploadToScreen(PixmapPtr pDst, int x, int y, int w, int h, char *src, int src
 Bool
 XGIUploadToScratch(PixmapPtr pSrc, PixmapPtr pDst)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pSrc->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pSrc->drawable.pScreen);
 	XGIPtr pXGI = XGIPTR(pScrn);
 	unsigned char *src, *dst;
 	int src_pitch = exaGetPixmapPitch(pSrc);
@@ -1677,7 +1665,7 @@ XGIUploadToScratch(PixmapPtr pSrc, PixmapPtr pDst)
 Bool
 XGIDownloadFromScreen(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);
 	XGIPtr pXGI = XGIPTR(pScrn);
 	unsigned char *src = pSrc->devPrivate.ptr;
 	int src_pitch = exaGetPixmapPitch(pSrc);
@@ -1720,7 +1708,7 @@ XGIDownloadFromScreen(PixmapPtr pSrc, int x, int y, int w, int h, char *dst, int
 
 void XGIScratchSave(ScreenPtr pScreen, ExaOffscreenArea *area)
 {
-	XGIPtr pXGI = XGIPTR(xf86Screens[pScreen->myNum]);
+	XGIPtr pXGI = XGIPTR(xf86ScreenToScrn(pScreen));
 	pXGI->exa_scratch = NULL;
 }
 #endif /* EXA */
diff --git a/src/xgi_cursor.c b/src/xgi_cursor.c
index 2c7fedd..55890d4 100755
--- a/src/xgi_cursor.c
+++ b/src/xgi_cursor.c
@@ -172,7 +172,7 @@ Volari_LoadCursorImage(ScrnInfoPtr pScrn, unsigned char *src)
 static Bool
 Volari_UseHWCursor(ScreenPtr pScreen, CursorPtr pCurs)
 {
-    ScrnInfoPtr       pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr       pScrn = xf86ScreenToScrn(pScreen);
     DisplayModePtr     mode = pScrn->currentMode;
 
     if (mode->Flags & V_INTERLACE)
@@ -186,7 +186,7 @@ Volari_UseHWCursor(ScreenPtr pScreen, CursorPtr pCurs)
 Bool
 Volari_UseHWCursorARGB(ScreenPtr pScreen, CursorPtr pCurs)
 {
-    ScrnInfoPtr       pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr       pScrn = xf86ScreenToScrn(pScreen);
     DisplayModePtr     mode = pScrn->currentMode;
     XGIPtr pXGI = XGIPTR(pScrn);
 
@@ -245,7 +245,7 @@ Volari_LoadCursorARGB(ScrnInfoPtr pScrn, CursorPtr pCursor)
 Bool
 XGIHWCursorInit(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     XGIPtr pXGI = XGIPTR(pScrn);
     xf86CursorInfoPtr infoPtr;
 
diff --git a/src/xgi_dga.c b/src/xgi_dga.c
index 04f90aa..3b798d7 100755
--- a/src/xgi_dga.c
+++ b/src/xgi_dga.c
@@ -40,11 +40,12 @@
 #include "xf86_OSproc.h"
 #include "xf86Pci.h"
 #include "xf86PciInfo.h"
-#include "xaa.h"
-#include "xaalocal.h"
 #include "xgi.h"
 #include "xgi_regs.h"
 #include "dgaproc.h"
+#ifdef HAVE_XAA_H
+#include "xaalocal.h"
+#endif
 
 #ifndef NEW_DGAOPENFRAMEBUFFER
 static Bool XGI_OpenFramebuffer(ScrnInfoPtr, char **, unsigned char **,
@@ -103,18 +104,18 @@ XGISetupDGAMode(
 
 	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;
 	}
 	modes = newmodes;
@@ -192,7 +193,7 @@ SECOND_PASS:
 Bool
 XGIDGAInit(ScreenPtr pScreen)
 {
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    XGIPtr pXGI = XGIPTR(pScrn);
    DGAModePtr modes = NULL;
    int num = 0;
@@ -259,8 +260,8 @@ XGI_SetMode(
 
 	pScrn->currentMode = pXGI->CurrentLayout.mode;
 
-        (*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));
         pXGI->DGAactive = FALSE;
 
     } else {	/* set new mode */
@@ -275,10 +276,10 @@ XGI_SetMode(
 	pXGI->CurrentLayout.depth        = pMode->depth;
 	pXGI->CurrentLayout.displayWidth = pMode->bytesPerScanline / (pMode->bitsPerPixel >> 3);
 
-    	(*pScrn->SwitchMode)(index, pMode->mode, 0);
+    	(*pScrn->SwitchMode)(SWITCH_MODE_ARGS(pScrn, pMode->mode));
 	/* TW: Adjust viewport to 0/0 after mode switch */
 	/* This should fix the vmware-in-dualhead problems */
-	(*pScrn->AdjustFrame)(index, 0, 0, 0);
+	(*pScrn->AdjustFrame)(ADJUST_FRAME_ARGS(pScrn, 0, 0));
     }
 
     return TRUE;
@@ -296,7 +297,7 @@ XGI_GetViewport(ScrnInfoPtr pScrn)
 static void
 XGI_SetViewport(ScrnInfoPtr pScrn, int x, int y, int flags)
 {
-   (*pScrn->AdjustFrame)(pScrn->pScreen->myNum, x, y, flags);
+   (*pScrn->AdjustFrame)(ADJUST_FRAME_ARGS(pScrn, x, y));
 }
 
 static void
diff --git a/src/xgi_dri.c b/src/xgi_dri.c
index 93687e1..c4cbfed 100755
--- a/src/xgi_dri.c
+++ b/src/xgi_dri.c
@@ -46,7 +46,6 @@
 
 #include "xf86.h"
 #include "xf86_OSproc.h"
-#include "xf86Priv.h"
 
 #include "xf86PciInfo.h"
 #include "xf86Pci.h"
@@ -118,7 +117,7 @@ ULONG CheckAGPSlot(ScreenPtr pScreen, ULONG uNextLink);
 static Bool
 XGIInitVisualConfigs(ScreenPtr pScreen)
 {
-  ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+  ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
   XGIPtr pXGI = XGIPTR(pScrn);
   int numConfigs = 0;
   __GLXvisualConfig *pConfigs = 0;
@@ -145,13 +144,13 @@ XGIInitVisualConfigs(ScreenPtr pScreen)
     }
     if (!(pXGIConfigs = (XGIConfigPrivPtr)xnfcalloc(sizeof(XGIConfigPrivRec),
 						    numConfigs))) {
-      xfree(pConfigs);
+      free(pConfigs);
       return FALSE;
     }
     if (!(pXGIConfigPtrs = (XGIConfigPrivPtr*)xnfcalloc(sizeof(XGIConfigPrivPtr),
 							  numConfigs))) {
-      xfree(pConfigs);
-      xfree(pXGIConfigs);
+      free(pConfigs);
+      free(pXGIConfigs);
       return FALSE;
     }
     for (i=0; i<numConfigs; i++)
@@ -241,7 +240,7 @@ Bool XGIDRIScreenInit(ScreenPtr pScreen)
   return FALSE;
 #else /* linux */
 
-  ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+  ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
   XGIPtr pXGI = XGIPTR(pScrn);
   DRIInfoPtr pDRIInfo;
   XGIDRIPtr pXGIDRI;
@@ -286,7 +285,7 @@ Bool XGIDRIScreenInit(ScreenPtr pScreen)
     pDRIInfo->ddxDriverMajorVersion = PACKAGE_VERSION_MAJOR;
     pDRIInfo->ddxDriverMinorVersion = PACKAGE_VERSION_MINOR;
     pDRIInfo->ddxDriverPatchVersion = PACKAGE_VERSION_PATCHLEVEL;
-    pDRIInfo->frameBufferPhysicalAddress = pXGI->FbAddress;
+    pDRIInfo->frameBufferPhysicalAddress = (pointer) pXGI->FbAddress;
     pDRIInfo->frameBufferSize = pXGI->FbMapSize;
 
   /* ?? */
@@ -333,7 +332,7 @@ Bool XGIDRIScreenInit(ScreenPtr pScreen)
   pDRIInfo->bufferRequests = DRI_ALL_WINDOWS;
 
   if (!DRIScreenInit(pScreen, pDRIInfo, &pXGI->drmSubFD)) {
-    xfree(pDRIInfo->devPrivate);
+    free(pDRIInfo->devPrivate);
     pDRIInfo->devPrivate=0;
     DRIDestroyInfoRec(pXGI->pDRIInfo);
     pXGI->pDRIInfo=0;
@@ -530,21 +529,21 @@ Bool XGIDRIScreenInit(ScreenPtr pScreen)
 void
 XGIDRICloseScreen(ScreenPtr pScreen)
 {
-  ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+  ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
   XGIPtr pXGI = XGIPTR(pScrn);
 
   DRICloseScreen(pScreen);
 
   if (pXGI->pDRIInfo) {
     if (pXGI->pDRIInfo->devPrivate) {
-      xfree(pXGI->pDRIInfo->devPrivate);
+      free(pXGI->pDRIInfo->devPrivate);
       pXGI->pDRIInfo->devPrivate=0;
     }
     DRIDestroyInfoRec(pXGI->pDRIInfo);
     pXGI->pDRIInfo=0;
   }
-  if (pXGI->pVisualConfigs) xfree(pXGI->pVisualConfigs);
-  if (pXGI->pVisualConfigsPriv) xfree(pXGI->pVisualConfigsPriv);
+  if (pXGI->pVisualConfigs) free(pXGI->pVisualConfigs);
+  if (pXGI->pVisualConfigsPriv) free(pXGI->pVisualConfigsPriv);
 
   if(pXGI->agpSize){
 /* ErrorF("Freeing agp memory\n"); */
@@ -574,7 +573,7 @@ XGIDestroyContext(ScreenPtr pScreen, drm_context_t hwContext,
 Bool
 XGIDRIFinishScreenInit(ScreenPtr pScreen)
 {
-  ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+  ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
   XGIPtr pXGI = XGIPTR(pScrn);
 /*  XGIPtr pXGI = XGIPTR(pScrn); */
   XGIDRIPtr pXGIDRI;
@@ -630,7 +629,7 @@ XGIDRISwapContext(ScreenPtr pScreen, DRISyncType syncType,
 		   DRIContextType oldContextType, void *oldContext,
 		   DRIContextType newContextType, void *newContext)
 {
-  ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+  ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
   XGIPtr pXGI = XGIPTR(pScrn);
 
   /* mEndPrimitive */
@@ -650,7 +649,7 @@ static void
 XGIDRIInitBuffers(WindowPtr pWin, RegionPtr prgn, CARD32 index)
 {
   ScreenPtr pScreen = pWin->drawable.pScreen;
-  ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+  ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
   XGIPtr pXGI = XGIPTR(pScrn);
 
   Volari_Idle(pXGI);
@@ -661,7 +660,7 @@ XGIDRIMoveBuffers(WindowPtr pParent, DDXPointRec ptOldOrg,
 		   RegionPtr prgnSrc, CARD32 index)
 {
   ScreenPtr pScreen = pParent->drawable.pScreen;
-  ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+  ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
   XGIPtr pXGI = XGIPTR(pScrn);
 
   Volari_Idle(pXGI);
@@ -674,7 +673,7 @@ XGIDRIMoveBuffers(WindowPtr pParent, DDXPointRec ptOldOrg,
 ULONG CheckAGPSlot(ScreenPtr pScreen, ULONG uNextLink)
 {
 	ULONG uBuffer = 0, uLink = 0, uValue = 0 ;
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	XGIPtr pXGI = XGIPTR(pScrn);
 		
 	uBuffer = pciReadLong(pXGI->PciTag, uNextLink);
@@ -700,7 +699,7 @@ ULONG CheckAGPSlot(ScreenPtr pScreen, ULONG uNextLink)
  */
 ULONG IsXGIAGPCard(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     XGIPtr pXGI = XGIPTR(pScrn);
 
 
diff --git a/src/xgi_driver.c b/src/xgi_driver.c
index b4f83b8..d5da592 100755
--- a/src/xgi_driver.c
+++ b/src/xgi_driver.c
@@ -54,7 +54,7 @@
 #include "fb.h"
 #include "micmap.h"
 #include "xf86.h"
-#include "xf86Priv.h"
+#include "xf86Module.h"
 #include "xf86_OSproc.h"
 #if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 6
 #include "xf86Resources.h"
@@ -106,6 +106,10 @@
 #include <unistd.h>
 #endif
 
+#ifndef DEFAULT_DPI
+#define DEFAULT_DPI 96
+#endif
+
 /* Jong 01/22/2009; compiler error; type conflict */
 /*
 #include <fcntl.h>
@@ -224,136 +228,6 @@ static PciChipsets XGIPciChipsets[] = {
     {-1, -1, RES_UNDEFINED}
 };
 
-static const char *xaaSymbols[] = {
-    "XAACopyROP",
-    "XAACreateInfoRec",
-    "XAADestroyInfoRec",
-    "XAAFillMono8x8PatternRects",
-    "XAAPatternROP",
-    "XAAHelpPatternROP",
-    "XAAInit",
-    NULL
-};
-
-#ifdef XGI_USE_EXA
-static const char *exaSymbols[] = {
-    "exaGetVersion",
-    "exaDriverInit",
-    "exaDriverFini",
-    "exaOffscreenAlloc",
-    "exaOffscreenFree",
-    NULL
-};
-#endif
-
-static const char *vgahwSymbols[] = {
-    "vgaHWFreeHWRec",
-    "vgaHWGetHWRec",
-    "vgaHWGetIOBase",
-    "vgaHWGetIndex",
-    "vgaHWInit",
-    "vgaHWLock",
-    "vgaHWMapMem",
-    "vgaHWUnmapMem",
-    "vgaHWProtect",
-    "vgaHWRestore",
-    "vgaHWSave",
-    "vgaHWSaveScreen",
-    "vgaHWUnlock",
-    NULL
-};
-
-static const char *fbSymbols[] = {
-    "fbPictureInit",
-    "fbScreenInit",
-    NULL
-};
-
-static const char *shadowSymbols[] = {
-    "ShadowFBInit",
-    NULL
-};
-
-static const char *ramdacSymbols[] = {
-    "xf86CreateCursorInfoRec",
-    "xf86DestroyCursorInfoRec",
-    "xf86InitCursor",
-    NULL
-};
-
-
-static const char *ddcSymbols[] = {
-    "xf86PrintEDID",
-    "xf86SetDDCproperties",
-    "xf86InterpretEDID",
-    NULL
-};
-
-
-/* static const char *i2cSymbols[] = {
-    "xf86I2CBusInit",
-    "xf86CreateI2CBusRec",
-    NULL
-}; */
-
-static const char *int10Symbols[] = {
-    "xf86FreeInt10",
-    "xf86InitInt10",
-    "xf86ExecX86int10",
-    NULL
-};
-
-static const char *vbeSymbols[] = {
-    "VBEExtendedInit",
-    "vbeDoEDID",
-    "vbeFree",
-    "VBEGetVBEInfo",
-    "VBEFreeVBEInfo",
-    "VBEGetModeInfo",
-    "VBEFreeModeInfo",
-    "VBESaveRestore",
-    "VBESetVBEMode",
-    "VBEGetVBEMode",
-    "VBESetDisplayStart",
-    "VBESetGetLogicalScanlineLength",
-    NULL
-};
-
-#ifdef XF86DRI
-static const char *drmSymbols[] = {
-    "drmAddMap",
-    "drmAgpAcquire",
-    "drmAgpAlloc",
-    "drmAgpBase",
-    "drmAgpBind",
-    "drmAgpEnable",
-    "drmAgpFree",
-    "drmAgpGetMode",
-    "drmAgpRelease",
-    "drmCtlInstHandler",
-    "drmGetInterruptFromBusID",
-    "drmXGIAgpInit",
-    NULL
-};
-
-static const char *driSymbols[] = {
-    "DRICloseScreen",
-    "DRICreateInfoRec",
-    "DRIDestroyInfoRec",
-    "DRIFinishScreenInit",
-    "DRIGetSAREAPrivate",
-    "DRILock",
-    "DRIQueryVersion",
-    "DRIScreenInit",
-    "DRIUnlock",
-#ifdef XGINEWDRI2
-    "GlxSetVisualConfigs",
-    "DRICreatePCIBusID",
-#endif
-    NULL
-};
-#endif
-
 static MODULESETUPPROTO(xgiSetup);
 
 static XF86ModuleVersionInfo xgiVersRec = {
@@ -500,13 +374,6 @@ xgiSetup(pointer module, pointer opts, int *errmaj, int *errmin)
         xf86AddDriver(&XGI, module, 0);
 #endif
 
-        LoaderRefSymLists(vgahwSymbols, fbSymbols, xaaSymbols,
-                          shadowSymbols, ramdacSymbols, ddcSymbols,
-                          vbeSymbols, int10Symbols,
-#ifdef XF86DRI
-                          drmSymbols, driSymbols,
-#endif
-                          NULL);
         return (pointer) TRUE;
     }
 
@@ -556,13 +423,13 @@ XGIFreeRec(ScrnInfoPtr pScrn)
              * head.
              */
             if (pXGIEnt->BIOS)
-                xfree(pXGIEnt->BIOS);
+                free(pXGIEnt->BIOS);
             pXGIEnt->BIOS = pXGI->BIOS = NULL;
             if (pXGIEnt->XGI_Pr)
-                xfree(pXGIEnt->XGI_Pr);
+                free(pXGIEnt->XGI_Pr);
             pXGIEnt->XGI_Pr = pXGI->XGI_Pr = NULL;
             if (pXGIEnt->RenderAccelArray)
-                xfree(pXGIEnt->RenderAccelArray);
+                free(pXGIEnt->RenderAccelArray);
             pXGIEnt->RenderAccelArray = pXGI->RenderAccelArray = NULL;
         }
         else {
@@ -573,19 +440,19 @@ XGIFreeRec(ScrnInfoPtr pScrn)
     }
     else {
         if (pXGI->BIOS)
-            xfree(pXGI->BIOS);
+            free(pXGI->BIOS);
         pXGI->BIOS = NULL;
         if (pXGI->XGI_Pr)
-            xfree(pXGI->XGI_Pr);
+            free(pXGI->XGI_Pr);
         pXGI->XGI_Pr = NULL;
         if (pXGI->RenderAccelArray)
-            xfree(pXGI->RenderAccelArray);
+            free(pXGI->RenderAccelArray);
         pXGI->RenderAccelArray = NULL;
     }
 
 #ifdef XGIMERGED
     if (pXGI->MetaModes)
-        xfree(pXGI->MetaModes);
+        free(pXGI->MetaModes);
     pXGI->MetaModes = NULL;
 
     if (pXGI->CRT1Modes) {
@@ -595,8 +462,8 @@ XGIFreeRec(ScrnInfoPtr pScrn)
                 do {
                     DisplayModePtr p = pScrn->currentMode->next;
                     if (pScrn->currentMode->Private)
-                        xfree(pScrn->currentMode->Private);
-                    xfree(pScrn->currentMode);
+                        free(pScrn->currentMode->Private);
+                    free(pScrn->currentMode);
                     pScrn->currentMode = p;
                 } while (pScrn->currentMode != pScrn->modes);
             }
@@ -612,7 +479,7 @@ XGIFreeRec(ScrnInfoPtr pScrn)
     pXGI->pVbe = NULL;
     if (pScrn->driverPrivate == NULL)
         return;
-    xfree(pScrn->driverPrivate);
+    free(pScrn->driverPrivate);
     pScrn->driverPrivate = NULL;
 }
 
@@ -975,7 +842,7 @@ XGIProbe(DriverPtr drv, int flags)
                                     numDevSections, drv, &usedChips);
 
     /* Free it since we don't need that list after this */
-    xfree(devSections);
+    free(devSections);
     if (numUsed <= 0)
         return FALSE;
 
@@ -1015,7 +882,7 @@ XGIProbe(DriverPtr drv, int flags)
 
 #endif
         }
-    xfree(usedChips);
+    free(usedChips);
 
     return foundScreen;
 }
@@ -1044,11 +911,11 @@ XGICopyModeNLink(ScrnInfoPtr pScrn, DisplayModePtr dest,
 
 	ErrorF("XGICopyModeNLink()...Use Virtual Size-1\n");
 
-    if (!((mode = xalloc(sizeof(DisplayModeRec)))))
+    if (!((mode = malloc(sizeof(DisplayModeRec)))))
         return dest;
     memcpy(mode, i, sizeof(DisplayModeRec));
-    if (!((mode->Private = xalloc(sizeof(XGIMergedDisplayModeRec))))) {
-        xfree(mode);
+    if (!((mode->Private = malloc(sizeof(XGIMergedDisplayModeRec))))) {
+        free(mode);
         return dest;
     }
     ((XGIMergedDisplayModePtr) mode->Private)->CRT1 = i;
@@ -1125,8 +992,8 @@ XGICopyModeNLink(ScrnInfoPtr pScrn, DisplayModePtr dest,
         xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
                    "Skipped %dx%d, not enough video RAM or beyond hardware specs\n",
                    mode->HDisplay, mode->VDisplay);
-        xfree(mode->Private);
-        xfree(mode);
+        free(mode->Private);
+        free(mode);
 
         return dest;
     }
@@ -1559,10 +1426,10 @@ XGIFreeCRT2Structs(XGIPtr pXGI)
                                    pXGI->CRT2pScrn->monitor->Modes);
             }
             if (pXGI->CRT2pScrn->monitor->DDC)
-                xfree(pXGI->CRT2pScrn->monitor->DDC);
-            xfree(pXGI->CRT2pScrn->monitor);
+                free(pXGI->CRT2pScrn->monitor->DDC);
+            free(pXGI->CRT2pScrn->monitor);
         }
-        xfree(pXGI->CRT2pScrn);
+        free(pXGI->CRT2pScrn);
         pXGI->CRT2pScrn = NULL;
     }
 }
@@ -1615,7 +1482,6 @@ XGIInternalDDC(ScrnInfoPtr pScrn, int crtno)
     ErrorF("get EDID with VBIOS call...\n");
     if (xf86LoadSubModule(pScrn, "int10")) 
 	{
-        xf86LoaderReqSymLists(int10Symbols, NULL);
         pInt = xf86InitInt10(pXGI->pEnt->index);
         if (pInt == NULL) {
             xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
@@ -1677,8 +1543,6 @@ XGIInternalDDC(ScrnInfoPtr pScrn, int crtno)
 			g_DVI_I_SignalType = (buffer[20] & 0x80) >> 7;
 			ErrorF("DVI-I : %s signal ...\n", (g_DVI_I_SignalType == 0x01) ? "DVI" : "CRT" );
 
-            xf86LoaderReqSymLists(ddcSymbols, NULL);
-
 			/* Jong 09/04/2007; Alan fixed abnormal EDID data */
 			/* pMonitor = xf86InterpretEDID(pScrn->scrnIndex, buffer) ; */
 			if ( (buffer[0]==0) && (buffer[7]==0) )
@@ -1699,7 +1563,6 @@ XGIInternalDDC(ScrnInfoPtr pScrn, int crtno)
                            "CRT%d DDC EDID corrupt\n", crtno + 1);
                 return (NULL);
             }
-            xf86UnloadSubModule("ddc");
         }
         else {
             xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
@@ -2219,8 +2082,6 @@ XGIDDCPreInit(ScrnInfoPtr pScrn)
         if (xf86LoadSubModule(pScrn, "ddc")) 
 		{
 
-            xf86LoaderReqSymLists(ddcSymbols, NULL);
-
             if (pXGI->xgi_HwDevExt.jChipType == XG27) 
 			{
 				ErrorF("Getting CRT EDID (DAC1-CRT1)...\n");
@@ -2438,7 +2299,7 @@ XGIDDCPreInit(ScrnInfoPtr pScrn)
 
 #ifdef XGIMERGED
     if (pXGI->MergedFB) {
-        pXGI->CRT2pScrn->monitor = xalloc(sizeof(MonRec));
+        pXGI->CRT2pScrn->monitor = malloc(sizeof(MonRec));
         if (pXGI->CRT2pScrn->monitor) {
             DisplayModePtr tempm = NULL, currentm = NULL, newm = NULL;
             memcpy(pXGI->CRT2pScrn->monitor, pScrn->monitor, sizeof(MonRec));
@@ -2446,11 +2307,11 @@ XGIDDCPreInit(ScrnInfoPtr pScrn)
             pXGI->CRT2pScrn->monitor->Modes = NULL;
             tempm = pScrn->monitor->Modes;
             while (tempm) {
-                if (!(newm = xalloc(sizeof(DisplayModeRec))))
+                if (!(newm = malloc(sizeof(DisplayModeRec))))
                     break;
                 memcpy(newm, tempm, sizeof(DisplayModeRec));
-                if (!(newm->name = xalloc(strlen(tempm->name) + 1))) {
-                    xfree(newm);
+                if (!(newm->name = malloc(strlen(tempm->name) + 1))) {
+                    free(newm);
                     break;
                 }
                 strcpy(newm->name, tempm->name);
@@ -2490,7 +2351,7 @@ XGIDDCPreInit(ScrnInfoPtr pScrn)
                         "Failed to allocate memory for CRT2 monitor, %s.\n",
                         mergeddisstr);
             if (pXGI->CRT2pScrn)
-                xfree(pXGI->CRT2pScrn);
+                free(pXGI->CRT2pScrn);
             pXGI->CRT2pScrn = NULL;
             pXGI->MergedFB = FALSE;
         }
@@ -2685,8 +2546,6 @@ XGIPreInit(ScrnInfoPtr pScrn, int flags)
         return FALSE;
     }
 
-    xf86LoaderReqSymLists(vgahwSymbols, NULL);
-
     /* Due to the liberal license terms this is needed for
      * keeping the copyright notice readable and intact in
      * binary distributions. Removing this is a copyright
@@ -2704,6 +2563,7 @@ XGIPreInit(ScrnInfoPtr pScrn, int flags)
         XGIErrorLog(pScrn, "Could not allocate VGA private\n");
         return FALSE;
     }
+    vgaHWSetStdFuncs(VGAHWPTR(pScrn));
 
     /* Allocate the XGIRec driverPrivate */
     pXGI = XGIGetRec(pScrn);
@@ -2712,7 +2572,9 @@ XGIPreInit(ScrnInfoPtr pScrn, int flags)
         return FALSE;
     }
 
+#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 12
     pXGI->IODBase = pScrn->domainIOBase;
+#endif
 
 
     /* Get the entity, and make sure it is PCI. */
@@ -2778,6 +2640,7 @@ XGIPreInit(ScrnInfoPtr pScrn, int flags)
     }
     vgaHWGetIOBase(VGAHWPTR(pScrn));
 
+#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 12
 	/* Jong@08262009; why not to modify ??? */
     /* We "patch" the PIOOffset inside vgaHW in order to force
      * the vgaHW module to use our relocated i/o ports.
@@ -2789,6 +2652,7 @@ XGIPreInit(ScrnInfoPtr pScrn, int flags)
         (pXGI->PciInfo->ioBase[2] & 0xFFFC)
 #endif
         ;
+#endif
 
     pXGI->pInt = NULL;
     if (!pXGI->Primary) {
@@ -2798,7 +2662,6 @@ XGIPreInit(ScrnInfoPtr pScrn, int flags)
                    "Initializing display adapter through int10\n");
 
         if (xf86LoadSubModule(pScrn, "int10")) {
-            xf86LoaderReqSymLists(int10Symbols, NULL);
             pXGI->pInt = xf86InitInt10(pXGI->pEnt->index);
         }
         else {
@@ -2830,8 +2693,6 @@ XGIPreInit(ScrnInfoPtr pScrn, int flags)
         return FALSE;
     }
 
-    xf86LoaderReqSymLists(ramdacSymbols, NULL);
-
     /* Set pScrn->monitor */
     pScrn->monitor = pScrn->confScreen->monitor;
 
@@ -3034,7 +2895,7 @@ XGIPreInit(ScrnInfoPtr pScrn, int flags)
 
     /* Get our relocated IO registers */
 #if defined(__arm__) 
-	pXGI->RelIO = (XGIIOADDRESS)(((IOADDRESS)VGAHWPTR(pScrn)->Base & 0xFFFFFFFC) + pXGI->IODBase); 	
+	pXGI->RelIO = (XGIIOADDRESS)(((unsigned long)VGAHWPTR(pScrn)->Base & 0xFFFFFFFC) + pXGI->IODBase); 	
 
 #else
     pXGI->RelIO = (XGIIOADDRESS) (pXGI->IODBase |
@@ -3046,7 +2907,7 @@ XGIPreInit(ScrnInfoPtr pScrn, int flags)
                                   );
 #endif
 
-    pXGI->xgi_HwDevExt.pjIOAddress = (XGIIOADDRESS) (pXGI->RelIO + 0x30);
+    pXGI->xgi_HwDevExt.pjIOAddress = (pointer)((XGIIOADDRESS) (pXGI->RelIO + 0x30));
     xf86DrvMsg(pScrn->scrnIndex, from, "Relocated IO registers at 0x%lX\n",
                (unsigned long) pXGI->RelIO);
 	ErrorF("xgi_driver.c-pXGI->xgi_HwDevExt.pjIOAddress=0x%x...\n", pXGI->xgi_HwDevExt.pjIOAddress);
@@ -3540,7 +3401,7 @@ XGIPreInit(ScrnInfoPtr pScrn, int flags)
         /* Do some MergedFB mode initialisation */
 #ifdef XGIMERGED
         if (pXGI->MergedFB) {
-        pXGI->CRT2pScrn = xalloc(sizeof(ScrnInfoRec));
+        pXGI->CRT2pScrn = malloc(sizeof(ScrnInfoRec));
         if (!pXGI->CRT2pScrn) {
             XGIErrorLog(pScrn,
                         "Failed to allocate memory for 2nd pScrn, %s\n",
@@ -3586,7 +3447,7 @@ XGIPreInit(ScrnInfoPtr pScrn, int flags)
                     XGIErrorLog(pScrn, mergednocrt1, mergeddisstr);
                 }
                 if (pXGI->CRT2pScrn)
-                    xfree(pXGI->CRT2pScrn);
+                    free(pXGI->CRT2pScrn);
                 pXGI->CRT2pScrn = NULL;
                 pXGI->MergedFB = FALSE;
             }
@@ -3627,7 +3488,7 @@ XGIPreInit(ScrnInfoPtr pScrn, int flags)
                 XGIErrorLog(pScrn, mergednocrt2, mergeddisstr);
             }
             if (pXGI->CRT2pScrn)
-                xfree(pXGI->CRT2pScrn);
+                free(pXGI->CRT2pScrn);
             pXGI->CRT2pScrn = NULL;
             pXGI->MergedFB = FALSE;
         }
@@ -3695,7 +3556,6 @@ XGIPreInit(ScrnInfoPtr pScrn, int flags)
 #if !defined(__powerpc__)
     /* Now load and initialize VBE module. */
     if (xf86LoadSubModule(pScrn, "vbe")) {
-        xf86LoaderReqSymLists(vbeSymbols, NULL);
         pXGI->pVbe = VBEExtendedInit(pXGI->pInt, pXGI->pEnt->index,
                                      SET_BIOS_SCRATCH | RESTORE_BIOS_SCRATCH);
         if (!pXGI->pVbe) {
@@ -4117,7 +3977,6 @@ XGIPreInit(ScrnInfoPtr pScrn, int flags)
         XGIFreeRec(pScrn);
         return FALSE;
     }
-    xf86LoaderReqSymLists(fbSymbols, NULL);
 
     /* Load XAA if needed */
     if (!pXGI->NoAccel) 
@@ -4130,16 +3989,9 @@ XGIPreInit(ScrnInfoPtr pScrn, int flags)
 			if (!xf86LoadSubModule(pScrn, "xaa")) {
 				XGIErrorLog(pScrn, "Could not load xaa module\n");
 
-				if (pXGIEnt)
-					pXGIEnt->ErrorAfterFirst = TRUE;
-
-				if (pXGI->pInt)
-					xf86FreeInt10(pXGI->pInt);
-				xgiRestoreExtRegisterLock(pXGI, srlockReg, crlockReg);
-				XGIFreeRec(pScrn);
-				return FALSE;
+				pXGI->NoAccel = TRUE;
+				pXGI->ShadowFB = TRUE;
 			}
-			xf86LoaderReqSymLists(xaaSymbols, NULL);
 		}
 #endif
 
@@ -4150,7 +4002,6 @@ XGIPreInit(ScrnInfoPtr pScrn, int flags)
 			  XGIErrorLog(pScrn, "Could not load exa module\n");
 			  return FALSE;
 		   }
-		   xf86LoaderReqSymLists(exaSymbols, NULL);
 		}
 #endif
 	}
@@ -4169,16 +4020,12 @@ XGIPreInit(ScrnInfoPtr pScrn, int flags)
             XGIFreeRec(pScrn);
             return FALSE;
         }
-        xf86LoaderReqSymLists(shadowSymbols, NULL);
     }
 
     /* Load the dri module if requested. */
 #ifdef XF86DRI
     if(pXGI->loadDRI) {
-        if (xf86LoadSubModule(pScrn, "dri")) {
-            xf86LoaderReqSymLists(driSymbols, drmSymbols, NULL);
-        }
-        else {
+        if (!xf86LoadSubModule(pScrn, "dri")) {
             if (!IS_DUAL_HEAD(pXGI))
                 xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
                            "Remove >Load \"dri\"< from the Module section of your XF86Config file\n");
@@ -4505,8 +4352,8 @@ XGIModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
 		}
 
 		XGIPostSetMode(pScrn, &pXGI->ModeReg);
-		XGIAdjustFrame(pXGIEnt->pScrn_1->scrnIndex, pXGIEnt->pScrn_1->frameX0,
-				   pXGIEnt->pScrn_1->frameY0, 0);
+		XGIAdjustFrame(ADJUST_FRAME_ARGS(pXGIEnt->pScrn_1, pXGIEnt->pScrn_1->frameX0,
+				   pXGIEnt->pScrn_1->frameY0));
     }
     else
     {
@@ -4518,6 +4365,7 @@ XGIModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
 			return FALSE;
 		}
 
+#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 12
 		/* Reset our PIOOffset as vgaHWInit might have reset it */
 		VGAHWPTR(pScrn)->PIOOffset = pXGI->IODBase - 0x380 +
 #ifdef XSERVER_LIBPCIACCESS
@@ -4526,6 +4374,7 @@ XGIModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
         (pXGI->PciInfo->ioBase[2] & 0xFFFC)
 #endif
         ;
+#endif
 
 		/* Prepare the register contents */
 		if (!(*pXGI->ModeInit) (pScrn, mode)) {
@@ -4651,14 +4500,14 @@ XGIRestore(ScrnInfoPtr pScrn)
 
 /* Our generic BlockHandler for Xv */
 static void
-XGIBlockHandler(int i, pointer blockData, pointer pTimeout, pointer pReadmask)
+XGIBlockHandler(BLOCKHANDLER_ARGS_DECL)
 {
-    ScreenPtr pScreen = screenInfo.screens[i];
-    ScrnInfoPtr pScrn = xf86Screens[i];
+    SCREEN_PTR(arg);
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     XGIPtr pXGI = XGIPTR(pScrn);
 
     pScreen->BlockHandler = pXGI->BlockHandler;
-    (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
+    (*pScreen->BlockHandler) (BLOCKHANDLER_ARGS);
     pScreen->BlockHandler = XGIBlockHandler;
 
     if (pXGI->VideoTimerCallback) {
@@ -4698,7 +4547,7 @@ void xgiRestoreVirtual(ScrnInfoPtr pScrn)
  * pScrn->displayWidth : memory pitch
  */
 static Bool
-XGIScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+XGIScreenInit(SCREEN_INIT_ARGS_DECL)
 {
     ScrnInfoPtr pScrn;
     vgaHWPtr hwp;
@@ -4711,7 +4560,7 @@ XGIScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
     XGIEntPtr pXGIEnt = NULL;
 
     ErrorF("XGIScreenInit\n");
-    pScrn = xf86Screens[pScreen->myNum];
+    pScrn = xf86ScreenToScrn(pScreen);
 
     PDEBUG(ErrorF("pScrn->currentMode->HDisplay = %d\n", pScrn->currentMode->HDisplay));
     PDEBUG(ErrorF("pScrn->currentMode->VDisplay = %d\n", pScrn->currentMode->VDisplay));
@@ -4771,7 +4620,6 @@ XGIScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 #if !defined(__powerpc__)
     if (!IS_DUAL_HEAD(pXGI) || !IS_SECOND_HEAD(pXGI)) {
         if (xf86LoadSubModule(pScrn, "vbe")) {
-            xf86LoaderReqSymLists(vbeSymbols, NULL);
             pXGI->pVbe = VBEExtendedInit(NULL, pXGI->pEnt->index,
                                          SET_BIOS_SCRATCH |
                                          RESTORE_BIOS_SCRATCH);
@@ -4798,6 +4646,7 @@ XGIScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
     }
     vgaHWGetIOBase(hwp);
 
+#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 12
     /* Patch the PIOOffset inside vgaHW to use
      * our relocated IO ports.
      */
@@ -4808,6 +4657,7 @@ XGIScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
         (pXGI->PciInfo->ioBase[2] & 0xFFFC)
 #endif
         ;
+#endif
 
     /* Map the XGI memory and MMIO areas */
     if (!XGIMapMem(pScrn)) {
@@ -4846,7 +4696,8 @@ XGIScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
     XGISaveScreen(pScreen, SCREEN_SAVER_ON);
 
     /* Set the viewport */
-    XGIAdjustFrame(scrnIndex, pScrn->frameX0, pScrn->frameY0, 0); 
+    XGIAdjustFrame(ADJUST_FRAME_ARGS(pScrn, pScrn->frameX0, pScrn->frameY0)); 
+
     /* XGIAdjustFrame(scrnIndex, 0, 0, 0); */
 
 	/* xgiRestoreVirtual(pScrn); */
@@ -4901,7 +4752,7 @@ XGIScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 
     if (pXGI->ShadowFB) {
         pXGI->ShadowPitch = BitmapBytePad(pScrn->bitsPerPixel * width);
-        pXGI->ShadowPtr = xalloc(pXGI->ShadowPitch * height);
+        pXGI->ShadowPtr = malloc(pXGI->ShadowPitch * height);
         displayWidth = pXGI->ShadowPitch / (pScrn->bitsPerPixel >> 3);
         FBStart = pXGI->ShadowPtr;
     }
@@ -5168,7 +5019,7 @@ XGIScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 	PDEBUG(XGIDumpRegs(pScrn));
 
 	/* xgiRestoreVirtual(); */
-    XGIAdjustFrame(scrnIndex, 0, 0, 0); 
+    XGIAdjustFrame(ADJUST_FRAME_ARGS(pScrn, 0, 0)); 
 	pScrn->frameX0 = 0;
 	pScrn->frameY0 = 0; 
 	pScrn->frameX1 = pScrn->currentMode->HDisplay - 1 ;
@@ -5179,9 +5030,9 @@ XGIScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 
 /* Usually mandatory */
 Bool
-XGISwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
+XGISwitchMode(SWITCH_MODE_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     XGIPtr pXGI = XGIPTR(pScrn);
 
 	if(pXGI->TargetRefreshRate)
@@ -5225,10 +5076,10 @@ XGISwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
 
 #if 1
     /* Jong 07/29/2009; Set the viewport; still not working */
-    XGIAdjustFrame(scrnIndex, pScrn->frameX0, pScrn->frameY0, 0);
+    XGIAdjustFrame(ADJUST_FRAME_ARGS(pScrn, pScrn->frameX0, pScrn->frameY0));
 #endif
 
-    if (!(XGIModeInit(xf86Screens[scrnIndex], mode)))
+    if (!(XGIModeInit(pScrn, mode)))
         return FALSE;
 
 
@@ -5578,14 +5429,14 @@ XGIAdjustFrameMerged(int scrnIndex, int x, int y, int flags)
  * Usually mandatory
  */
 void
-XGIAdjustFrame(int scrnIndex, int x, int y, int flags)
+XGIAdjustFrame(ADJUST_FRAME_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     XGIPtr pXGI = XGIPTR(pScrn);
     unsigned long base;
     unsigned char ucSR5Stat, ucTemp;
 
-    ErrorF("AdjustFrame %d\n", scrnIndex);
+    ErrorF("AdjustFrame %d\n", pScrn->scrnIndex);
     inXGIIDXREG(XGISR, 0x05, ucSR5Stat);
     if (ucSR5Stat == 0xA1)
         ucSR5Stat = 0x86;
@@ -5637,9 +5488,9 @@ XGIAdjustFrame(int scrnIndex, int x, int y, int flags)
  * Mandatory!
  */
 static Bool
-XGIEnterVT(int scrnIndex, int flags)
+XGIEnterVT(VT_FUNC_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     XGIPtr pXGI = XGIPTR(pScrn);
 
     xgiSaveUnlockExtRegisterLock(pXGI, NULL, NULL);
@@ -5649,11 +5500,11 @@ XGIEnterVT(int scrnIndex, int flags)
         return FALSE;
     }
 
-    XGIAdjustFrame(scrnIndex, pScrn->frameX0, pScrn->frameY0, 0);
+    XGIAdjustFrame(ADJUST_FRAME_ARGS(pScrn, pScrn->frameX0, pScrn->frameY0));
 
 #ifdef XF86DRI
     if (pXGI->directRenderingEnabled) {
-        DRIUnlock(screenInfo.screens[scrnIndex]);
+        DRIUnlock(xf86ScrnToScreen(pScrn));
     }
 #endif
 
@@ -5670,9 +5521,9 @@ XGIEnterVT(int scrnIndex, int flags)
  * Mandatory!
  */
 static void
-XGILeaveVT(int scrnIndex, int flags)
+XGILeaveVT(VT_FUNC_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     vgaHWPtr hwp = VGAHWPTR(pScrn);
     XGIPtr pXGI = XGIPTR(pScrn);
 #ifdef XF86DRI
@@ -5680,7 +5531,7 @@ XGILeaveVT(int scrnIndex, int flags)
 
     PDEBUG(ErrorF("XGILeaveVT()\n"));
     if (pXGI->directRenderingEnabled) {
-        pScreen = screenInfo.screens[scrnIndex];
+        pScreen = xf86ScrnToScreen(pScrn);
         DRILock(pScreen, 0);
     }
 #endif
@@ -5713,9 +5564,9 @@ XGILeaveVT(int scrnIndex, int flags)
  * Mandatory!
  */
 static Bool
-XGICloseScreen(int scrnIndex, ScreenPtr pScreen)
+XGICloseScreen(CLOSE_SCREEN_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     vgaHWPtr hwp = VGAHWPTR(pScrn);
     XGIPtr pXGI = XGIPTR(pScrn);
 
@@ -5777,17 +5628,17 @@ XGICloseScreen(int scrnIndex, ScreenPtr pScreen)
     }
 
     if (pXGI->ShadowPtr) {
-        xfree(pXGI->ShadowPtr);
+        free(pXGI->ShadowPtr);
         pXGI->ShadowPtr = NULL;
     }
 
     if (pXGI->DGAModes) {
-        xfree(pXGI->DGAModes);
+        free(pXGI->DGAModes);
         pXGI->DGAModes = NULL;
     }
 
     if (pXGI->adaptor) {
-        xfree(pXGI->adaptor);
+        free(pXGI->adaptor);
         pXGI->adaptor = NULL;
         pXGI->ResetXv = pXGI->ResetXvGamma = NULL;
     }
@@ -5799,7 +5650,7 @@ XGICloseScreen(int scrnIndex, ScreenPtr pScreen)
 
     pScreen->CloseScreen = pXGI->CloseScreen;
 
-    return (*pScreen->CloseScreen) (scrnIndex, pScreen);
+    return (*pScreen->CloseScreen) (CLOSE_SCREEN_ARGS);
 }
 
 
@@ -5807,13 +5658,14 @@ XGICloseScreen(int scrnIndex, ScreenPtr pScreen)
 
 /* Optional */
 static void
-XGIFreeScreen(int scrnIndex, int flags)
+XGIFreeScreen(FREE_SCREEN_ARGS_DECL)
 {
+    SCRN_INFO_PTR(arg);
     if (xf86LoaderCheckSymbol("vgaHWFreeHWRec")) {
-        vgaHWFreeHWRec(xf86Screens[scrnIndex]);
+        vgaHWFreeHWRec(pScrn);
     }
 
-    XGIFreeRec(xf86Screens[scrnIndex]);
+    XGIFreeRec(pScrn);
 }
 
 
@@ -5854,9 +5706,9 @@ int XGIValidateUserDefMode(XGIPtr pXGI, DisplayModePtr mode)
 /* Checks if a mode is suitable for the selected chipset. */
 
 static int
-XGIValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags)
+XGIValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode, Bool verbose, int flags)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     XGIPtr pXGI = XGIPTR(pScrn);
     int HDisplay = mode->HDisplay;
     int VDisplay = mode->VDisplay;
@@ -6015,7 +5867,7 @@ XGIValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags)
 static Bool
 XGISaveScreen(ScreenPtr pScreen, int mode)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 
     if ((pScrn != NULL) && pScrn->vtSema) {
 
@@ -6034,7 +5886,7 @@ static Bool
 XGISaveScreenDH(ScreenPtr pScreen, int mode)
 {
 #ifdef XGIDUALHEAD
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 
     if ((pScrn != NULL) && pScrn->vtSema) {
         XGIPtr pXGI = XGIPTR(pScrn);
diff --git a/src/xgi_driver.h b/src/xgi_driver.h
index 4004ccd..0754f16 100755
--- a/src/xgi_driver.h
+++ b/src/xgi_driver.h
@@ -729,19 +729,19 @@ static const unsigned char XGI301CScaling[] = {
 /* Mandatory functions */
 static void XGIIdentify(int flags);
 static Bool XGIPreInit(ScrnInfoPtr pScrn, int flags);
-static Bool XGIScreenInit(int Index, ScreenPtr pScreen, int argc, char **argv);
-static Bool XGIEnterVT(int scrnIndex, int flags);
-static void XGILeaveVT(int scrnIndex, int flags);
-static Bool XGICloseScreen(int scrnIndex, ScreenPtr pScreen);
+static Bool XGIScreenInit(SCREEN_INIT_ARGS_DECL);
+static Bool XGIEnterVT(VT_FUNC_ARGS_DECL);
+static void XGILeaveVT(VT_FUNC_ARGS_DECL);
+static Bool XGICloseScreen(CLOSE_SCREEN_ARGS_DECL);
 static Bool XGISaveScreen(ScreenPtr pScreen, int mode);
-static Bool XGISwitchMode(int scrnIndex, DisplayModePtr mode, int flags);
-static void XGIAdjustFrame(int scrnIndex, int x, int y, int flags);
+static Bool XGISwitchMode(SWITCH_MODE_ARGS_DECL);
+static void XGIAdjustFrame(ADJUST_FRAME_ARGS_DECL);
 static Bool XGISaveScreenDH(ScreenPtr pScreen, int mode);
 
 /* Optional functions */
-static void       XGIFreeScreen(int scrnIndex, int flags);
+static void       XGIFreeScreen(FREE_SCREEN_ARGS_DECL);
 
-static int      XGIValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose,
+static int      XGIValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode, Bool verbose,
                              int flags);
 /* Internally used functions */
 static Bool    XGIMapMem(ScrnInfoPtr pScrn);
diff --git a/src/xgi_memcpy.c b/src/xgi_memcpy.c
index f604899..50034f3 100755
--- a/src/xgi_memcpy.c
+++ b/src/xgi_memcpy.c
@@ -740,13 +740,13 @@ XGI_AllocBuffers(ScrnInfoPtr pScrn, UChar **buf1, UChar **buf2, UChar **buf3)
     (*buf1) = (UChar *)pXGI->FbBase + offset;
     (*buf1) = (UChar *)(((ULong)(*buf1) + 31) & ~31);
 
-    if(!((*buf2) = (UChar *)xalloc(BUFFERSIZE + 15))) {
+    if(!((*buf2) = (UChar *)malloc(BUFFERSIZE + 15))) {
        XGIFreeFBMemory(pScrn, &handle);
        return NULL;
     }
 
-    if(!((*buf3) = (UChar *)xalloc(BUFFERSIZE + 15))) {
-       xfree((*buf2));
+    if(!((*buf3) = (UChar *)malloc(BUFFERSIZE + 15))) {
+       free((*buf2));
        XGIFreeFBMemory(pScrn, &handle);
        return NULL;
     }
@@ -1177,7 +1177,7 @@ static unsigned int XGI_GetCpuFeatures(ScrnInfoPtr pScrn)
 static vidCopyFunc
 XGIVidCopyInitGen(ScreenPtr pScreen, XGIMCFuncData *MCFunctions, vidCopyFunc *UMemCpy, Bool from)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     XGIPtr pXGI = XGIPTR(pScrn);
     void *fbhandle = NULL;
     char  *frqBuf = NULL;
@@ -1224,8 +1224,8 @@ XGIVidCopyInitGen(ScreenPtr pScreen, XGIMCFuncData *MCFunctions, vidCopyFunc *UM
 
     /* Free buffers */
     XGIFreeFBMemory(pScrn, &fbhandle);
-    xfree(buf2);
-    xfree(buf3);
+    free(buf2);
+    free(buf3);
 
     xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
 	       "Using %s method for aligned data transfers %s video RAM\n",
diff --git a/src/xgi_opt.c b/src/xgi_opt.c
index 09346e4..c0608d5 100755
--- a/src/xgi_opt.c
+++ b/src/xgi_opt.c
@@ -195,7 +195,7 @@ xgiOptions(ScrnInfoPtr pScrn)
     xf86CollectOptions(pScrn, NULL);
 
     /* Process the options */
-    if(!(pXGI->Options = xalloc(sizeof(XGIOptions)))) return;
+    if(!(pXGI->Options = malloc(sizeof(XGIOptions)))) return;
 
     memcpy(pXGI->Options, XGIOptions, sizeof(XGIOptions));
 
diff --git a/src/xgi_setup.c b/src/xgi_setup.c
index c1d2cdc..a4514ad 100755
--- a/src/xgi_setup.c
+++ b/src/xgi_setup.c
@@ -587,7 +587,7 @@ XGI_InitHwDevInfo(ScrnInfoPtr pScrn)
     PDEBUG(ErrorF("pXGI->FbBase = 0x%08lx\n",(ULONG)(pXGI->FbBase))) ;
     PDEBUG(ErrorF("pHwDevInfo->pjVideoMemoryAddress = 0x%08lx\n",(ULONG)(pHwDevInfo->pjVideoMemoryAddress))) ;
     pHwDevInfo->ulVideoMemorySize = pXGI->FbMapSize ;
-    pHwDevInfo->pjIOAddress = pXGI->RelIO + 0x30 ;
+    pHwDevInfo->pjIOAddress = (pointer)(pXGI->RelIO + 0x30);
 
     switch (pXGI->Chipset) {
     case PCI_CHIP_XGIXG40:
@@ -678,7 +678,7 @@ bAccessVGAPCIInfo(PXGI_HW_DEVICE_INFO pHwDevInfo, ULONG ulOffset, ULONG ulSet, U
 	err = pci_device_cfg_write_u32(pXGI->PciInfo, *pulValue,
 				       ulOffset & ~3);
     } else {
-	err = pci_device_cfg_write_u32(pXGI->PciInfo, pulValue,
+	err = pci_device_cfg_read_u32(pXGI->PciInfo, pulValue,
 				       ulOffset & ~3);
     }
 
diff --git a/src/xgi_video.c b/src/xgi_video.c
index 31cffd5..716d6e1 100755
--- a/src/xgi_video.c
+++ b/src/xgi_video.c
@@ -78,8 +78,9 @@
 #include "xgi.h"
 #include "xf86xv.h"
 #include <X11/extensions/Xv.h>
-#include "xaa.h"
+#ifdef HAVE_XAA_H
 #include "xaalocal.h"
+#endif
 #include "dixstruct.h"
 #include "fourcc.h"
 
@@ -127,7 +128,7 @@ static Atom xvBrightness, xvContrast, xvColorKey, xvSaturation, xvHue, xvmcUncom
 
 void XGIInitVideo(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     XF86VideoAdaptorPtr *adaptors, *newAdaptors = NULL;
     XF86VideoAdaptorPtr newAdaptor = NULL;
     int num_adaptors;
@@ -142,7 +143,7 @@ void XGIInitVideo(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));
@@ -157,7 +158,7 @@ void XGIInitVideo(ScreenPtr pScreen)
         xf86XVScreenInit(pScreen, adaptors, num_adaptors);
 
     if(newAdaptors)
-        xfree(newAdaptors);
+        free(newAdaptors);
 
 }
 
@@ -386,7 +387,7 @@ XGISetPortDefaults(ScrnInfoPtr pScrn, XGIPortPrivPtr pPriv)
 static XF86VideoAdaptorPtr
 XGISetupImageVideo(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     XGIPtr pXGI = XGIPTR(pScrn);
     XF86VideoAdaptorPtr adapt;
     XGIPortPrivPtr pPriv;
@@ -395,7 +396,7 @@ XGISetupImageVideo(ScreenPtr pScreen)
     struct v4l2_standard 	standard;
 # endif//VC    
 
-    if(!(adapt = xcalloc(1, sizeof(XF86VideoAdaptorRec) +
+    if(!(adapt = calloc(1, sizeof(XF86VideoAdaptorRec) +
                             sizeof(XGIPortPrivRec) +
                             sizeof(DevUnion))))
         return NULL;