On Tue, Sep 17, 2002 at 08:19:25PM +0200, Martijn van de Streek wrote:
> The siliconmotion driver has been lacking XVideo support since the
> first 4.2.* prerelease debs, while the xpert list only talks of 'getting
> rid of the wait for retrace'
> (http://www.xfree86.org/pipermail/xpert/2002-April/016661.html) in 4.2.

*shrug* What I ship is what's tagged xf-4_2-branch.

> There's also a bug in the siliconmotion driver in "current" XFree86
> 4.2.1-pre debs: sometimes when the X server exits/gets killed/switches
> back to text mode I get a screen full of garbage and a hanging machine.

Well, I suggest you take this up with the Xpert list.

Just for grins I've attached the output of

xcvs diff -uN -r xf-4_2-branch -r HEAD 
xc/programs/Xserver/hw/xfree86/drivers/siliconmotion

-- 
G. Branden Robinson                |    If you wish to strive for peace of
Debian GNU/Linux                   |    soul, then believe; if you wish to
[EMAIL PROTECTED]                 |    be a devotee of truth, then
http://people.debian.org/~branden/ |    inquire.     -- Friedrich Nietzsche
Index: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/regsmi.h
===================================================================
RCS file: 
/home/branden/packages/xfree86/cvsup/xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/regsmi.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -u -r1.1 -r1.2
--- xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/regsmi.h       28 Nov 
2000 20:59:19 -0000      1.1
+++ xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/regsmi.h       25 Jan 
2002 21:56:09 -0000      1.2
@@ -26,7 +26,7 @@
 sale, use or other dealings in this Software without prior written
 authorization from the XFree86 Project and SIlicon Motion.
 */
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/regsmi.h,v 
1.1 2000/11/28 20:59:19 dawes Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/regsmi.h,v 
1.2 2002/01/25 21:56:09 tsi Exp $ */
 
 #ifndef _REGSMI_H
 #define _REGSMI_H
@@ -57,8 +57,8 @@
        }
        else
        {
-               outb(indexPort, index);
-               return(inb(dataPort));
+               outb(pSmi->PIOBase + indexPort, index);
+               return(inb(pSmi->PIOBase + dataPort));
        }
 }
 
@@ -72,8 +72,8 @@
        }
        else
        {
-               outb(indexPort, index);
-               outb(dataPort, data);
+               outb(pSmi->PIOBase + indexPort, index);
+               outb(pSmi->PIOBase + dataPort, data);
        }
 }
 
@@ -86,7 +86,7 @@
        }
        else
        {
-               return(inb(port));
+               return(inb(pSmi->PIOBase + port));
        }
 }
 
@@ -99,7 +99,7 @@
        }
        else
        {
-               outb(port, data);
+               outb(pSmi->PIOBase + port, data);
        }
 }
 
