--- /dev/null
+diff -ur programs/Xserver/hw/xfree86/drivers/i810_old/common.h programs/Xserver/hw/xfree86/drivers/i810/common.h
+--- programs/Xserver/hw/xfree86/drivers/i810_old/common.h 2004-09-29 16:03:59.645813735 +0200
++++ programs/Xserver/hw/xfree86/drivers/i810/common.h 2004-09-29 16:04:13.974719718 +0200
+@@ -173,7 +173,7 @@
+ #define BEGIN_LP_RING(n) \
+ unsigned int outring, ringmask; \
+ volatile unsigned char *virt; \
+- unsigned int needed; \
++ int needed; \
+ if ((n) & 1) \
+ ErrorF("BEGIN_LP_RING called with odd argument: %d\n", n); \
+ if ((n) > 2 && (I810_DEBUG&DEBUG_ALWAYS_SYNC)) \
+@@ -206,7 +206,7 @@
+ #define BEGIN_LP_RING(n) \
+ unsigned int outring, ringmask; \
+ volatile unsigned char *virt; \
+- unsigned int needed; \
++ int needed; \
+ if ((n) & 1) \
+ ErrorF("BEGIN_LP_RING called with odd argument: %d\n", n); \
+ if ((n) > 2 && (I810_DEBUG&DEBUG_ALWAYS_SYNC)) \
+diff -ur programs/Xserver/hw/xfree86/drivers/i810_old/i810.h programs/Xserver/hw/xfree86/drivers/i810/i810.h
+--- programs/Xserver/hw/xfree86/drivers/i810_old/i810.h 2004-09-29 16:03:59.639814611 +0200
++++ programs/Xserver/hw/xfree86/drivers/i810/i810.h 2004-09-29 16:04:13.974719718 +0200
+@@ -172,7 +172,7 @@
+ unsigned long OverlayPhysical;
+ unsigned long OverlayStart;
+ int colorKey;
+- int surfaceAllocation[I810_TOTAL_SURFACES];
++ unsigned int surfaceAllocation[I810_TOTAL_SURFACES];
+ int numSurfaces;
+
+ DGAModePtr DGAModes;
+@@ -295,9 +295,10 @@
+ extern void I810Sync(ScrnInfoPtr pScrn);
+ extern unsigned long I810LocalToPhysical(ScrnInfoPtr pScrn,
+ unsigned long local);
+-extern int I810AllocLow(I810MemRange * result, I810MemRange * pool, int size);
++extern int I810AllocLow(I810MemRange * result, I810MemRange * pool,
++ int size);
+ extern int I810AllocHigh(I810MemRange * result, I810MemRange * pool,
+- int size);
++ int size);
+ extern Bool I810AllocateFront(ScrnInfoPtr pScrn);
+
+ extern int I810AllocateGARTMemory(ScrnInfoPtr pScrn);
+diff -ur programs/Xserver/hw/xfree86/drivers/i810_old/i810_accel.c programs/Xserver/hw/xfree86/drivers/i810/i810_accel.c
+--- programs/Xserver/hw/xfree86/drivers/i810_old/i810_accel.c 2004-09-29 16:03:59.612818556 +0200
++++ programs/Xserver/hw/xfree86/drivers/i810/i810_accel.c 2004-09-29 16:04:13.975719572 +0200
+@@ -259,7 +259,7 @@
+ #ifdef XF86DRI
+ /* VT switching tries to do this.
+ */
+- if (!pI810->LockHeld && pI810->directRenderingEnabled) {
++ if ((!pI810->LockHeld && pI810->directRenderingEnabled) || !pScrn->vtSema) {
+ return;
+ }
+ #endif
+diff -ur programs/Xserver/hw/xfree86/drivers/i810_old/i810_dri.c programs/Xserver/hw/xfree86/drivers/i810/i810_dri.c
+--- programs/Xserver/hw/xfree86/drivers/i810_old/i810_dri.c 2004-09-29 16:03:59.671809935 +0200
++++ programs/Xserver/hw/xfree86/drivers/i810/i810_dri.c 2004-09-29 16:04:13.977719280 +0200
+@@ -290,7 +290,7 @@
+ unsigned long dcacheHandle;
+ int sysmem_size = 0;
+ int back_size = 0;
+- int pitch_idx = 0;
++ unsigned int pitch_idx = 0;
+ int bufs;
+ int width = pScrn->displayWidth * pI810->cpp;
+ int i;
+diff -ur programs/Xserver/hw/xfree86/drivers/i810_old/i810_driver.c programs/Xserver/hw/xfree86/drivers/i810/i810_driver.c
+--- programs/Xserver/hw/xfree86/drivers/i810_old/i810_driver.c 2004-09-29 16:03:59.553827177 +0200
++++ programs/Xserver/hw/xfree86/drivers/i810/i810_driver.c 2004-09-29 16:04:13.979718988 +0200
+@@ -1124,14 +1124,6 @@
+ xf86SetOperatingState(resVgaIo, pI810->pEnt->index, ResUnusedOpr);
+ xf86SetOperatingState(resVgaMem, pI810->pEnt->index, ResDisableOpr);
+
+- pI810->LpRing = xalloc(sizeof(I810RingBuffer));
+- if (!pI810->LpRing) {
+- xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+- "Could not allocate lpring data structure.\n");
+- I810FreeRec(pScrn);
+- return FALSE;
+- }
+-
+ return TRUE;
+ }
+
+@@ -1159,7 +1151,7 @@
+ I810MapMem(ScrnInfoPtr pScrn)
+ {
+ I810Ptr pI810 = I810PTR(pScrn);
+- unsigned i;
++ long i;
+
+ for (i = 2; i < pI810->FbMapSize; i <<= 1) ;
+ pI810->FbMapSize = i;
+@@ -2074,6 +2066,13 @@
+ pI810 = I810PTR(pScrn);
+ hwp = VGAHWPTR(pScrn);
+
++ pI810->LpRing = xcalloc(sizeof(I810RingBuffer),1);
++ if (!pI810->LpRing) {
++ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
++ "Could not allocate lpring data structure.\n");
++ return FALSE;
++ }
++
+ miClearVisualTypes();
+
+ /* Re-implemented Direct Color support, -jens */
+diff -ur programs/Xserver/hw/xfree86/drivers/i810_old/i810_memory.c programs/Xserver/hw/xfree86/drivers/i810/i810_memory.c
+--- programs/Xserver/hw/xfree86/drivers/i810_old/i810_memory.c 2004-09-29 16:03:59.659811689 +0200
++++ programs/Xserver/hw/xfree86/drivers/i810/i810_memory.c 2004-09-29 16:04:13.980718842 +0200
+@@ -55,7 +55,7 @@
+ int
+ I810AllocLow(I810MemRange * result, I810MemRange * pool, int size)
+ {
+- if (size > pool->Size)
++ if (size > (long)pool->Size)
+ return 0;
+
+ pool->Size -= size;
+@@ -69,7 +69,7 @@
+ int
+ I810AllocHigh(I810MemRange * result, I810MemRange * pool, int size)
+ {
+- if (size > pool->Size)
++ if (size > (long)pool->Size)
+ return 0;
+
+ pool->Size -= size;
+diff -ur programs/Xserver/hw/xfree86/drivers/i810_old/i810_reg.h programs/Xserver/hw/xfree86/drivers/i810/i810_reg.h
+--- programs/Xserver/hw/xfree86/drivers/i810_old/i810_reg.h 2004-09-29 16:03:59.736800438 +0200
++++ programs/Xserver/hw/xfree86/drivers/i810/i810_reg.h 2004-09-29 16:04:13.981718696 +0200
+@@ -459,11 +459,11 @@
+ #define I830_HEAD_MASK 0x001FFFFC
+
+ #define RING_START 0x08
+-#define START_ADDR 0x00FFFFF8
++#define START_ADDR 0x03FFFFF8
+ #define I830_RING_START_MASK 0xFFFFF000
+
+ #define RING_LEN 0x0C
+-#define RING_NR_PAGES 0x000FF000
++#define RING_NR_PAGES 0x001FF000
+ #define I830_RING_NR_PAGES 0x001FF000
+ #define RING_REPORT_MASK 0x00000006
+ #define RING_REPORT_64K 0x00000002
+diff -ur programs/Xserver/hw/xfree86/drivers/i810_old/i830.h programs/Xserver/hw/xfree86/drivers/i810/i830.h
+--- programs/Xserver/hw/xfree86/drivers/i810_old/i830.h 2004-09-29 16:03:59.645813735 +0200
++++ programs/Xserver/hw/xfree86/drivers/i810/i830.h 2004-09-29 16:04:13.982718550 +0200
+@@ -180,17 +180,17 @@
+ int CacheLines;
+
+ /* These are set in PreInit and never changed. */
+- unsigned long FbMapSize;
+- unsigned long TotalVideoRam;
++ long FbMapSize;
++ long TotalVideoRam;
+ I830MemRange StolenMemory; /* pre-allocated memory */
+- unsigned long BIOSMemorySize; /* min stolen pool size */
++ long BIOSMemorySize; /* min stolen pool size */
+ int BIOSMemSizeLoc;
+
+ /* These change according to what has been allocated. */
+ long FreeMemory;
+ I830MemRange MemoryAperture;
+ I830MemPool StolenPool;
+- unsigned long allocatedMemory;
++ long allocatedMemory;
+
+ /* Regions allocated either from the above pools, or from agpgart. */
+ /* for single and dual head configurations */
+@@ -348,7 +348,7 @@
+ int xoffset;
+ int yoffset;
+
+- int SaveGeneration;
++ unsigned int SaveGeneration;
+ Bool vbeRestoreWorkaround;
+ Bool displayInfo;
+ Bool devicePresence;
+@@ -415,7 +415,7 @@
+ extern Bool I830BindGARTMemory(ScrnInfoPtr pScrn);
+ extern Bool I830UnbindGARTMemory(ScrnInfoPtr pScrn);
+ extern unsigned long I830AllocVidMem(ScrnInfoPtr pScrn, I830MemRange *result,
+- I830MemPool *pool, unsigned long size,
++ I830MemPool *pool, long size,
+ unsigned long alignment, int flags);
+
+ extern void I830PrintAllRegisters(I830RegPtr i830Reg);
+diff -ur programs/Xserver/hw/xfree86/drivers/i810_old/i830_driver.c programs/Xserver/hw/xfree86/drivers/i810/i830_driver.c
+--- programs/Xserver/hw/xfree86/drivers/i810_old/i830_driver.c 2004-09-29 16:03:59.646813588 +0200
++++ programs/Xserver/hw/xfree86/drivers/i810/i830_driver.c 2004-09-29 16:04:13.986717965 +0200
+@@ -1028,7 +1028,7 @@
+ I830MapMem(ScrnInfoPtr pScrn)
+ {
+ I830Ptr pI830 = I830PTR(pScrn);
+- unsigned i;
++ long i;
+
+ for (i = 2; i < pI830->FbMapSize; i <<= 1) ;
+ pI830->FbMapSize = i;
+@@ -2909,7 +2909,7 @@
+ OUTREG(LP_RING + RING_TAIL, 0);
+ OUTREG(LP_RING + RING_HEAD, 0);
+
+- if ((pI830->LpRing->mem.Start & I830_RING_START_MASK) !=
++ if ((long)(pI830->LpRing->mem.Start & I830_RING_START_MASK) !=
+ pI830->LpRing->mem.Start) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "I830SetRingRegs: Ring buffer start (%lx) violates its "
+@@ -3452,7 +3452,7 @@
+ I830Ptr pI8301 = I830PTR(pI830->entityPrivate->pScrn_1);
+
+ temp = INREG(stridereg);
+- if (temp / pI8301->cpp != pI830->entityPrivate->pScrn_1->displayWidth) {
++ if (temp / pI8301->cpp != (CARD32)(pI830->entityPrivate->pScrn_1->displayWidth)) {
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "Correcting plane %c stride (%d -> %d)\n", PIPE_NAME(pI830->pipe),
+ (int)(temp / pI8301->cpp), pI830->entityPrivate->pScrn_1->displayWidth);
+@@ -3470,7 +3470,7 @@
+ sizereg = pI830->pipe ? DSPASIZE : DSPBSIZE;
+
+ temp = INREG(stridereg);
+- if (temp / pI8302->cpp != pI830->entityPrivate->pScrn_2->displayWidth) {
++ if (temp / pI8302->cpp != (CARD32)(pI830->entityPrivate->pScrn_2->displayWidth)) {
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "Correcting plane %c stride (%d -> %d)\n", PIPE_NAME(!pI830->pipe),
+ (int)(temp / pI8302->cpp), pI830->entityPrivate->pScrn_2->displayWidth);
+@@ -3489,7 +3489,7 @@
+ I830Ptr pI8302 = I830PTR(pI830->entityPrivate->pScrn_2);
+
+ temp = INREG(stridereg);
+- if (temp / pI8301->cpp != pI830->entityPrivate->pScrn_1->displayWidth) {
++ if (temp / pI8301->cpp != (CARD32)(pI830->entityPrivate->pScrn_1->displayWidth)) {
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "Correcting plane %c stride (%d -> %d)\n", PIPE_NAME(pI830->pipe),
+ (int)(temp / pI8301->cpp), pI830->entityPrivate->pScrn_1->displayWidth);
+@@ -3505,7 +3505,7 @@
+ sizereg = !pI830->pipe ? DSPASIZE : DSPBSIZE;
+
+ temp = INREG(stridereg);
+- if (temp / pI8302->cpp != pI830->entityPrivate->pScrn_2->displayWidth) {
++ if (temp / pI8302->cpp != ((CARD32)pI830->entityPrivate->pScrn_2->displayWidth)) {
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "Correcting plane %c stride (%d -> %d)\n", PIPE_NAME(!pI830->pipe),
+ (int)(temp / pI8302->cpp), pI830->entityPrivate->pScrn_2->displayWidth);
+@@ -3526,7 +3526,7 @@
+ continue;
+
+ temp = INREG(stridereg);
+- if (temp / pI830->cpp != pScrn->displayWidth) {
++ if (temp / pI830->cpp != (CARD32)pScrn->displayWidth) {
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "Correcting plane %c stride (%d -> %d)\n", PIPE_NAME(i),
+ (int)(temp / pI830->cpp), pScrn->displayWidth);
+@@ -4527,7 +4527,8 @@
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ I830Ptr pI830 = I830PTR(pScrn);
+ Bool on = xf86IsUnblank(mode);
+- CARD32 temp, ctrl, base, i;
++ CARD32 temp, ctrl, base;
++ int i;
+
+ DPRINTF(PFX, "I830BIOSSaveScreen: %d, on is %s\n", mode, BOOLTOSTRING(on));
+
+Only in programs/Xserver/hw/xfree86/drivers/i810: i830_driver.c.orig
+diff -ur programs/Xserver/hw/xfree86/drivers/i810_old/i830_memory.c programs/Xserver/hw/xfree86/drivers/i810/i830_memory.c
+--- programs/Xserver/hw/xfree86/drivers/i810_old/i830_memory.c 2004-09-29 16:03:59.547828054 +0200
++++ programs/Xserver/hw/xfree86/drivers/i810/i830_memory.c 2004-09-29 16:04:13.988717673 +0200
+@@ -63,10 +63,10 @@
+ */
+ static unsigned long
+ AllocFromPool(ScrnInfoPtr pScrn, I830MemRange *result, I830MemPool *pool,
+- unsigned long size, unsigned long alignment, int flags)
++ long size, unsigned long alignment, int flags)
+ {
+ I830Ptr pI830 = I830PTR(pScrn);
+- unsigned long needed, start, end;
++ long needed, start, end;
+ Bool dryrun = ((flags & ALLOCATE_DRY_RUN) != 0);
+
+ if (!result || !pool || !size)
+@@ -94,7 +94,7 @@
+ }
+ }
+ if (needed > pool->Free.Size) {
+- unsigned long extra;
++ long extra;
+ /* See if the pool can be grown. */
+ if (pI830->StolenOnly && !dryrun)
+ return 0;
+@@ -107,7 +107,7 @@
+ return 0;
+ }
+
+- if (!dryrun && (extra > pI830->MemoryAperture.Size))
++ if (!dryrun && ((long)extra > pI830->MemoryAperture.Size))
+ return 0;
+
+ pool->Free.Size += extra;
+@@ -136,7 +136,7 @@
+ }
+
+ static unsigned long
+-AllocFromAGP(ScrnInfoPtr pScrn, I830MemRange *result, unsigned long size,
++AllocFromAGP(ScrnInfoPtr pScrn, I830MemRange *result, long size,
+ unsigned long alignment, int flags)
+ {
+ I830Ptr pI830 = I830PTR(pScrn);
+@@ -212,7 +212,7 @@
+
+ unsigned long
+ I830AllocVidMem(ScrnInfoPtr pScrn, I830MemRange *result, I830MemPool *pool,
+- unsigned long size, unsigned long alignment, int flags)
++ long size, unsigned long alignment, int flags)
+ {
+ I830Ptr pI830 = I830PTR(pScrn);
+ Bool dryrun = ((flags & ALLOCATE_DRY_RUN) != 0);
+@@ -392,7 +392,7 @@
+ I830Allocate2DMemory(ScrnInfoPtr pScrn, const int flags)
+ {
+ I830Ptr pI830 = I830PTR(pScrn);
+- unsigned long size, alloced;
++ long size, alloced;
+ Bool dryrun = ((flags & ALLOCATE_DRY_RUN) != 0);
+ int verbosity = dryrun ? 4 : 1;
+ const char *s = dryrun ? "[dryrun] " : "";
+@@ -610,9 +610,9 @@
+ return FALSE;
+ }
+ } else {
+- unsigned long lineSize;
+- unsigned long extra = 0;
+- unsigned long maxFb = 0;
++ long lineSize;
++ long extra = 0;
++ long maxFb = 0;
+
+ /*
+ * XXX Need to "free" up any 3D allocations if the DRI ended up
+@@ -857,7 +857,7 @@
+ I830GetExcessMemoryAllocations(ScrnInfoPtr pScrn)
+ {
+ I830Ptr pI830 = I830PTR(pScrn);
+- unsigned long allocated;
++ long allocated;
+
+ allocated = pI830->StolenPool.Total.Size + pI830->allocatedMemory;
+ if (allocated > pI830->TotalVideoRam)
+@@ -1367,7 +1367,7 @@
+ I830Ptr pI830 = I830PTR(pScrn);
+ int pitch, ntiles, i;
+ static int nextTile = 0;
+- static int tileGeneration = -1;
++ static unsigned int tileGeneration = -1;
+
+ #if 0
+ /* Hack to "improve" the alignment of the front buffer.