via_driver.h revision d89f4815
17e6fb56fSmrg/*
27e6fb56fSmrg * Copyright 2004-2005 The Unichrome Project  [unichrome.sf.net]
37e6fb56fSmrg * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
47e6fb56fSmrg * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
57e6fb56fSmrg *
67e6fb56fSmrg * Permission is hereby granted, free of charge, to any person obtaining a
77e6fb56fSmrg * copy of this software and associated documentation files (the "Software"),
87e6fb56fSmrg * to deal in the Software without restriction, including without limitation
97e6fb56fSmrg * the rights to use, copy, modify, merge, publish, distribute, sub license,
107e6fb56fSmrg * and/or sell copies of the Software, and to permit persons to whom the
117e6fb56fSmrg * Software is furnished to do so, subject to the following conditions:
127e6fb56fSmrg *
137e6fb56fSmrg * The above copyright notice and this permission notice (including the
147e6fb56fSmrg * next paragraph) shall be included in all copies or substantial portions
157e6fb56fSmrg * of the Software.
167e6fb56fSmrg *
177e6fb56fSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
187e6fb56fSmrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
197e6fb56fSmrg * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
207e6fb56fSmrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
217e6fb56fSmrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
227e6fb56fSmrg * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
237e6fb56fSmrg * DEALINGS IN THE SOFTWARE.
247e6fb56fSmrg */
257e6fb56fSmrg
267e6fb56fSmrg#ifndef _VIA_DRIVER_H_
277e6fb56fSmrg#define _VIA_DRIVER_H_ 1
287e6fb56fSmrg
297e6fb56fSmrg#define HAVE_DEBUG 1
307e6fb56fSmrg
317e6fb56fSmrg#ifdef HAVE_DEBUG
327e6fb56fSmrg#define DEBUG(x) x
337e6fb56fSmrg#else
347e6fb56fSmrg#define DEBUG(x)
357e6fb56fSmrg#endif
367e6fb56fSmrg
377e6fb56fSmrg#include "vgaHW.h"
387e6fb56fSmrg#include "xf86.h"
397e6fb56fSmrg
407e6fb56fSmrg#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 6
417e6fb56fSmrg#include "xf86Resources.h"
427e6fb56fSmrg#endif
437e6fb56fSmrg
447e6fb56fSmrg#include "xf86Pci.h"
457e6fb56fSmrg#include "xf86PciInfo.h"
467e6fb56fSmrg#include "xf86_OSproc.h"
477e6fb56fSmrg#include "compiler.h"
487e6fb56fSmrg#include "xf86Cursor.h"
497e6fb56fSmrg#include "mipointer.h"
507e6fb56fSmrg#include "micmap.h"
517e6fb56fSmrg#include "fourcc.h"
527e6fb56fSmrg
537e6fb56fSmrg#define USE_FB
547e6fb56fSmrg#ifdef USE_FB
557e6fb56fSmrg#include "fb.h"
567e6fb56fSmrg#else
577e6fb56fSmrg#include "cfb.h"
587e6fb56fSmrg#include "cfb16.h"
597e6fb56fSmrg#include "cfb32.h"
607e6fb56fSmrg#endif
617e6fb56fSmrg
627e6fb56fSmrg#include "xf86cmap.h"
637e6fb56fSmrg#include "vbe.h"
647e6fb56fSmrg#include "xaa.h"
657e6fb56fSmrg
667e6fb56fSmrg#include "via_regs.h"
677e6fb56fSmrg#include "via_bios.h"
687e6fb56fSmrg#include "via_priv.h"
697e6fb56fSmrg#include "via_swov.h"
707e6fb56fSmrg#include "via_dmabuffer.h"
717e6fb56fSmrg#include "via_3d.h"
727e6fb56fSmrg#include "via_video.h"
737e6fb56fSmrg
747e6fb56fSmrg#ifdef XSERVER_LIBPCIACCESS
757e6fb56fSmrg#include <pciaccess.h>
767e6fb56fSmrg#endif
777e6fb56fSmrg
787e6fb56fSmrg#ifdef XF86DRI
797e6fb56fSmrg#define _XF86DRI_SERVER_
807e6fb56fSmrg#include "sarea.h"
817e6fb56fSmrg#include "dri.h"
827e6fb56fSmrg#include "GL/glxint.h"
837e6fb56fSmrg#include "via_dri.h"
847e6fb56fSmrg#endif
857e6fb56fSmrg
867e6fb56fSmrg#include "exa.h"
877e6fb56fSmrg#define VIA_AGP_UPL_SIZE    (1024*128)
887e6fb56fSmrg#define VIA_DMA_DL_SIZE     (1024*128)
897e6fb56fSmrg#define VIA_SCRATCH_SIZE    (4*1024*1024)
907e6fb56fSmrg
917e6fb56fSmrg/*
927e6fb56fSmrg * Pixmap sizes below which we don't try to do hw accel.
937e6fb56fSmrg */
947e6fb56fSmrg
957e6fb56fSmrg#define VIA_MIN_COMPOSITE   400
967e6fb56fSmrg#define VIA_MIN_UPLOAD 4000
977e6fb56fSmrg#define VIA_MIN_TEX_UPLOAD 200
987e6fb56fSmrg#define VIA_MIN_DOWNLOAD 200
997e6fb56fSmrg
1007e6fb56fSmrg#define AGP_PAGE_SIZE 4096
1017e6fb56fSmrg#define AGP_PAGES 8192
1027e6fb56fSmrg#define AGP_SIZE (AGP_PAGE_SIZE * AGP_PAGES)
1037e6fb56fSmrg
1047e6fb56fSmrg#define DRIVER_NAME     "openchrome"
1057e6fb56fSmrg#define VERSION_MAJOR   0
1067e6fb56fSmrg#define VERSION_MINOR   2
1077e6fb56fSmrg#define PATCHLEVEL      904
1087e6fb56fSmrg#define VIA_VERSION     ((VERSION_MAJOR<<24) | (VERSION_MINOR<<16) | PATCHLEVEL)
1097e6fb56fSmrg
1107e6fb56fSmrg#define VIA_VQ_SIZE             (256 * 1024)
1117e6fb56fSmrg
1127e6fb56fSmrg#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 6
1137e6fb56fSmrg#define VIA_RES_SHARED RES_SHARED_VGA
1147e6fb56fSmrg#define VIA_RES_UNDEF RES_UNDEFINED
1157e6fb56fSmrg#else
1167e6fb56fSmrg#define VIA_RES_SHARED NULL
1177e6fb56fSmrg#define VIA_RES_UNDEF NULL
1187e6fb56fSmrg#endif
1197e6fb56fSmrg
1207e6fb56fSmrgtypedef struct {
1217e6fb56fSmrg    CARD8   SR08, SR0A, SR0F;
1227e6fb56fSmrg
1237e6fb56fSmrg    /*   extended Sequencer registers */
1247e6fb56fSmrg    CARD8   SR10, SR11, SR12, SR13,SR14,SR15,SR16;
1257e6fb56fSmrg    CARD8   SR17, SR18, SR19, SR1A,SR1B,SR1C,SR1D,SR1E;
1267e6fb56fSmrg    CARD8   SR1F, SR20, SR21, SR22,SR23,SR24,SR25,SR26;
1277e6fb56fSmrg    CARD8   SR27, SR28, SR29, SR2A,SR2B,SR2C,SR2D,SR2E;
1287e6fb56fSmrg    CARD8   SR2F, SR30, SR31, SR32,SR33,SR34,SR40,SR41;
1297e6fb56fSmrg    CARD8   SR42, SR43, SR44, SR45,SR46,SR47,SR48,SR49;
1307e6fb56fSmrg    CARD8   SR4A, SR4B, SR4C;
1317e6fb56fSmrg
1327e6fb56fSmrg    /*   extended CRTC registers */
1337e6fb56fSmrg    CARD8   CR13, CR30, CR31, CR32, CR33, CR34, CR35, CR36;
1347e6fb56fSmrg    CARD8   CR37, CR38, CR39, CR3A, CR40, CR41, CR42, CR43;
1357e6fb56fSmrg    CARD8   CR44, CR45, CR46, CR47, CR48, CR49, CR4A;
1367e6fb56fSmrg    CARD8   CR97, CR99, CR9B, CR9F, CRA0, CRA1, CRA2;
1377e6fb56fSmrg    CARD8   CRTCRegs[68];
1387e6fb56fSmrg/*    CARD8   LCDRegs[0x40];*/
1397e6fb56fSmrg
1407e6fb56fSmrg    /* TMDS/LVDS Control */
1417e6fb56fSmrg    CARD8   CRD2;
1427e6fb56fSmrg} VIARegRec, *VIARegPtr;
1437e6fb56fSmrg
1447e6fb56fSmrg/*
1457e6fb56fSmrg * varables that need to be shared among different screens.
1467e6fb56fSmrg */
1477e6fb56fSmrgtypedef struct {
1487e6fb56fSmrg    Bool b3DRegsInitialized;
1497e6fb56fSmrg} ViaSharedRec, *ViaSharedPtr;
1507e6fb56fSmrg
1517e6fb56fSmrg#ifdef XF86DRI
1527e6fb56fSmrg
1537e6fb56fSmrg#define VIA_XVMC_MAX_BUFFERS 2
1547e6fb56fSmrg#define VIA_XVMC_MAX_CONTEXTS 4
1557e6fb56fSmrg#define VIA_XVMC_MAX_SURFACES 20
1567e6fb56fSmrg
1577e6fb56fSmrg
1587e6fb56fSmrgtypedef struct {
1597e6fb56fSmrg    VIAMem memory_ref;
1607e6fb56fSmrg    unsigned long offsets[VIA_XVMC_MAX_BUFFERS];
1617e6fb56fSmrg} ViaXvMCSurfacePriv;
1627e6fb56fSmrg
1637e6fb56fSmrgtypedef struct {
1647e6fb56fSmrg    drm_context_t drmCtx;
1657e6fb56fSmrg} ViaXvMCContextPriv;
1667e6fb56fSmrg
1677e6fb56fSmrgtypedef struct {
1687e6fb56fSmrg    XID contexts[VIA_XVMC_MAX_CONTEXTS];
1697e6fb56fSmrg    XID surfaces[VIA_XVMC_MAX_SURFACES];
1707e6fb56fSmrg    ViaXvMCSurfacePriv *sPrivs[VIA_XVMC_MAX_SURFACES];
1717e6fb56fSmrg    ViaXvMCContextPriv *cPrivs[VIA_XVMC_MAX_CONTEXTS];
1727e6fb56fSmrg    int nContexts,nSurfaces;
1737e6fb56fSmrg    drm_handle_t mmioBase,fbBase,sAreaBase;
1747e6fb56fSmrg    unsigned sAreaSize;
1757e6fb56fSmrg    drmAddress sAreaAddr;
1767e6fb56fSmrg    unsigned activePorts;
1777e6fb56fSmrg}ViaXvMC, *ViaXvMCPtr;
1787e6fb56fSmrg
1797e6fb56fSmrg#endif
1807e6fb56fSmrg
1817e6fb56fSmrgtypedef struct _twodContext {
1827e6fb56fSmrg    CARD32 mode;
1837e6fb56fSmrg    CARD32 cmd;
1847e6fb56fSmrg    CARD32 fgColor;
1857e6fb56fSmrg    CARD32 bgColor;
1867e6fb56fSmrg    CARD32 pattern0;
1877e6fb56fSmrg    CARD32 pattern1;
1887e6fb56fSmrg    CARD32 patternAddr;
1897e6fb56fSmrg    CARD32 keyControl;
1907e6fb56fSmrg    unsigned srcOffset;
1917e6fb56fSmrg    unsigned srcPitch;
1927e6fb56fSmrg    unsigned Bpp;
1937e6fb56fSmrg    unsigned bytesPPShift;
1947e6fb56fSmrg    Bool clipping;
1957e6fb56fSmrg    Bool dashed;
1967e6fb56fSmrg    int clipX1;
1977e6fb56fSmrg    int clipX2;
1987e6fb56fSmrg    int clipY1;
1997e6fb56fSmrg    int clipY2;
2007e6fb56fSmrg} ViaTwodContext;
2017e6fb56fSmrg
2027e6fb56fSmrgtypedef struct{
2037e6fb56fSmrg    /* textMode */
2047e6fb56fSmrg    CARD8 *state, *pstate; /* SVGA state */
2057e6fb56fSmrg    int statePage, stateSize, stateMode;
2067e6fb56fSmrg
2077e6fb56fSmrg    /* vbe version */
2087e6fb56fSmrg    int major, minor;
2097e6fb56fSmrg} ViaVbeModeInfo;
2107e6fb56fSmrg
2117e6fb56fSmrgtypedef struct _VIA {
2127e6fb56fSmrg    VIARegRec           SavedReg;
2137e6fb56fSmrg    xf86CursorInfoPtr   CursorInfoRec;
2147e6fb56fSmrg    int                 Bpp, Bpl;
2157e6fb56fSmrg
2167e6fb56fSmrg    Bool                FirstInit;
2177e6fb56fSmrg    unsigned long       videoRambytes;
2187e6fb56fSmrg    int                 videoRamKbytes;
2197e6fb56fSmrg    int                 FBFreeStart;
2207e6fb56fSmrg    int                 FBFreeEnd;
2217e6fb56fSmrg    int                 driSize;
2227e6fb56fSmrg    int                 maxDriSize;
2237e6fb56fSmrg    int                 VQStart;
2247e6fb56fSmrg    int                 VQEnd;
2257e6fb56fSmrg
2267e6fb56fSmrg    /* These are physical addresses. */
2277e6fb56fSmrg    unsigned long       FrameBufferBase;
2287e6fb56fSmrg    unsigned long       MmioBase;
2297e6fb56fSmrg
2307e6fb56fSmrg    /* These are linear addresses. */
2317e6fb56fSmrg    unsigned char*      MapBase;
2327e6fb56fSmrg    unsigned char*      VidMapBase;
2337e6fb56fSmrg    unsigned char*      MpegMapBase;
2347e6fb56fSmrg    unsigned char*      BltBase;
2357e6fb56fSmrg    unsigned char*      MapBaseDense;
2367e6fb56fSmrg    unsigned char*      FBBase;
2377e6fb56fSmrg    CARD8               MemClk;
2387e6fb56fSmrg
2397e6fb56fSmrg    /* Here are all the Options */
2407e6fb56fSmrg    Bool                VQEnable;
2417e6fb56fSmrg    Bool		hwcursor;
2427e6fb56fSmrg    Bool                NoAccel;
2437e6fb56fSmrg    Bool                shadowFB;
2447e6fb56fSmrg    Rotation            rotate;
2457e6fb56fSmrg    Bool                vbeSR;
2467e6fb56fSmrg    int                 agpMem;
2477e6fb56fSmrg
2487e6fb56fSmrg    CloseScreenProcPtr  CloseScreen;
2497e6fb56fSmrg#ifdef XSERVER_LIBPCIACCESS
2507e6fb56fSmrg    struct pci_device *PciInfo;
2517e6fb56fSmrg    int mmio_bar;
2527e6fb56fSmrg    int fb_bar;
2537e6fb56fSmrg    PCITAG PciTag;
2547e6fb56fSmrg#else
2557e6fb56fSmrg    pciVideoPtr PciInfo;
2567e6fb56fSmrg    PCITAG PciTag;
2577e6fb56fSmrg#endif
2587e6fb56fSmrg    int                 Chipset;
2597e6fb56fSmrg    int                 ChipId;
2607e6fb56fSmrg    int                 ChipRev;
2617e6fb56fSmrg    int                 EntityIndex;
2627e6fb56fSmrg
2637e6fb56fSmrg    /* vbe */
2647e6fb56fSmrg    vbeInfoPtr          pVbe;
2657e6fb56fSmrg    ViaVbeModeInfo      vbeMode;
2667e6fb56fSmrg    Bool                useVBEModes;
2677e6fb56fSmrg    Bool                useLegacyVBE;
2687e6fb56fSmrg
2697e6fb56fSmrg    /* Support for shadowFB and rotation */
2707e6fb56fSmrg    unsigned char*      ShadowPtr;
2717e6fb56fSmrg    int                 ShadowPitch;
2727e6fb56fSmrg    void                (*PointerMoved)(int index, int x, int y);
2737e6fb56fSmrg
2747e6fb56fSmrg    /* Support for XAA acceleration */
2757e6fb56fSmrg    XAAInfoRecPtr       AccelInfoRec;
2767e6fb56fSmrg    ViaTwodContext      td;
2777e6fb56fSmrg    Via3DState          v3d;
2787e6fb56fSmrg    Via3DState          *lastToUpload;
2797e6fb56fSmrg    ViaCommandBuffer    cb;
2807e6fb56fSmrg    int                 accelMarker;
2817e6fb56fSmrg    CARD32              markerOffset;
2827e6fb56fSmrg    CARD32             *markerBuf;
2837e6fb56fSmrg    CARD32              curMarker;
2847e6fb56fSmrg    CARD32              lastMarkerRead;
2857e6fb56fSmrg    Bool                agpDMA;
2867e6fb56fSmrg    Bool                nPOT[VIA_NUM_TEXUNITS];
2877e6fb56fSmrg    const unsigned     *TwodRegs;
2887e6fb56fSmrg    ExaDriverPtr        exaDriverPtr;
2897e6fb56fSmrg    ExaOffscreenArea   *exa_scratch;
2907e6fb56fSmrg    unsigned int        exa_scratch_next;
2917e6fb56fSmrg    Bool                useEXA;
2927e6fb56fSmrg    void               *maskP;
2937e6fb56fSmrg    CARD32              maskFormat;
2947e6fb56fSmrg    Bool                componentAlpha;
2957e6fb56fSmrg    void               *srcP;
2967e6fb56fSmrg    CARD32              srcFormat;
2977e6fb56fSmrg    ExaOffscreenArea   *scratchFBBuffer;
2987e6fb56fSmrg    unsigned            scratchOffset;
2997e6fb56fSmrg    int                 exaScratchSize;
3007e6fb56fSmrg    char *              scratchAddr;
3017e6fb56fSmrg    Bool                noComposite;
3027e6fb56fSmrg#ifdef XF86DRI
3037e6fb56fSmrg    drm_via_mem_t       scratchAGPBuffer;
3047e6fb56fSmrg    drm_via_mem_t       texAGPBuffer;
3057e6fb56fSmrg    unsigned            texOffset;
3067e6fb56fSmrg    char *              texAddr;
3077e6fb56fSmrg    char *              dBounce;
3087e6fb56fSmrg#endif
3097e6fb56fSmrg
3107e6fb56fSmrg    /* Rotation */
3117e6fb56fSmrg    Bool    RandRRotation;
3127e6fb56fSmrg
3137e6fb56fSmrg    /* BIOS Info Ptr */
3147e6fb56fSmrg    VIABIOSInfoPtr      pBIOSInfo;
3157e6fb56fSmrg    struct ViaCardIdStruct* Id;
3167e6fb56fSmrg
3177e6fb56fSmrg    /* Support for DGA */
3187e6fb56fSmrg    int                 numDGAModes;
3197e6fb56fSmrg    DGAModePtr          DGAModes;
3207e6fb56fSmrg    Bool                DGAactive;
3217e6fb56fSmrg    int                 DGAViewportStatus;
3227e6fb56fSmrg    int			DGAOldDisplayWidth;
3237e6fb56fSmrg    int			DGAOldBitsPerPixel;
3247e6fb56fSmrg    int			DGAOldDepth;
3257e6fb56fSmrg
3267e6fb56fSmrg    /* I2C & DDC */
3277e6fb56fSmrg    I2CBusPtr           pI2CBus1;
3287e6fb56fSmrg    I2CBusPtr           pI2CBus2;
3297e6fb56fSmrg    I2CBusPtr           pI2CBus3;
3307e6fb56fSmrg    xf86MonPtr          DDC1;
3317e6fb56fSmrg    xf86MonPtr          DDC2;
3327e6fb56fSmrg
3337e6fb56fSmrg    /* MHS */
3347e6fb56fSmrg    Bool                IsSecondary;
3357e6fb56fSmrg    Bool                HasSecondary;
3367e6fb56fSmrg    Bool                SAMM;
3377e6fb56fSmrg
3387e6fb56fSmrg#ifdef XF86DRI
3397e6fb56fSmrg    Bool		directRenderingEnabled;
3407e6fb56fSmrg    Bool                XvMCEnabled;
3417e6fb56fSmrg    DRIInfoPtr		pDRIInfo;
3427e6fb56fSmrg    int 		drmFD;
3437e6fb56fSmrg    int 		numVisualConfigs;
3447e6fb56fSmrg    __GLXvisualConfig* 	pVisualConfigs;
3457e6fb56fSmrg    VIAConfigPrivPtr 	pVisualConfigsPriv;
3467e6fb56fSmrg    drm_handle_t 	agpHandle;
3477e6fb56fSmrg    drm_handle_t 	registerHandle;
3487e6fb56fSmrg    drm_handle_t        frameBufferHandle;
3497e6fb56fSmrg    unsigned long 	agpAddr;
3507e6fb56fSmrg    drmAddress          agpMappedAddr;
3517e6fb56fSmrg    unsigned char 	*agpBase;
3527e6fb56fSmrg    unsigned int 	agpSize;
3537e6fb56fSmrg    Bool 		IsPCI;
3547e6fb56fSmrg    ViaXvMC             xvmc;
3557e6fb56fSmrg    int                 drmVerMajor;
3567e6fb56fSmrg    int                 drmVerMinor;
3577e6fb56fSmrg    int                 drmVerPL;
3587e6fb56fSmrg    VIAMem              driOffScreenMem;
3597e6fb56fSmrg    void *              driOffScreenSave;
3607e6fb56fSmrg#endif
3617e6fb56fSmrg    Bool		DRIIrqEnable;
3627e6fb56fSmrg    Bool                agpEnable;
3637e6fb56fSmrg    Bool                dma2d;
3647e6fb56fSmrg    Bool                dmaXV;
3657e6fb56fSmrg
3667e6fb56fSmrg    CARD8               ActiveDevice;	/* Option */
3677e6fb56fSmrg
3687e6fb56fSmrg    unsigned char       *CursorImage;
3697e6fb56fSmrg    CARD32              CursorFG;
3707e6fb56fSmrg    CARD32              CursorBG;
3717e6fb56fSmrg    Bool                CursorARGB;
3727e6fb56fSmrg    Bool                CursorARGBSupported;
3737e6fb56fSmrg    CARD8               CursorPipe;
3747e6fb56fSmrg    int                 CursorStart;
3757e6fb56fSmrg	int					CursorMaxWidth;
3767e6fb56fSmrg	int					CursorMaxHeight;
3777e6fb56fSmrg	int					CursorSize;
3787e6fb56fSmrg
3797e6fb56fSmrg    CARD32              CursorRegControl;
3807e6fb56fSmrg    CARD32              CursorRegBase;
3817e6fb56fSmrg    CARD32              CursorRegPos;
3827e6fb56fSmrg    CARD32              CursorRegOffset;
3837e6fb56fSmrg    CARD32              CursorRegFifo;
3847e6fb56fSmrg    CARD32              CursorRegTransKey;
3857e6fb56fSmrg
3867e6fb56fSmrg    CARD32              CursorControl0;
3877e6fb56fSmrg    CARD32              CursorControl1;
3887e6fb56fSmrg    CARD32              CursorFifo;
3897e6fb56fSmrg    CARD32              CursorTransparentKey;
3907e6fb56fSmrg    CARD32              CursorPrimHiInvtColor;
3917e6fb56fSmrg    CARD32              CursorV327HiInvtColor;
3927e6fb56fSmrg
3937e6fb56fSmrg    /* Video */
3947e6fb56fSmrg    int                 VideoEngine;
3957e6fb56fSmrg    swovRec		swov;
3967e6fb56fSmrg    CARD32              VideoStatus;
3977e6fb56fSmrg    VIAHWDiff		HWDiff;
3987e6fb56fSmrg    unsigned long	dwV1, dwV3;
3997e6fb56fSmrg    unsigned long	OverlaySupported;
4007e6fb56fSmrg    unsigned long	dwFrameNum;
4017e6fb56fSmrg
4027e6fb56fSmrg    CARD32*		VidRegBuffer; /* Temporary buffer for video overlay registers. */
4037e6fb56fSmrg    unsigned long	VidRegCursor; /* Write cursor for VidRegBuffer. */
4047e6fb56fSmrg
4057e6fb56fSmrg    unsigned long	old_dwUseExtendedFIFO;
4067e6fb56fSmrg
4077e6fb56fSmrg    ViaSharedPtr	sharedData;
4087e6fb56fSmrg    Bool                useDmaBlit;
4097e6fb56fSmrg
4107e6fb56fSmrg    void                *displayMap;
4117e6fb56fSmrg    CARD32              displayOffset;
4127e6fb56fSmrg    void                *cursorMap;
4137e6fb56fSmrg    CARD32              cursorOffset;
4147e6fb56fSmrg
4157e6fb56fSmrg#ifdef HAVE_DEBUG
4167e6fb56fSmrg    Bool                disableXvBWCheck;
4177e6fb56fSmrg    Bool                DumpVGAROM;
4187e6fb56fSmrg    Bool                PrintVGARegs;
4197e6fb56fSmrg    Bool                PrintTVRegs;
4207e6fb56fSmrg    Bool                I2CScan;
4217e6fb56fSmrg
4227e6fb56fSmrg    Bool                UseLegacyModeSwitch ;
4237e6fb56fSmrg    video_via_regs*     VideoRegs ;
4247e6fb56fSmrg#endif /* HAVE_DEBUG */
4257e6fb56fSmrg} VIARec, *VIAPtr;
4267e6fb56fSmrg
4277e6fb56fSmrg#define VIAPTR(p) ((VIAPtr)((p)->driverPrivate))
4287e6fb56fSmrg
4297e6fb56fSmrgtypedef struct
4307e6fb56fSmrg{
4317e6fb56fSmrg    Bool IsDRIEnabled;
4327e6fb56fSmrg
4337e6fb56fSmrg    Bool HasSecondary;
4347e6fb56fSmrg    Bool BypassSecondary;
4357e6fb56fSmrg    /*These two registers are used to make sure the CRTC2 is
4367e6fb56fSmrg      retored before CRTC_EXT, otherwise it could lead to blank screen.*/
4377e6fb56fSmrg    Bool IsSecondaryRestored;
4387e6fb56fSmrg    Bool RestorePrimary;
4397e6fb56fSmrg
4407e6fb56fSmrg    ScrnInfoPtr pSecondaryScrn;
4417e6fb56fSmrg    ScrnInfoPtr pPrimaryScrn;
4427e6fb56fSmrg} VIAEntRec, *VIAEntPtr;
4437e6fb56fSmrg
4447e6fb56fSmrg/* Prototypes. */
4457e6fb56fSmrgvoid VIAInitialize3DEngine(ScrnInfoPtr pScrn);
4467e6fb56fSmrg
4477e6fb56fSmrg/* In via_cursor.c. */
4487e6fb56fSmrgBool viaCursorHWInit(ScreenPtr pScreen);
4497e6fb56fSmrgvoid viaCursorShow(ScrnInfoPtr);
4507e6fb56fSmrgvoid viaCursorHide(ScrnInfoPtr);
4517e6fb56fSmrgvoid viaCursorStore(ScrnInfoPtr pScrn);
4527e6fb56fSmrgvoid viaCursorRestore(ScrnInfoPtr pScrn);
4537e6fb56fSmrgBool viaCursorRecInit(ScrnInfoPtr pScrn);
4547e6fb56fSmrgvoid viaCursorRecDestroy(ScrnInfoPtr pScrn);
4557e6fb56fSmrgvoid viaCursorSetFB(ScrnInfoPtr pScrn);
4567e6fb56fSmrg
4577e6fb56fSmrg/* In via_accel.c. */
4587e6fb56fSmrgBool viaInitAccel(ScreenPtr);
4597e6fb56fSmrgvoid viaInitialize2DEngine(ScrnInfoPtr);
4607e6fb56fSmrgvoid viaAccelSync(ScrnInfoPtr);
4617e6fb56fSmrgvoid viaDisableVQ(ScrnInfoPtr);
4627e6fb56fSmrgvoid viaExitAccel(ScreenPtr);
4637e6fb56fSmrgvoid viaAccelBlitRect(ScrnInfoPtr, int, int, int, int, int, int);
4647e6fb56fSmrgvoid viaAccelFillRect(ScrnInfoPtr, int, int, int, int, unsigned long);
4657e6fb56fSmrgvoid viaAccelSyncMarker(ScrnInfoPtr);
4667e6fb56fSmrgvoid viaFinishInitAccel(ScreenPtr);
4677e6fb56fSmrgvoid viaAccelWaitMarker(ScreenPtr, int);
4687e6fb56fSmrgint viaAccelMarkSync(ScreenPtr);
4697e6fb56fSmrgvoid viaAccelFillPixmap(ScrnInfoPtr, unsigned long, unsigned long,
4707e6fb56fSmrg			int, int, int, int, int, unsigned long);
4717e6fb56fSmrgvoid viaAccelTextureBlit(ScrnInfoPtr, unsigned long, unsigned, unsigned,
4727e6fb56fSmrg			 unsigned, unsigned, unsigned, unsigned,
4737e6fb56fSmrg			 unsigned long, unsigned, unsigned,
4747e6fb56fSmrg			 unsigned, unsigned, int);
4757e6fb56fSmrg
4767e6fb56fSmrg
4777e6fb56fSmrg
4787e6fb56fSmrg/* In via_shadow.c */
4797e6fb56fSmrgvoid ViaShadowFBInit(ScrnInfoPtr pScrn, ScreenPtr pScreen);
4807e6fb56fSmrg
4817e6fb56fSmrg/* In via_dga.c */
4827e6fb56fSmrgBool VIADGAInit(ScreenPtr);
4837e6fb56fSmrg
4847e6fb56fSmrg/*In via_video.c*/
4857e6fb56fSmrgvoid viaInitVideo(ScreenPtr pScreen);
4867e6fb56fSmrgvoid viaExitVideo(ScrnInfoPtr pScrn);
4877e6fb56fSmrgvoid viaSaveVideo(ScrnInfoPtr pScrn);
4887e6fb56fSmrgvoid viaRestoreVideo(ScrnInfoPtr pScrn);
4897e6fb56fSmrgvoid viaSetColorSpace(VIAPtr pVia, int hue, int saturation, int brightness, int contrast,
4907e6fb56fSmrg		      Bool reset);
4917e6fb56fSmrgvoid VIAVidAdjustFrame(ScrnInfoPtr pScrn, int x, int y);
4927e6fb56fSmrg
4937e6fb56fSmrg/* In via_memory.c */
4947e6fb56fSmrgvoid VIAFreeLinear(VIAMemPtr);
4957e6fb56fSmrgint VIAAllocLinear(VIAMemPtr, ScrnInfoPtr, unsigned long);
4967e6fb56fSmrgint viaOffscreenLinear(VIAMemPtr, ScrnInfoPtr, unsigned long);
4977e6fb56fSmrgvoid VIAInitLinear(ScreenPtr pScreen);
4987e6fb56fSmrg
4997e6fb56fSmrg/* In via_xwmc.c */
5007e6fb56fSmrg
5017e6fb56fSmrg#ifdef XF86DRI
5027e6fb56fSmrg/* Basic init and exit functions */
5037e6fb56fSmrgvoid ViaInitXVMC(ScreenPtr pScreen);
5047e6fb56fSmrgvoid ViaCleanupXVMC(ScrnInfoPtr pScrn, XF86VideoAdaptorPtr *XvAdaptors, int XvAdaptorCount);
5057e6fb56fSmrgint viaXvMCInitXv(ScrnInfoPtr pScrn, XF86VideoAdaptorPtr XvAdapt);
5067e6fb56fSmrg
5077e6fb56fSmrg/* Returns the size of the fake Xv Image used as XvMC command buffer to the X server*/
5087e6fb56fSmrgunsigned long viaXvMCPutImageSize(ScrnInfoPtr pScrn);
5097e6fb56fSmrg
5107e6fb56fSmrg
5117e6fb56fSmrg
5127e6fb56fSmrg#endif
5137e6fb56fSmrg
5147e6fb56fSmrg/* via_i2c.c */
5157e6fb56fSmrgvoid ViaI2CInit(ScrnInfoPtr pScrn);
5167e6fb56fSmrg
5177e6fb56fSmrg#ifdef XF86DRI
5187e6fb56fSmrgBool VIADRIScreenInit(ScreenPtr pScreen);
5197e6fb56fSmrgvoid VIADRICloseScreen(ScreenPtr pScreen);
5207e6fb56fSmrgBool VIADRIFinishScreenInit(ScreenPtr pScreen);
5217e6fb56fSmrgvoid VIADRIRingBufferCleanup(ScrnInfoPtr pScrn);
5227e6fb56fSmrgBool VIADRIRingBufferInit(ScrnInfoPtr pScrn);
5237e6fb56fSmrgvoid viaDRIOffscreenRestore(ScrnInfoPtr pScrn);
5247e6fb56fSmrgvoid viaDRIOffscreenSave(ScrnInfoPtr pScrn);
5257e6fb56fSmrg
5267e6fb56fSmrg#endif /* XF86DRI */
5277e6fb56fSmrg
528d89f4815Schristosint viaOffScreenLinear(VIAMemPtr mem, ScrnInfoPtr pScrn, unsigned long size);
529d89f4815Schristosvoid viaShowCursor(ScrnInfoPtr pScrn);
530d89f4815Schristosvoid viaHideCursor(ScrnInfoPtr pScrn);
531d89f4815SchristosBool viaHWCursorInit(ScreenPtr pScreen);
532d89f4815Schristosvoid ViaDisplaySetStreamOnCRT(ScrnInfoPtr pScrn, Bool primary);
533d89f4815Schristosvoid ViaDisplaySetStreamOnDFP(ScrnInfoPtr pScrn, Bool primary);
534d89f4815Schristosvoid ViaDisplaySetStreamOnDVO(ScrnInfoPtr pScrn, int port, Bool primary);
535d89f4815Schristosvoid ViaDisplayEnableSimultaneous(ScrnInfoPtr pScrn);
536d89f4815Schristosvoid ViaDisplayEnableCRT(ScrnInfoPtr pScrn);
537d89f4815Schristosvoid ViaDisplayEnableDVO(ScrnInfoPtr pScrn, int port);
538d89f4815Schristos
5397e6fb56fSmrg#endif /* _VIA_DRIVER_H_ */
540