Index: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/siliconmotion.cpp
===================================================================
RCS file: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/siliconmotion.cpp
diff -N xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/siliconmotion.cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/siliconmotion.cpp      
24 Jan 2001 00:06:27 -0000      1.5
@@ -0,0 +1,195 @@
+.\" Header:   //Mercury/Projects/archives/XFree86/4.0/siliconmotion.cpp-arc   
1.4   29 Nov 2000 14:12:56   Frido  $
+.\" $XFree86: 
xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/siliconmotion.cpp,v 1.5 
2001/01/24 00:06:27 dawes dead $
+.\" shorthand for double quote that works everywhere.
+.ds q \N'34'
+.TH siliconmotion __drivermansuffix__ "Version 4.0.2"  "XFree86"
+.SH NAME
+siliconmotion \- Silicon Motion video driver
+.SH SYNOPSIS
+.B "Section \*qDevice\*q"
+.br
+.BI "  Identifier \*q"  devname \*q
+.br
+.B  "  Driver \*qsiliconmotion\*q"
+.br
+\ \ ...
+.br
+\ \ [
+.B "Option"
+"optionname" ["optionvalue"]]
+.br
+.B EndSection
+.SH DESCRIPTION
+.B siliconmotion 
+is an XFree86 driver for Silicon Motion based video cards.  The driver is fully
+accelerated, and provides support for the following framebuffer depths:
+8, 16, and 24.  All
+visual types are supported for depth 8, and TrueColor
+visuals are supported for the other depths.
+.SH SUPPORTED HARDWARE
+The
+.B siliconmotion
+driver supports PCI and AGP video cards based on the following Silicon Motion 
chips:
+.TP 12
+.B Lynx
+SM910
+.TP 12
+.B LynxE
+SM810
+.TP 12
+.B Lynx3D
+SM820
+.TP 12
+.B LynxEM
+SM710
+.TP 12
+.B LynxEM+
+SM712
+.TP 12
+.B Lynx3DM
+SM720
+.SH CONFIGURATION DETAILS
+Please refer to XF86Config(__filemansuffix__) for general configuration
+details.  This section only covers configuration details specific to this
+driver.  All options names are case and white space insensitive when
+parsed by the server, for example,  "lynxe" and "LynxE" are equivalent.
+.PP
+The driver auto-detects the chipset type, but the following
+.B ChipSet
+names may optionally be specified in the config file
+.B \*qDevice\*q
+section, and will override the auto-detection:
+.PP
+.RS 4
+"lynx", "lynxe", "lynx3d", "lynxem", "lynxem+", "lynx3dm".
+.RE
+
+.PP
+The following Cursor
+.B Options
+are supported:
+.TP
+.BI "Option \*qHWCursor\*q \*q" boolean \*q
+Enable or disable the HW cursor.  Default: on.
+.TP
+.BI "Option \*qSWCursor\*q \*q" boolean \*q
+Inverse of "HWCursor".  Default: off.
+
+.PP
+The following display
+.B Options
+are supported:
+.TP
+.BI "Option \*qShadowFB\*q \*q" boolean \*q
+Use shadow framebuffer.  Default: off.
+.TP
+.BI "Option \*qRotate\*q \*qCW\*q"
+.TP
+.BI "Option \*qRotate\*q \*qCCW\*q"
+Rotate the screen CW - clockwise or CCW - counter clockwise.
+Uses ShadowFB.  Default: no rotation.
+.TP
+.BI "Option \*qVideoKey\*q \*q" integer \*q
+Set the video color key.  Default: a little off full blue.
+.TP
+.BI "Option \*qByteSwap\*q \*q" boolean \*q
+Turn on byte swapping for capturing using SMI demo board.  Default: off.
+.TP
+.BI "Option \*qUseBIOS\*q \*q" boolean \*q
+Use the BIOS to set the modes. This is used for custom panel timings.
+Default: on.
+
+.PP
+The following video memory
+.B Options
+are supported:
+.TP
+.BI "Option \*qset_mclk\*q \*q" integer \*q
+sets the memory clock, where
+.I integer
+is in kHz, and
+.I integer
+<= 100000.  Default: probe the memory clock value,
+and use it at server start.
+
+
+.PP
+The following acceleration and graphics engine
+.B Options
+are supported:
+.TP
+.B "Option \*qNoAccel\*q"
+Disable acceleration.  Very useful for determining if the
+driver has problems with drawing and acceleration routines.  This is the first
+option to try if your server runs but you see graphic corruption on the screen.
+Using it decreases performance, as it uses software emulation for drawing
+operations the video driver can accelerate with hardware.
+Default: acceleration is enabled.
+.TP
+.B "Option \*qfifo_aggressive\*q"
+.TP
+.B "Option \*qfifo_moderate\*q"
+.TP
+.B "Option \*qfifo_conservative\*q"
+alter the settings
+for the threshold at which the pixel FIFO takes over the internal 
+memory bus to refill itself. The smaller this threshold, the better
+the acceleration performance of the card. You may try the fastest 
+setting
+.RB ( "fifo_aggressive" )
+and move down if you encounter pixel corruption.
+The optimal setting will probably depend on dot-clock and on color 
+depth. Note that specifying any of these options will also alter other
+memory settings which may increase performance, so trying
+.B "fifo_conservative"
+will in most cases be a slight benefit (this uses the chip defaults).
+If pixel corruption or transient streaking is observed during drawing
+operations then removing any fifo options is recommended.  Default: none.
+
+.PP
+The following PCI bus
+.B Options
+are supported:
+.TP
+.BI "Option \*qpci_burst\*q \*q" boolean \*q
+will enable PCI burst mode. This should work on all but a
+few broken PCI chipsets, and will increase performance.  Default: off.
+.TP
+.BI "Option \*qpci_retry\*q \*q" boolean \*q
+will allow the driver to rely on PCI Retry to program the 
+ViRGE registers. 
+.B "pci_burst"
+must be enabled for this to work. 
+This will increase performance, especially for small fills/blits, 
+because the driver does not have to poll the ViRGE before sending it 
+commands to make sure it is ready. It should work on most 
+recent PCI chipsets.  Default: off.
+
+.PP
+The following additional
+.B Options
+are supported:
+.TP
+.BI "Option \*qShowCache\*q \*q" boolean \*q
+Enable or disable viewing offscreen cache memory.  A
+development debug option.  Default: off.
+
+.SH SEE ALSO
+XFree86(1), XF86Config(__filemansuffix__), xf86config(1), Xserver(1), 
X(__miscmansuffix__)
+
+.SH SUPPORT
+For assistance with this driver, or XFree86 in general, check the XFree86 web
+site at http://www.xfree86.org.  A FAQ is available on the web site at
+http://www.xfree86.org/FAQ/.  If you find a problem with XFree86 or have a
+question not answered in the FAQ please use our bug report form available on
+the web site or send mail to [EMAIL PROTECTED]  When reporting problems
+with the driver send as much detail as possible, including chipset type, a 
+server output log, and operating system specifics.
+
+.SH AUTHORS
+Kevin Brosius, 
+Matt Grossman, 
+Harald Koenig,
+Sebastien Marineau,
+Mark Vojkovich,
+Frido Garritsen.
Index: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi.h
===================================================================
RCS file: 
/home/branden/packages/xfree86/cvsup/xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi.h,v
retrieving revision 1.8
retrieving revision 1.11
diff -u -u -r1.8 -r1.11
--- xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi.h  20 Dec 2001 
21:35:38 -0000      1.8
+++ xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi.h  16 Sep 2002 
18:05:59 -0000      1.11
@@ -26,7 +26,7 @@
 sale, use or other dealings in this Software without prior written
 authorization from the XFree86 Project and Silicon Motion.
 */
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi.h,v 1.8 
2001/12/20 21:35:38 eich Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi.h,v 1.11 
2002/09/16 18:05:59 eich Exp $ */
 
 #ifndef _SMI_H
 #define _SMI_H
@@ -88,6 +88,7 @@
 /* Driver data structure; this should contain all needed info for a mode */
 typedef struct
 {
+       Bool    modeInit;
        CARD16  mode;
        CARD8   SR17, SR18, SR21, SR31, SR32, SR6A, SR6B, SR81, SRA0;
        CARD8   CR33, CR33_2, CR3A;
@@ -149,6 +150,7 @@
        CARD8 *                 DataPortBase;   /* Base of data port */
        int                     DataPortSize;   /* Size of data port */
        CARD8 *                 IOBase;         /* Base of MMIO VGA ports */
+       IOADDRESS               PIOBase;        /* Base of I/O ports */
        unsigned char *         FBBase;         /* Base of FB */
        CARD32                  FBOffset;       /* Current visual FB starting
                                                   location */
@@ -210,8 +212,7 @@
        int                     lcdHeight;      /* LCD height */
 
        I2CBusPtr               I2C;            /* Pointer into I2C module */
-       xf86Int10InfoPtr        pInt;           /* Pointer to INT10 module */
-       vbeInfoPtr              pVbe;           /* Pointer to VBE module */
+       xf86Int10InfoPtr        pInt10;         /* Pointer to INT10 module */
 
        /* Shadow frame buffer (rotation) */
        Bool                    shadowFB;       /* Flag if shadow buffer is
Index: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_driver.c
===================================================================
RCS file: 
/home/branden/packages/xfree86/cvsup/xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_driver.c,v
retrieving revision 1.20
retrieving revision 1.26
diff -u -u -r1.20 -r1.26
--- xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_driver.c   4 Jan 
2002 21:22:34 -0000       1.20
+++ xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_driver.c   16 Sep 
2002 18:05:59 -0000      1.26
@@ -26,7 +26,7 @@
 sale, use or other dealings in this Software without prior written
 authorization from The XFree86 Project or Silicon Motion.
 */
-/* $XFree86: 
xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_driver.c,v 1.20 
2002/01/04 21:22:34 tsi Exp $ */
+/* $XFree86: 
xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_driver.c,v 1.26 
2002/09/16 18:05:59 eich Exp $ */
 
 #include "xf86Resources.h"
 #include "xf86RAC.h"
@@ -60,11 +60,11 @@
 static void SMI_Save (ScrnInfoPtr pScrn);
 static void SMI_WriteMode (ScrnInfoPtr pScrn, vgaRegPtr, SMIRegPtr);
 static Bool SMI_ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc,
-                                                  char **argv);
+                           char **argv);
 static int SMI_InternalScreenInit(int scrnIndex, ScreenPtr pScreen);
 static void SMI_PrintRegs(ScrnInfoPtr);
 static ModeStatus SMI_ValidMode(int scrnIndex, DisplayModePtr mode,
-                                                               Bool verbose, 
int flags);
+                                Bool verbose, int flags);
 static void SMI_DisableVideo(ScrnInfoPtr pScrn);
 static void SMI_EnableVideo(ScrnInfoPtr pScrn);
 static Bool SMI_MapMem(ScrnInfoPtr pScrn);
