--- /dev/null
+Index: xc/programs/Xserver/hw/xfree86/drivers/cirrus/alp.h
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/cirrus/alp.h,v
+retrieving revision 1.4
+retrieving revision 1.5
+diff -u -r1.4 -r1.5
+--- xc/programs/Xserver/hw/xfree86/drivers/cirrus/alp.h 2000/12/06 15:35:15 1.4
++++ xc/programs/Xserver/hw/xfree86/drivers/cirrus/alp.h 2001/01/22 21:09:33 1.5
+@@ -1,4 +1,4 @@
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/cirrus/alp.h,v 1.4 2000/12/06 15:35:15 eich Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/cirrus/alp.h,v 1.5 2001/01/22 21:09:33 dawes Exp $ */
+
+ /* (c) Itai Nahshon */
+
+@@ -69,6 +69,10 @@
+ CARD32 monoPattern8x8;
+
+ Bool autoStart;
++
++ /* MMIO Base for BitBLT operation. This is
++ IOBase for 5446 and 7548, IOBase+0x100 for 5480 */
++ unsigned char * BLTBase;
+ /* XXX For XF86Config based mem configuration */
+ CARD32 sr0f, sr17;
+ } AlpRec, *AlpPtr;
+Index: xc/programs/Xserver/hw/xfree86/drivers/cirrus/alp_driver.c
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/cirrus/alp_driver.c,v
+retrieving revision 1.17
+retrieving revision 1.18
+diff -u -r1.17 -r1.18
+--- xc/programs/Xserver/hw/xfree86/drivers/cirrus/alp_driver.c 2000/12/07 15:43:44 1.17
++++ xc/programs/Xserver/hw/xfree86/drivers/cirrus/alp_driver.c 2001/01/21 21:19:24 1.18
+@@ -11,7 +11,7 @@
+ * Guy DESBIEF
+ */
+
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/cirrus/alp_driver.c,v 1.17 2000/12/07 15:43:44 tsi Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/cirrus/alp_driver.c,v 1.18 2001/01/21 21:19:24 tsi Exp $ */
+
+ /* All drivers should typically include these */
+ #include "xf86.h"
+@@ -59,11 +59,9 @@
+
+ /* These need to be checked */
+ #if 0
+-#ifdef XFreeXDGA
+ #define _XF86DGA_SERVER_
+ #include "extensions/xf86dgastr.h"
+ #endif
+-#endif
+
+ #include "xf86DDC.h"
+ #include "xf86int10.h"
+@@ -112,10 +110,8 @@
+
+ static void AlpSetClock(CirPtr pCir, vgaHWPtr hwp, int freq);
+
+-#ifdef DPMSExtension
+-static void AlpDisplayPowerManagementSet(ScrnInfoPtr pScrn,
+- int PowerManagementMode, int flags);
+-#endif
++static void AlpDisplayPowerManagementSet(ScrnInfoPtr pScrn,
++ int PowerManagementMode, int flags);
+
+ /*
+ * This is intentionally screen-independent. It indicates the binding
+@@ -1078,10 +1074,7 @@
+ AlpFreeRec(pScrn);
+ return FALSE;
+ }
+- xf86LoaderReqSymbols("fbScreenInit",NULL);
+-#ifdef RENDER
+- xf86LoaderReqSymbols("fbPictureInit", NULL);
+-#endif
++ xf86LoaderReqSymbols("fbScreenInit", "fbPictureInit", NULL);
+ break;
+ }
+
+@@ -1582,9 +1575,7 @@
+ }
+ if (!ret)
+ return FALSE;
+-#ifdef RENDER
+ fbPictureInit (pScreen, 0, 0);
+-#endif
+
+ #ifdef ALP_DEBUG
+ ErrorF("AlpScreenInit after depth dependent init\n");
+@@ -1716,9 +1707,7 @@
+ if (pScrn->bitsPerPixel > 1 && pScrn->bitsPerPixel <= 8)
+ vgaHWHandleColormaps(pScreen);
+
+-#ifdef DPMSExtension
+ xf86DPMSInit(pScreen, AlpDisplayPowerManagementSet, 0);
+-#endif
+
+ pScrn->memPhysBase = pCir->FbAddress;
+ pScrn->fbOffset = 0;
+@@ -1983,7 +1972,6 @@
+ *
+ * Sets VESA Display Power Management Signaling (DPMS) Mode.
+ */
+-#ifdef DPMSExtension
+ static void
+ AlpDisplayPowerManagementSet(ScrnInfoPtr pScrn, int PowerManagementMode,
+ int flags)
+@@ -2031,7 +2019,6 @@
+ gr0e |= hwp->readGr(hwp, 0x0E) & ~0x06;
+ hwp->writeGr(hwp, 0x0E, gr0e);
+ }
+-#endif
+
+ #ifdef ALPPROBEI2C
+ static void AlpProbeI2C(int scrnIndex)
+Index: xc/programs/Xserver/hw/xfree86/drivers/cirrus/alp_xaam.c
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/cirrus/alp_xaam.c,v
+retrieving revision 1.4
+retrieving revision 1.5
+diff -u -r1.4 -r1.5
+--- xc/programs/Xserver/hw/xfree86/drivers/cirrus/alp_xaam.c 2000/12/06 15:35:15 1.4
++++ xc/programs/Xserver/hw/xfree86/drivers/cirrus/alp_xaam.c 2001/01/22 21:09:34 1.5
+@@ -1,6 +1,6 @@
+ /* (c) Itai Nahshon */
+
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/cirrus/alp_xaam.c,v 1.4 2000/12/06 15:35:15 eich Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/cirrus/alp_xaam.c,v 1.5 2001/01/22 21:09:34 dawes Exp $ */
+
+ #include "xf86.h"
+ #include "xf86_OSproc.h"
+@@ -19,21 +19,21 @@
+ #ifdef DEBUG
+ #define minb(p) \
+ ErrorF("minb(%X)\n", p),\
+- MMIO_IN8(pCir->IOBase, (p))
++ MMIO_IN8(pCir->chip.alp->BLTBase, (p))
+ #define moutb(p,v) \
+ ErrorF("moutb(%X)\n", p),\
+- MMIO_OUT8(pCir->IOBase, (p),(v))
++ MMIO_OUT8(pCir->chip.alp->BLTBase, (p),(v))
+ #define minl(p) \
+ ErrorF("minl(%X)\n", p),\
+- MMIO_IN32(pCir->IOBase, (p))
++ MMIO_IN32(pCir->chip.alp->BLTBase, (p))
+ #define moutl(p,v) \
+ ErrorF("moutl(%X)\n", p),\
+- MMIO_OUT32(pCir->IOBase, (p),(v))
++ MMIO_OUT32(pCir->chip.alp->BLTBase, (p),(v))
+ #else
+-#define minb(p) MMIO_IN8(pCir->IOBase, (p))
+-#define moutb(p,v) MMIO_OUT8(pCir->IOBase, (p),(v))
+-#define minl(p) MMIO_IN32(pCir->IOBase, (p))
+-#define moutl(p,v) MMIO_OUT32(pCir->IOBase, (p),(v))
++#define minb(p) MMIO_IN8(pCir->chip.alp->BLTBase, (p))
++#define moutb(p,v) MMIO_OUT8(pCir->chip.alp->BLTBase, (p),(v))
++#define minl(p) MMIO_IN32(pCir->chip.alp->BLTBase, (p))
++#define moutl(p,v) MMIO_OUT32(pCir->chip.alp->BLTBase, (p),(v))
+ #endif
+
+ #define WAIT while(minb(0x40) & pCir->chip.alp->waitMsk){};
+@@ -174,6 +174,17 @@
+
+ XAAPtr = XAACreateInfoRec();
+ if (!XAAPtr) return FALSE;
++
++
++ switch (pCir->Chipset)
++ {
++ case PCI_CHIP_GD5480:
++ pCir->chip.alp->BLTBase = pCir->IOBase + 0x100;
++ break;
++ default:
++ pCir->chip.alp->BLTBase = pCir->IOBase;
++ break;
++ }
+
+ XAAPtr->SetupForScreenToScreenCopy = AlpSetupForScreenToScreenCopy;
+ XAAPtr->SubsequentScreenToScreenCopy = AlpSubsequentScreenToScreenCopy;
+Index: xc/programs/Xserver/hw/xfree86/drivers/cirrus/cir_driver.c
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/cirrus/cir_driver.c,v
+retrieving revision 1.62
+retrieving revision 1.64
+diff -u -r1.62 -r1.64
+--- xc/programs/Xserver/hw/xfree86/drivers/cirrus/cir_driver.c 2000/12/06 15:35:15 1.62
++++ xc/programs/Xserver/hw/xfree86/drivers/cirrus/cir_driver.c 2001/01/22 21:09:34 1.64
+@@ -11,7 +11,7 @@
+ * Guy DESBIEF
+ */
+
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/cirrus/cir_driver.c,v 1.62 2000/12/06 15:35:15 eich Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/cirrus/cir_driver.c,v 1.64 2001/01/22 21:09:34 dawes Exp $ */
+
+ /* All drivers should typically include these */
+ #include "xf86.h"
+@@ -65,9 +65,6 @@
+ DriverRec CIRRUS = {
+ VERSION,
+ CIR_DRIVER_NAME,
+-#if 0
+- "Driver for Cirrus Logic GD5446, GD5480, and GD5462/4/5 cards",
+-#endif
+ CIRIdentify,
+ CIRProbe,
+ CIRAvailableOptions,
+@@ -128,7 +125,12 @@
+ "LgAvailableOptions",
+ NULL
+ };
+-
++static const char *vbeSymbols[] = {
++ "VBEInit",
++ "vbeDoEDID",
++ "vbeFree",
++ NULL
++};
+
+ #ifdef XFree86LOADER
+
+@@ -165,7 +167,7 @@
+ setupDone = TRUE;
+ xf86AddDriver(&CIRRUS, module, 0);
+
+- LoaderRefSymLists(alpSymbols, lgSymbols, NULL);
++ LoaderRefSymLists(alpSymbols, lgSymbols, vbeSymbols, NULL);
+ return (pointer)1;
+ }
+ if (errmaj) *errmaj = LDR_ONCEONLY;
+@@ -399,6 +401,9 @@
+ vbeInfoPtr pVbe;
+
+ if (xf86LoadSubModule(pScrn, "vbe")) {
++#ifdef XFree86LOADER
++ xf86LoaderReqSymLists(vbeSymbols,NULL);
++#endif
+ pVbe = VBEInit(NULL,index);
+ ConfiguredMonitor = vbeDoEDID(pVbe, NULL);
+ }
+Index: xc/programs/Xserver/hw/xfree86/drivers/cirrus/lg_driver.c
+===================================================================
+RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/cirrus/lg_driver.c,v
+retrieving revision 1.33
+retrieving revision 1.35
+diff -u -r1.33 -r1.35
+--- xc/programs/Xserver/hw/xfree86/drivers/cirrus/lg_driver.c 2000/12/06 15:35:16 1.33
++++ xc/programs/Xserver/hw/xfree86/drivers/cirrus/lg_driver.c 2001/01/22 21:09:35 1.35
+@@ -13,7 +13,7 @@
+ * David Dawes, Andrew E. Mileski, Leonard N. Zubkoff,
+ * Guy DESBIEF, Itai Nahshon.
+ */
+-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/cirrus/lg_driver.c,v 1.33 2000/12/06 15:35:16 eich Exp $ */
++/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/cirrus/lg_driver.c,v 1.35 2001/01/22 21:09:35 dawes Exp $ */
+
+ #define EXPERIMENTAL
+
+@@ -94,10 +94,8 @@
+ static CARD16 LgSetClock(CirPtr pCir, vgaHWPtr hwp, int freq);
+ static void lg_vgaHWSetMmioFunc(vgaHWPtr hwp, CARD8 *base);
+
+-#ifdef DPMSExtension
+-static void LgDisplayPowerManagementSet(ScrnInfoPtr pScrn,
+- int PowerManagementMode, int flags);
+-#endif
++static void LgDisplayPowerManagementSet(ScrnInfoPtr pScrn,
++ int PowerManagementMode, int flags);
+
+ /*
+ * This is intentionally screen-independent. It indicates the binding
+@@ -863,10 +861,7 @@
+ LgFreeRec(pScrn);
+ return FALSE;
+ }
+- xf86LoaderReqSymbols("fbScreenInit",NULL);
+-#ifdef RENDER
+- xf86LoaderReqSymbols("fbPictureInit", NULL);
+-#endif
++ xf86LoaderReqSymbols("fbScreenInit", "fbPictureInit", NULL);
+ break;
+ }
+
+@@ -1426,6 +1421,8 @@
+ if (!ret)
+ return FALSE;
+
++ fbPictureInit (pScreen, 0, 0);
++
+ #ifdef LG_DEBUG
+ ErrorF("LgScreenInit after depth dependent init\n");
+ #endif
+@@ -1475,9 +1472,7 @@
+ if (pScrn->bitsPerPixel > 1 && pScrn->bitsPerPixel <= 8)
+ vgaHWHandleColormaps(pScreen);
+
+-#ifdef DPMSExtension
+ xf86DPMSInit(pScreen, LgDisplayPowerManagementSet, 0);
+-#endif
+
+ pScrn->memPhysBase = pCir->FbAddress;
+ pScrn->fbOffset = 0;
+@@ -1799,7 +1794,6 @@
+ *
+ * Sets VESA Display Power Management Signaling (DPMS) Mode.
+ */
+-#ifdef DPMSExtension
+ static void
+ LgDisplayPowerManagementSet(ScrnInfoPtr pScrn, int PowerManagementMode,
+ int flags)
+@@ -1843,7 +1837,6 @@
+ cr1a |= hwp->readCrtc(hwp, 0x1A) & ~0x0C;
+ hwp->writeCrtc(hwp, 0x1A, cr1a);
+ }
+-#endif
+
+ #define minb(p) MMIO_IN8(hwp->MMIOBase, (p))
+ #define moutb(p,v) MMIO_OUT8(hwp->MMIOBase, (p),(v))