@@ -73,9 +73,9 @@
 static Bool SMI_CloseScreen(int scrnIndex, ScreenPtr pScreen);
 static Bool SMI_SaveScreen(ScreenPtr pScreen, int mode);
 static void SMI_LoadPalette(ScrnInfoPtr pScrn, int numColors, int *indicies,
-                                                       LOCO *colors, VisualPtr 
pVisual);
+                            LOCO *colors, VisualPtr pVisual);
 static void SMI_DisplayPowerManagementSet(ScrnInfoPtr pScrn,
-                                                                               
  int PowerManagementMode, int flags);
+                                          int PowerManagementMode, int flags);
 static Bool SMI_ddc1(int scrnIndex);
 static unsigned int SMI_ddc1Read(ScrnInfoPtr pScrn);
 static void SMI_FreeScreen(int ScrnIndex, int flags);
@@ -83,15 +83,14 @@
 
 
 #define SILICONMOTION_NAME          "Silicon Motion"
-#define SILICONMOTION_DRIVER_NAME      "siliconmotion"
+#define SILICONMOTION_DRIVER_NAME   "siliconmotion"
 #define SILICONMOTION_VERSION_NAME  "1.3.1"
-#define SILICONMOTION_VERSION_MAJOR    1
+#define SILICONMOTION_VERSION_MAJOR 1
 #define SILICONMOTION_VERSION_MINOR 3
 #define SILICONMOTION_PATCHLEVEL    1
-#define SILICONMOTION_DRIVER_VERSION   ( (SILICONMOTION_VERSION_MAJOR << 24)  \
-                                                                               
| (SILICONMOTION_VERSION_MINOR << 16)  \
-                                                                               
| (SILICONMOTION_PATCHLEVEL)               \
-                                                                               
)
+#define SILICONMOTION_DRIVER_VERSION ((SILICONMOTION_VERSION_MAJOR << 24) | \
+                                      (SILICONMOTION_VERSION_MINOR << 16) | \
+                                      (SILICONMOTION_PATCHLEVEL))
 
 /*
  * This contains the functions needed by the server after loading the
@@ -256,6 +255,7 @@
        "xf86DestroyI2CDevRec",
        "xf86I2CBusInit",
        "xf86I2CDevInit",
+       "xf86I2CReadBytes",
        "xf86I2CWriteByte",
        NULL
 };
@@ -291,7 +291,6 @@
        "cfbScreenInit",
        "cfb16ScreenInit",
        "cfb24ScreenInit",
-       "cfb24_32ScreenInit",
        "cfb32ScreenInit",
        "cfb16BresS",
        "cfb24BresS",
@@ -518,7 +517,8 @@
        int mclk;
        vgaHWPtr hwp;
        int vgaCRIndex, vgaCRReg, vgaIOBase;
-
+       vbeInfoPtr pVbe = NULL;
+       
        ENTER_PROC("SMI_PreInit");
 
        if (flags & PROBE_DETECT)
@@ -859,17 +859,22 @@
                LEAVE_PROC("SMI_PreInit");
                return(FALSE);
        }
+
+       if (xf86LoadSubModule(pScrn,"int10")) {
+           xf86LoaderReqSymLists(int10Symbols,NULL);
+           pSmi->pInt10 = xf86InitInt10(pEnt->index);
+       }
        
-       if (xf86LoadSubModule(pScrn, "vbe"))
+       if (pSmi->pInt10 && xf86LoadSubModule(pScrn, "vbe"))
        {
-               xf86LoaderReqSymLists(vbeSymbols, NULL);
-               pSmi->pVbe = VBEInit(NULL, pEnt->index);
+           xf86LoaderReqSymLists(vbeSymbols, NULL);
+           pVbe = VBEInit(pSmi->pInt10, pEnt->index);
        }
 
        pSmi->PciInfo = xf86GetPciInfoForEntity(pEnt->index);
        xf86RegisterResources(pEnt->index, NULL, ResExclusive);
-/*     xf86SetOperatingState(RES_SHARED_VGA, pEnt->index, ResUnusedOpr);*/
-/*     xf86SetOperatingState(resVgaMemShared, pEnt->index, ResDisableOpr);*/
+/*     xf86SetOperatingState(resVgaIo, pEnt->index, ResUnusedOpr); */
+/*     xf86SetOperatingState(resVgaMem, pEnt->index, ResDisableOpr); */
 
        /*
         * Set the Chipset and ChipRev, allowing config file entries to
@@ -939,6 +944,7 @@
        vgaIOBase  = hwp->IOBase;
        vgaCRIndex = vgaIOBase + VGA_CRTC_INDEX_OFFSET;
        vgaCRReg   = vgaIOBase + VGA_CRTC_DATA_OFFSET;
+       pSmi->PIOBase = hwp->PIOOffset;
 
        xf86ErrorFVerb(VERBLEV, "\tSMI_PreInit vgaCRIndex=%x, vgaIOBase=%x, "
                        "MMIOBase=%x\n", vgaCRIndex, vgaIOBase, hwp->MMIOBase);
@@ -957,9 +963,9 @@
 
                xf86LoaderReqSymLists(ddcSymbols, NULL);
 #if 1 /* PDR#579 */
-               if (pSmi->pVbe)
+               if (pVbe)
                {
-                       pMon = vbeDoEDID(pSmi->pVbe, NULL);
+                       pMon = vbeDoEDID(pVbe, NULL);
                        if (pMon != NULL)
                        {
                                if (   (pMon->rawData[0] == 0x00)
@@ -981,8 +987,8 @@
                        }
                }
 #else
-               if (   (pSmi->pVbe)
-                       && ((pMon = xf86PrintEDID(vbeDoEDID(pSmi->pVbe, NULL))) 
!= NULL)
+               if (   (pVbe)
+                       && ((pMon = xf86PrintEDID(vbeDoEDID(pVbe, NULL))) != 
NULL)
                )
                {
                        xf86SetDDCproperties(pScrn, pMon);
@@ -998,11 +1004,10 @@
                        }
                }
        }
-       if (pSmi->pVbe)
-       {
-               vbeFree(pSmi->pVbe);
-               pSmi->pVbe = NULL;
-       }
+
+       vbeFree(pVbe);
+       xf86FreeInt10(pSmi->pInt10);
+       pSmi->pInt10 = NULL;
 
        /*
         * If the driver can do gamma correction, it should call xf86SetGamma()
@@ -1509,12 +1514,12 @@
                pSmi->ModeStructInit = TRUE;
        }
 
-       if (pSmi->useBIOS && (pSmi->pVbe != NULL))
+       if (pSmi->useBIOS && (pSmi->pInt10 != NULL))
        {
-               pSmi->pVbe->pInt10->num = 0x10;
-               pSmi->pVbe->pInt10->ax = 0x0F00;
-               xf86ExecX86int10(pSmi->pVbe->pInt10);
-               save->mode = pSmi->pVbe->pInt10->ax & 0x007F;
+               pSmi->pInt10->num = 0x10;
+               pSmi->pInt10->ax = 0x0F00;
+               xf86ExecX86int10(pSmi->pInt10);
+               save->mode = pSmi->pInt10->ax & 0x007F;
                xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Current mode 0x%02X.\n",
                                save->mode);
        }
@@ -1554,19 +1559,19 @@
        /* Wait for engine to become idle */
        WaitIdle();
 
-       if (pSmi->useBIOS && (pSmi->pVbe->pInt10 != NULL)
+       if (pSmi->useBIOS && (pSmi->pInt10 != NULL)
            && (restore->mode != 0))
        {
-               pSmi->pVbe->pInt10->num = 0x10;
-               pSmi->pVbe->pInt10->ax = restore->mode | 0x80;
+               pSmi->pInt10->num = 0x10;
+               pSmi->pInt10->ax = restore->mode | 0x80;
                xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Setting mode 0x%02X\n",
                                restore->mode);
-               xf86ExecX86int10(pSmi->pVbe->pInt10);
+               xf86ExecX86int10(pSmi->pInt10);
 
                /* Enable linear mode. */
-               outb(VGA_SEQ_INDEX, 0x18);
-               tmp = inb(VGA_SEQ_DATA);
-               outb(VGA_SEQ_DATA, tmp | 0x01);
+               outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x18);
+               tmp = inb(pSmi->PIOBase + VGA_SEQ_DATA);
+               outb(pSmi->PIOBase + VGA_SEQ_DATA, tmp | 0x01);
 
                /* Enable DPR/VPR registers. */
                tmp = VGAIN8_INDEX(pSmi, VGA_SEQ_INDEX, VGA_SEQ_DATA, 0x21);
@@ -1662,14 +1667,13 @@
                }
 
                /* Restore the standard VGA registers */
-               if (xf86IsPrimaryPci(pSmi->PciInfo))
-               {
-                       vgaHWRestore(pScrn, vgaSavePtr, VGA_SR_ALL);
-               }
-               else
-               {
-                       vgaHWRestore(pScrn, vgaSavePtr, VGA_SR_MODE);
-               }
+               if (xf86IsPrimaryPci(pSmi->PciInfo)) {
+                   vgaHWRestore(pScrn, vgaSavePtr, VGA_SR_CMAP 
+                                | VGA_SR_FONTS);
+               } 
+
+               if (restore->modeInit)
+                   vgaHWRestore(pScrn, vgaSavePtr, VGA_SR_MODE);
 
                if (!SMI_LYNXM_SERIES(pSmi->Chipset))
                {
@@ -1981,12 +1985,13 @@
 
        pEnt = xf86GetEntityInfo(pScrn->entityList[0]);
        
+       if (!pSmi->pInt10) {
+           pSmi->pInt10 = xf86InitInt10(pEnt->index);
+       }
+
        /* Save the chip/graphics state */
        SMI_Save(pScrn);
        
-       if (!pSmi->pVbe) {
-           pSmi->pVbe = VBEInit(NULL, pEnt->index);
-       }
        /* Zero the frame buffer, #258 */
        memset(pSmi->FBBase, 0, pSmi->videoRAMBytes);
 
@@ -2400,6 +2405,8 @@
                return(FALSE);
        }
 
+       new->modeInit = TRUE;
+
        if (pSmi->rotate)
        {
                pSmi->width  = pScrn->virtualY;
@@ -2412,8 +2419,8 @@
        }
        pSmi->Bpp    = pScrn->bitsPerPixel / 8;
 
-       outb(VGA_SEQ_INDEX, 0x17);
-       tmp = inb(VGA_SEQ_DATA);
+       outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x17);
+       tmp = inb(pSmi->PIOBase + VGA_SEQ_DATA);
        if (pSmi->pci_burst)
        {
                new->SR17 = tmp | 0x20;
@@ -2423,17 +2430,17 @@
                new->SR17 = tmp & ~0x20;
        }
 
-       outb(VGA_SEQ_INDEX, 0x18);
-       new->SR18 = inb(VGA_SEQ_DATA) | 0x11;
+       outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x18);
+       new->SR18 = inb(pSmi->PIOBase + VGA_SEQ_DATA) | 0x11;
 
-       outb(VGA_SEQ_INDEX, 0x21);
-       new->SR21 = inb(VGA_SEQ_DATA) & ~0x03;
+       outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x21);
+       new->SR21 = inb(pSmi->PIOBase + VGA_SEQ_DATA) & ~0x03;
 
-       outb(VGA_SEQ_INDEX, 0x31);
-       new->SR31 = inb(VGA_SEQ_DATA) & ~0xC0;
+       outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x31);
+       new->SR31 = inb(pSmi->PIOBase + VGA_SEQ_DATA) & ~0xC0;
 
-       outb(VGA_SEQ_INDEX, 0x32);
-       new->SR32 = inb(VGA_SEQ_DATA) & ~0x07;
+       outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x32);
+       new->SR32 = inb(pSmi->PIOBase + VGA_SEQ_DATA) & ~0x07;
        if (SMI_LYNXM_SERIES(pSmi->Chipset))
        {
                new->SR32 |= 0x04;
@@ -2539,11 +2546,10 @@
                }
        }
 
-
-    /* CZ 2.11.2001: for gamma correction (TODO: other chipsets?) */
-    new->CCR66 = VGAIN8_INDEX(pSmi, VGA_SEQ_INDEX, VGA_SEQ_DATA, 0x66);
-    if (pSmi->Chipset == SMI_LYNX3DM) {
-        switch (pScrn->bitsPerPixel) {
+       /* CZ 2.11.2001: for gamma correction (TODO: other chipsets?) */
+       new->CCR66 = VGAIN8_INDEX(pSmi, VGA_SEQ_INDEX, VGA_SEQ_DATA, 0x66);
+       if (pSmi->Chipset == SMI_LYNX3DM) {
+           switch (pScrn->bitsPerPixel) {
            case 8:
                new->CCR66 = (new->CCR66 & 0xF3) | 0x00; /* 6 bits-RAM */
                break;
@@ -2558,12 +2564,11 @@
            default:
                LEAVE_PROC("SMI_ModeInit");
                return(FALSE);
-        }
-    }
-    /* end CZ */
+           }
+       }
 
-       outb(VGA_SEQ_INDEX, 0x30);
-       if (inb(VGA_SEQ_DATA) & 0x01)
+       outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x30);
+       if (inb(pSmi->PIOBase + VGA_SEQ_DATA) & 0x01)
        {
                new->SR21 = 0x00;
        }
@@ -2755,7 +2760,7 @@
        vgaRegPtr vgaSavePtr = &hwp->SavedReg;
        SMIRegPtr SMISavePtr = &pSmi->SavedReg;
        Bool ret;
-
+       
        ENTER_PROC("SMI_CloseScreen");
 
        if (pScrn->vtSema)
@@ -2777,10 +2782,10 @@
        {
                xfree(pSmi->DGAModes);
        }
-       if (pSmi->pVbe != NULL)
+       if (pSmi->pInt10 != NULL)
        {
-               vbeFree(pSmi->pVbe);
-               pSmi->pVbe = NULL;
+               xf86FreeInt10(pSmi->pInt10);
+               pSmi->pInt10 = NULL;
        }
 #ifdef XvExtension
        if (pSmi->ptrAdaptor != NULL)
@@ -2949,16 +2954,16 @@
        vgaHWSetStdFuncs(hwp);
 
        /* Enable linear mode */
-       outb(VGA_SEQ_INDEX, 0x18);
-       tmp = inb(VGA_SEQ_DATA);
+       outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x18);
+       tmp = inb(pSmi->PIOBase + VGA_SEQ_DATA);
        pSmi->SR18Value = tmp;                                  /* PDR#521 */
-       outb(VGA_SEQ_DATA, tmp | 0x11);
+       outb(pSmi->PIOBase + VGA_SEQ_DATA, tmp | 0x11);
 
        /* Enable 2D/3D Engine and Video Processor */
-       outb(VGA_SEQ_INDEX, 0x21);
-       tmp = inb(VGA_SEQ_DATA);
+       outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x21);
+       tmp = inb(pSmi->PIOBase + VGA_SEQ_DATA);
        pSmi->SR21Value = tmp;                                  /* PDR#521 */
-       outb(VGA_SEQ_DATA, tmp & ~0x03);
+       outb(pSmi->PIOBase + VGA_SEQ_DATA, tmp & ~0x03);
 
        LEAVE_PROC("SMI_EnableMmio");
 }
@@ -2974,12 +2979,12 @@
        vgaHWSetStdFuncs(hwp);
 
        /* Disable 2D/3D Engine and Video Processor */
-       outb(VGA_SEQ_INDEX, 0x21);
-       outb(VGA_SEQ_DATA, pSmi->SR21Value);    /* PDR#521 */
+       outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x21);
+       outb(pSmi->PIOBase + VGA_SEQ_DATA, pSmi->SR21Value);    /* PDR#521 */
 
        /* Disable linear mode */
-       outb(VGA_SEQ_INDEX, 0x18);
-       outb(VGA_SEQ_DATA, pSmi->SR18Value);    /* PDR#521 */
+       outb(pSmi->PIOBase + VGA_SEQ_INDEX, 0x18);
+       outb(pSmi->PIOBase + VGA_SEQ_DATA, pSmi->SR18Value);    /* PDR#521 */
 
        LEAVE_PROC("SMI_DisableMmio");
 }
@@ -3094,31 +3099,31 @@
        }
 
        #if 1 /* PDR#735 */
-       if (pSmi->pVbe->pInt10 != NULL)
+       if (pSmi->pInt10 != NULL)
        {
-               pSmi->pVbe->pInt10->ax = 0x4F10;
+               pSmi->pInt10->ax = 0x4F10;
                switch (PowerManagementMode)
                {
                        case DPMSModeOn:
-                               pSmi->pVbe->pInt10->bx = 0x0001;
+                               pSmi->pInt10->bx = 0x0001;
                                break;
 
                        case DPMSModeStandby:
-                               pSmi->pVbe->pInt10->bx = 0x0101;
+                               pSmi->pInt10->bx = 0x0101;
                                break;
 
                        case DPMSModeSuspend:
-                               pSmi->pVbe->pInt10->bx = 0x0201;
+                               pSmi->pInt10->bx = 0x0201;
                                break;
 
                        case DPMSModeOff:
-                               pSmi->pVbe->pInt10->bx = 0x0401;
+                               pSmi->pInt10->bx = 0x0401;
                                break;
                }
-               pSmi->pVbe->pInt10->cx = 0x0000;
-               pSmi->pVbe->pInt10->num = 0x10;
-               xf86ExecX86int10(pSmi->pVbe->pInt10);
-               if (pSmi->pVbe->pInt10->ax == 0x004F)
+               pSmi->pInt10->cx = 0x0000;
+               pSmi->pInt10->num = 0x10;
+               xf86ExecX86int10(pSmi->pInt10);
+               if (pSmi->pInt10->ax == 0x004F)
                {
                        pSmi->CurrentDPMS = PowerManagementMode;
                        #if 1 /* PDR#835 */
Index: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.c
===================================================================
RCS file: 
/home/branden/packages/xfree86/cvsup/xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.c,v
retrieving revision 1.6
retrieving revision 1.8
diff -u -u -r1.6 -r1.8
--- xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.c    20 Dec 
2001 21:35:39 -0000      1.6
+++ xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.c    16 Sep 
2002 18:06:00 -0000      1.8
@@ -1,5 +1,4 @@
 /* Header:   //Mercury/Projects/archives/XFree86/4.0/smi_video.c.-arc   1.14   
30 Nov 2000 16:51:40   Frido  $ */
-
 /*
 Copyright (C) 1994-1999 The XFree86 Project, Inc.  All Rights Reserved.
 Copyright (C) 2000 Silicon Motion, Inc.  All Rights Reserved.
@@ -33,6 +32,7 @@
 - SAA7111 support
 - supports attributes: XV_ENCODING, XV_BRIGHTNESS, XV_CONTRAST,
   XV_SATURATION, XV_HUE, XV_COLORKEY, XV_INTERLACED
+  XV_CAPTURE_BRIGHTNESS can be used to set brightness in the capture device
 - bug fixes
 - tries not to use acceleration functions (if USE_XAA = 0)
 - interlaced video for double vertical resolution
@@ -41,7 +41,7 @@
 Date:   2.11.2001
 */
 
-/* $XFree86: 
xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.c,v 1.6 
2001/12/20 21:35:39 eich Exp $ */
+/* $XFree86: 
xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.c,v 1.8 
2002/09/16 18:06:00 eich Exp $ */
 
 #include "smi.h"
 #include "smi_video.h"
@@ -134,7 +134,9 @@
                BoxPtr dstBox, short vid_w, short vid_h, short drw_w, short 
drw_h);
 static void SMI_BlockHandler(int i, pointer blockData, pointer pTimeout,
                pointer pReadMask);
+#if 0
 static void SMI_WaitForSync(ScrnInfoPtr pScrn);
+#endif
 /*static int SMI_SendI2C(ScrnInfoPtr pScrn, CARD8 device, char *devName,
         SMI_I2CDataPtr i2cData);*/
 
@@ -169,7 +171,7 @@
 
 static Atom xvColorKey;
 static Atom xvEncoding;
-static Atom xvBrightness, xvContrast, xvSaturation, xvHue;
+static Atom xvBrightness,xvCapBrightness, xvContrast, xvSaturation, xvHue;
 static Atom xvInterlaced;
 
 
@@ -255,6 +257,7 @@
 
 #define XV_ENCODING_NAME        "XV_ENCODING"
 #define XV_BRIGHTNESS_NAME      "XV_BRIGHTNESS"
+#define XV_CAPTURE_BRIGHTNESS_NAME      "XV_CAPTURE_BRIGHTNESS"
 #define XV_CONTRAST_NAME        "XV_CONTRAST"
 #define XV_SATURATION_NAME      "XV_SATURATION"
 #define XV_HUE_NAME             "XV_HUE"
@@ -263,9 +266,10 @@
 
 
 /* fixed order! */
-static XF86AttributeRec SMI_VideoAttributes[N_ATTRS] = {
+static XF86AttributeRec SMI_VideoAttributesSAA711x[N_ATTRS] = {
     {XvSettable | XvGettable,        0, N_ENCODINGS-1, XV_ENCODING_NAME},
     {XvSettable | XvGettable,        0,           255, XV_BRIGHTNESS_NAME},
+    {XvSettable | XvGettable,        0,           255, 
XV_CAPTURE_BRIGHTNESS_NAME},
     {XvSettable | XvGettable,        0,           127, XV_CONTRAST_NAME},
     {XvSettable | XvGettable,        0,           127, XV_SATURATION_NAME},
     {XvSettable | XvGettable,     -128,           127, XV_HUE_NAME},
@@ -273,6 +277,11 @@
     {XvSettable | XvGettable,        0,             1, XV_INTERLACED_NAME},
 };
 
+static XF86AttributeRec SMI_VideoAttributes[N_ATTRS] = {
+    {XvSettable | XvGettable,        0,           255, XV_BRIGHTNESS_NAME},
+    {XvSettable | XvGettable, 0x000000,      0xFFFFFF, XV_COLORKEY_NAME},
+};
+
 
 /**************************************************************************/
 static XF86ImageRec SMI_VideoImages[] =
@@ -393,7 +402,7 @@
 };
 
 
-
+#if 0
 static I2CByte SAA7110InitData[] =
 {
        /* Configuration */
@@ -418,7 +427,7 @@
     0x22, 0x40, 0x2C, 0x03,
 
 };
-
+#endif
 
 static I2CByte SAA7111InitData[] =
 {
@@ -616,7 +625,7 @@
 
     if (numAdaptors != 0)
     {
-      DEBUG((VERBLEV, "ScreenInit\n"));
+      DEBUG((VERBLEV, "ScreenInit %i\n",numAdaptors));
         xf86XVScreenInit(pScreen, ptrAdaptors, numAdaptors);
     }
 
@@ -635,6 +644,7 @@
  *  Video codec controls
  */
 
+#if 0
 /**
  * scales value value of attribute i to range min, max
  */
@@ -644,13 +654,16 @@
     return min + (value - SMI_VideoAttributes[i].min_value) * (max - min) /
        (SMI_VideoAttributes[i].max_value - SMI_VideoAttributes[i].min_value);
 }
-
+#endif
 /**
  * sets video decoder attributes channel, encoding, brightness, contrast, 
saturation, hue
  */
 static int
 SetAttr(ScrnInfoPtr pScrn, int i, int value)
 {
+    SMIPtr pSmi = SMIPTR(pScrn);
+    SMI_PortPtr pPort = (SMI_PortPtr) pSmi->ptrAdaptor->pPortPrivates[0].ptr;
+
     if (i < XV_ENCODING || i > XV_HUE)
        return BadMatch;
     
@@ -658,15 +671,16 @@
     value = CLAMP(value, SMI_VideoAttributes[i].min_value,
                  SMI_VideoAttributes[i].max_value);
 
-#if 0
-    if (pPPriv->I2CDev == SAA7110) {
+    if (i == XV_BRIGHTNESS) {
+       int my_value = (value <= 128? value + 128 : value - 128);
+       WRITE_VPR(pSmi, 0x5C, 0xEDEDED | (my_value << 24));
+    } else if (pPort->I2CDev.SlaveAddr == SAA7110) {
        return SetAttrSAA7110(pScrn, i, value);
     }
-    else if (pPPriv->I2CDev == SAA7111) {
-#endif
+    else if (pPort->I2CDev.SlaveAddr == SAA7111) {
        return SetAttrSAA7111(pScrn, i, value);
-#if 0
     }
+#if 0
     else {
        return XvBadAlloc;
     }
@@ -729,12 +743,12 @@
            }
        }
     }
-    else if (i >= XV_BRIGHTNESS && i <= XV_HUE) {
+    else if (i >= XV_CAPTURE_BRIGHTNESS && i <= XV_HUE) {
        int slave_adr = 0;
 
        switch (i) {
 
-       case XV_BRIGHTNESS:
+       case XV_CAPTURE_BRIGHTNESS:
            DEBUG((VERBLEV, "SetAttribute XV_BRIGHTNESS: %d\n", value));
            slave_adr = 0x0a;
            break;
@@ -764,8 +778,6 @@
        return BadMatch;
     }
 
-    pPort->Attribute[i] = value;
-    
     /* debug: show registers */
     {
        I2CByte i2c_bytes[32];
@@ -886,38 +898,40 @@
     smiPortPtr->I2CDev.SlaveAddr = SAA7111;
     smiPortPtr->I2CDev.pI2CBus = pSmi->I2C;
 
-    if (!xf86I2CDevInit(&(smiPortPtr->I2CDev)))
-    {
-        LEAVE_PROC("SMI_SetupVideo");
-        return(NULL);
-    }
-    DEBUG((VERBLEV, "SAA7111 intialized\n"));
-
-    if (!xf86I2CWriteVec(&(smiPortPtr->I2CDev), SAA7111InitData, 
ENTRIES(SAA7111InitData) / 2))
+    
+    if (xf86I2CDevInit(&(smiPortPtr->I2CDev)))
     {
-        LEAVE_PROC("SMI_SetupVideo");
-        return(NULL);
-    }
-
-       REGION_INIT(pScreen, &smiPortPtr->clip, NullBox, 0);
-
-       pSmi->ptrAdaptor = ptrAdaptor;
-       pSmi->BlockHandler = pScreen->BlockHandler;
-       pScreen->BlockHandler = SMI_BlockHandler;
-
-    xvEncoding   = MAKE_ATOM(XV_ENCODING_NAME);
-    xvHue        = MAKE_ATOM(XV_HUE_NAME);
-    xvSaturation = MAKE_ATOM(XV_SATURATION_NAME);
-    xvBrightness = MAKE_ATOM(XV_BRIGHTNESS_NAME);
-    xvContrast   = MAKE_ATOM(XV_CONTRAST_NAME);
-
+       
+       if (xf86I2CWriteVec(&(smiPortPtr->I2CDev),      SAA7111InitData, 
+                           ENTRIES(SAA7111InitData) / 2)) {
+           xvEncoding   = MAKE_ATOM(XV_ENCODING_NAME);
+           xvHue        = MAKE_ATOM(XV_HUE_NAME);
+           xvSaturation = MAKE_ATOM(XV_SATURATION_NAME);
+           xvContrast   = MAKE_ATOM(XV_CONTRAST_NAME);
+           
+           xvInterlaced = MAKE_ATOM(XV_INTERLACED_NAME);
+           DEBUG((VERBLEV, "SAA7111 intialized\n"));
+    
+       } else { 
+           xf86DestroyI2CDevRec(&(smiPortPtr->I2CDev),FALSE);
+           smiPortPtr->I2CDev.SlaveAddr = 0;
+       }
+    } else
+       smiPortPtr->I2CDev.SlaveAddr = 0;
+       
+    REGION_INIT(pScreen, &smiPortPtr->clip, NullBox, 0);
+    
+    pSmi->ptrAdaptor = ptrAdaptor;
+    pSmi->BlockHandler = pScreen->BlockHandler;
+    pScreen->BlockHandler = SMI_BlockHandler;
+    
     xvColorKey   = MAKE_ATOM(XV_COLORKEY_NAME);
-    xvInterlaced = MAKE_ATOM(XV_INTERLACED_NAME);
-
-       SMI_ResetVideo(pScrn);
-
-       LEAVE_PROC("SMI_SetupVideo");
-       return(ptrAdaptor);
+    xvBrightness = MAKE_ATOM(XV_BRIGHTNESS_NAME);
+    xvCapBrightness = MAKE_ATOM(XV_CAPTURE_BRIGHTNESS_NAME);
+    
+    SMI_ResetVideo(pScrn);
+    LEAVE_PROC("SMI_SetupVideo");
+    return(ptrAdaptor);
 }
 
 
@@ -934,6 +948,7 @@
 
     SetAttr(pScrn, XV_ENCODING, 0);     /* Encoding = pal-composite-0 */
     SetAttr(pScrn, XV_BRIGHTNESS, 128); /* Brightness = 128 (CCIR level) */
+    SetAttr(pScrn, XV_CAPTURE_BRIGHTNESS, 128); /* Brightness = 128 (CCIR 
level) */
     SetAttr(pScrn, XV_CONTRAST, 71);    /* Contrast = 71 (CCIR level) */
     SetAttr(pScrn, XV_SATURATION, 64);  /* Color saturation = 64 (CCIR level) 
*/
     SetAttr(pScrn, XV_HUE, 0);          /* Hue = 0 */
@@ -1253,9 +1268,9 @@
 
        OUT_SEQ(pSmi, 0x21, IN_SEQ(pSmi, 0x21) & ~0x04);
        WRITE_VPR(pSmi, 0x54, READ_VPR(pSmi, 0x54) | 0x00200000);
-
+#if 0
        SMI_WaitForSync(pScrn);
-
+#endif
     /* Video Window I Left and Top Boundaries */
        WRITE_VPR(pSmi, 0x14, dstBox.x1 + (dstBox.y1 << 16));
     /* Video Window I Right and Bottom Boundaries */
@@ -1415,6 +1430,9 @@
     else if (attribute == xvBrightness) {
         res = SetAttr(pScrn, XV_BRIGHTNESS, value);
     }
+    else if (attribute == xvCapBrightness) {
+        res = SetAttr(pScrn, XV_CAPTURE_BRIGHTNESS, value);
+    }
     else if (attribute == xvContrast) {
         res = SetAttr(pScrn, XV_CONTRAST, value);
     }
@@ -1444,11 +1462,12 @@
     SMI_PortPtr pPort = (SMI_PortPtr) data;
 
        ENTER_PROC("SMI_GetPortAttribute");
-
     if (attribute == xvEncoding)
         *value = pPort->Attribute[XV_ENCODING];
-       else if (attribute == xvBrightness)
+    else if (attribute == xvBrightness)
         *value = pPort->Attribute[XV_BRIGHTNESS];
+    else if (attribute == xvCapBrightness)
+        *value = pPort->Attribute[XV_CAPTURE_BRIGHTNESS];
     else if (attribute == xvContrast)
         *value = pPort->Attribute[XV_CONTRAST];
     else if (attribute == xvSaturation)
@@ -1756,7 +1775,7 @@
 **                                             S U P P O R T   F U N C T I O N 
S                                         **
 **                                                                             
                                                                          **
 
\******************************************************************************/
-
+#if 0
 static void
 SMI_WaitForSync(
        ScrnInfoPtr     pScrn
@@ -1770,6 +1789,7 @@
 
        VerticalRetraceWait();
 }
+#endif
 
 static Bool
 RegionsEqual(
@@ -2007,9 +2027,9 @@
        {
                vstretch = 0;
        }
-
+#if 0
        SMI_WaitForSync(pScrn);
-
+#endif
        WRITE_VPR(pSmi, 0x00, vpr00 | (1 << 3) | (1 << 20));
        WRITE_VPR(pSmi, 0x14, (dstBox->x1) | (dstBox->y1 << 16));
        WRITE_VPR(pSmi, 0x18, (dstBox->x2) | (dstBox->y2 << 16));
@@ -2083,7 +2103,6 @@
        }
 
        dev = xf86CreateI2CDevRec();
-       ErrorF("zz %x\n",dev);
        if (dev == NULL)
        {
                LEAVE_PROC("SMI_SendI2C");
@@ -2130,6 +2149,7 @@
        XF86OffscreenImagePtr offscreenImages;
        ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
        SMIPtr pSmi = SMIPTR(pScrn);
+       SMI_PortPtr pPort = (SMI_PortPtr) 
pSmi->ptrAdaptor->pPortPrivates[0].ptr;
 
        ENTER_PROC("SMI_InitOffscreenImages");
 
@@ -2151,9 +2171,14 @@
        offscreenImages->setAttribute = SMI_SetSurfaceAttribute;
        offscreenImages->max_width = pSmi->lcdWidth;
        offscreenImages->max_height = pSmi->lcdHeight;
-       offscreenImages->num_attributes = nElems(SMI_VideoAttributes);
-       offscreenImages->attributes = SMI_VideoAttributes;
-
+       if (!pPort->I2CDev.SlaveAddr) {
+           offscreenImages->num_attributes = nElems(SMI_VideoAttributes);
+           offscreenImages->attributes = SMI_VideoAttributes; 
+       } else {
+           offscreenImages->num_attributes = 
+               nElems(SMI_VideoAttributesSAA711x);
+           offscreenImages->attributes = SMI_VideoAttributesSAA711x; 
+       }
        xf86XVRegisterOffscreenImages(pScreen, offscreenImages, 1);
 
        LEAVE_PROC("SMI_InitOffscreenImages");
Index: xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.h
===================================================================
RCS file: 
/home/branden/packages/xfree86/cvsup/xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -u -r1.3 -r1.4
--- xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.h    20 Dec 
2001 21:35:39 -0000      1.3
+++ xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.h    16 Sep 
2002 18:06:01 -0000      1.4
@@ -26,7 +26,7 @@
 sale, use or other dealings in this Software without prior written
 authorization from the XFree86 Project and silicon Motion.
 */
-/* $XFree86: 
xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.h,v 1.3 
2001/12/20 21:35:39 eich Exp $ */
+/* $XFree86: 
xc/programs/Xserver/hw/xfree86/drivers/siliconmotion/smi_video.h,v 1.4 
2002/09/16 18:06:01 eich Exp $ */
 
 #ifndef _SMI_VIDEO_H
 #define _SMI_VIDEO_H
@@ -56,15 +56,16 @@
  * Attributes
  */
 
-#define N_ATTRS                 7
+#define N_ATTRS                 8
 
 #define XV_ENCODING             0
 #define XV_BRIGHTNESS           1
-#define XV_CONTRAST             2
-#define XV_SATURATION           3
-#define XV_HUE                  4
-#define XV_COLORKEY             5
-#define XV_INTERLACED           6
+#define XV_CAPTURE_BRIGHTNESS  2
+#define XV_CONTRAST             3
+#define XV_SATURATION           4
+#define XV_HUE                  5
+#define XV_COLORKEY             6
+#define XV_INTERLACED           7
 
 typedef struct
 {

Attachment: pgpgfnuEHa2wp.pgp
Description: PGP signature

Reply via email to