via_driver.h revision 03bd066f
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
298aedb4f6Smrg//#define VIA_DEBUG_COMPOSITE 1
307e6fb56fSmrg#define HAVE_DEBUG 1
317e6fb56fSmrg
327e6fb56fSmrg#ifdef HAVE_DEBUG
337e6fb56fSmrg#define DEBUG(x) x
347e6fb56fSmrg#else
357e6fb56fSmrg#define DEBUG(x)
367e6fb56fSmrg#endif
377e6fb56fSmrg
387e6fb56fSmrg#include "vgaHW.h"
397e6fb56fSmrg#include "xf86.h"
407e6fb56fSmrg
418aedb4f6Smrg#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 6
427e6fb56fSmrg#include "xf86Resources.h"
437e6fb56fSmrg#endif
447e6fb56fSmrg
457e6fb56fSmrg#include "xf86Pci.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#include "fb.h"
537e6fb56fSmrg
548aedb4f6Smrg#include "xf86Crtc.h"
5503bd066fSmrg#include "xf86fbman.h"
568aedb4f6Smrg#include "xf86RandR12.h"
577e6fb56fSmrg#include "xf86cmap.h"
587e6fb56fSmrg
598aedb4f6Smrg#ifdef HAVE_DRI
607e6fb56fSmrg#define _XF86DRI_SERVER_
618aedb4f6Smrg#include "xf86dri.h"
627e6fb56fSmrg#include "sarea.h"
637e6fb56fSmrg#include "dri.h"
648aedb4f6Smrg#include "drm_fourcc.h"
657e6fb56fSmrg#include "GL/glxint.h"
667e6fb56fSmrg#include "via_dri.h"
678aedb4f6Smrg#include "via_drmclient.h"
688aedb4f6Smrg#include "via_drm.h"
697e6fb56fSmrg#endif
707e6fb56fSmrg#include "exa.h"
718aedb4f6Smrg#include "via_memmgr.h"
728aedb4f6Smrg
738aedb4f6Smrg#include "via_regs.h"
748aedb4f6Smrg#include "via_kms.h"
758aedb4f6Smrg#include "via_ums.h"
768aedb4f6Smrg#include "via_dmabuffer.h"
778aedb4f6Smrg#include "via_3d.h"
788aedb4f6Smrg#include "via_xv.h"
798aedb4f6Smrg#include "via_xv_overlay.h"
808aedb4f6Smrg#include "via_eng_regs.h"
818aedb4f6Smrg
828aedb4f6Smrg#ifdef HAVE_PCIACCESS
838aedb4f6Smrg#include <pciaccess.h>
848aedb4f6Smrg#else
858aedb4f6Smrg#include "xf86PciInfo.h"
868aedb4f6Smrg#endif
878aedb4f6Smrg#include <errno.h>
888aedb4f6Smrg
8944802259Smrg#include "via_vt1632.h"
9044802259Smrg
918aedb4f6Smrg#include "compat-api.h"
927e6fb56fSmrg#define VIA_AGP_UPL_SIZE    (1024*128)
937e6fb56fSmrg#define VIA_DMA_DL_SIZE     (1024*128)
947e6fb56fSmrg#define VIA_SCRATCH_SIZE    (4*1024*1024)
957e6fb56fSmrg
967e6fb56fSmrg/*
977e6fb56fSmrg * Pixmap sizes below which we don't try to do hw accel.
987e6fb56fSmrg */
997e6fb56fSmrg
1007e6fb56fSmrg#define VIA_MIN_COMPOSITE   400
1017e6fb56fSmrg#define VIA_MIN_UPLOAD 4000
1027e6fb56fSmrg#define VIA_MIN_TEX_UPLOAD 200
1037e6fb56fSmrg#define VIA_MIN_DOWNLOAD 200
1047e6fb56fSmrg
1057e6fb56fSmrg#define AGP_PAGE_SIZE 4096
1067e6fb56fSmrg#define AGP_PAGES 8192
1077e6fb56fSmrg#define AGP_SIZE (AGP_PAGE_SIZE * AGP_PAGES)
1087e6fb56fSmrg
1097e6fb56fSmrg#define DRIVER_NAME     "openchrome"
1108aedb4f6Smrg#define VIA_VERSION     ((VIA_MAJOR_VERSION << 24) | (VIA_MINOR_VERSION << 16) | VIA_PATCHLEVEL)
1117e6fb56fSmrg
1128aedb4f6Smrg#define VIA_VQ_SIZE     (256 * 1024)
1137e6fb56fSmrg
1148aedb4f6Smrg#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 6
1157e6fb56fSmrg#define VIA_RES_SHARED RES_SHARED_VGA
1167e6fb56fSmrg#define VIA_RES_UNDEF RES_UNDEFINED
1177e6fb56fSmrg#else
1187e6fb56fSmrg#define VIA_RES_SHARED NULL
1197e6fb56fSmrg#define VIA_RES_UNDEF NULL
1207e6fb56fSmrg#endif
1217e6fb56fSmrg
1228aedb4f6Smrg/* Video Engines */
1238aedb4f6Smrg#define VIDEO_ENGINE_UNK    0   /* Unknown video engine */
1248aedb4f6Smrg#define VIDEO_ENGINE_CLE    1   /* CLE First generation video engine */
1258aedb4f6Smrg#define VIDEO_ENGINE_CME    2   /* CME Second generation video engine */
1268aedb4f6Smrg
1278aedb4f6Smrgstatic int gVIAEntityIndex = -1;
1288aedb4f6Smrg
1297e6fb56fSmrgtypedef struct {
1307e6fb56fSmrg    CARD8   SR08, SR0A, SR0F;
1317e6fb56fSmrg
13203bd066fSmrg    /* Extended Sequencer Registers */
13303bd066fSmrg    CARD8   SR10, SR11, SR12, SR13, SR14, SR15, SR16, SR17;
13403bd066fSmrg    CARD8   SR18, SR19, SR1A, SR1B, SR1C, SR1D, SR1E, SR1F;
13503bd066fSmrg    CARD8   SR20, SR21, SR22, SR23, SR24, SR25, SR26, SR27;
13603bd066fSmrg    CARD8   SR28, SR29, SR2A, SR2B, SR2C, SR2D, SR2E, SR2F;
13703bd066fSmrg    CARD8   SR30, SR31, SR32, SR33, SR34;
13803bd066fSmrg    CARD8   SR40, SR41, SR42, SR43, SR44, SR45, SR46, SR47;
13903bd066fSmrg    CARD8   SR48, SR49, SR4A, SR4B, SR4C, SR4D, SR4E, SR4F;
1407e6fb56fSmrg
14103bd066fSmrg    /* CRTC Registers */
1428aedb4f6Smrg    CARD8   CR0C, CR0D;
14303bd066fSmrg    CARD8   CR13;
14403bd066fSmrg
14503bd066fSmrg    /* IGA1 Registers */
14603bd066fSmrg    CARD8   CR30, CR31, CR32, CR33, CR34, CR35, CR36, CR37;
14703bd066fSmrg    CARD8   CR38, CR39, CR3A, CR3B, CR3C, CR3D, CR3E, CR3F;
14803bd066fSmrg    CARD8   CR40, CR41, CR42, CR43, CR44, CR45, CR46, CR47;
14903bd066fSmrg    CARD8   CR48;
15003bd066fSmrg
15103bd066fSmrg    /* IGA2 Registers */
15203bd066fSmrg    CARD8   EXCR[0xFD - 0x50 + 1];
15303bd066fSmrg
1547e6fb56fSmrg} VIARegRec, *VIARegPtr;
1557e6fb56fSmrg
1567e6fb56fSmrg/*
1578aedb4f6Smrg * variables that need to be shared among different screens.
1587e6fb56fSmrg */
1597e6fb56fSmrgtypedef struct {
1607e6fb56fSmrg    Bool b3DRegsInitialized;
1617e6fb56fSmrg} ViaSharedRec, *ViaSharedPtr;
1627e6fb56fSmrg
1638aedb4f6Smrgenum dri_type {
1648aedb4f6Smrg	DRI_NONE,
1658aedb4f6Smrg	DRI_1,
1668aedb4f6Smrg	DRI_2
1678aedb4f6Smrg};
1688aedb4f6Smrg
1698aedb4f6Smrg#ifdef HAVE_DRI
1707e6fb56fSmrg
1717e6fb56fSmrg#define VIA_XVMC_MAX_BUFFERS 2
1727e6fb56fSmrg#define VIA_XVMC_MAX_CONTEXTS 4
1737e6fb56fSmrg#define VIA_XVMC_MAX_SURFACES 20
1747e6fb56fSmrg
1757e6fb56fSmrgtypedef struct {
1768aedb4f6Smrg    struct buffer_object *memory_ref;
1777e6fb56fSmrg    unsigned long offsets[VIA_XVMC_MAX_BUFFERS];
1787e6fb56fSmrg} ViaXvMCSurfacePriv;
1797e6fb56fSmrg
1807e6fb56fSmrgtypedef struct {
1817e6fb56fSmrg    drm_context_t drmCtx;
1827e6fb56fSmrg} ViaXvMCContextPriv;
1837e6fb56fSmrg
1847e6fb56fSmrgtypedef struct {
1857e6fb56fSmrg    XID contexts[VIA_XVMC_MAX_CONTEXTS];
1867e6fb56fSmrg    XID surfaces[VIA_XVMC_MAX_SURFACES];
1877e6fb56fSmrg    ViaXvMCSurfacePriv *sPrivs[VIA_XVMC_MAX_SURFACES];
1887e6fb56fSmrg    ViaXvMCContextPriv *cPrivs[VIA_XVMC_MAX_CONTEXTS];
1897e6fb56fSmrg    int nContexts,nSurfaces;
1907e6fb56fSmrg    drm_handle_t mmioBase,fbBase,sAreaBase;
1917e6fb56fSmrg    unsigned sAreaSize;
1927e6fb56fSmrg    drmAddress sAreaAddr;
1937e6fb56fSmrg    unsigned activePorts;
1947e6fb56fSmrg}ViaXvMC, *ViaXvMCPtr;
1957e6fb56fSmrg
1967e6fb56fSmrg#endif
1977e6fb56fSmrg
1987e6fb56fSmrgtypedef struct _twodContext {
1997e6fb56fSmrg    CARD32 mode;
2007e6fb56fSmrg    CARD32 cmd;
2017e6fb56fSmrg    CARD32 fgColor;
2027e6fb56fSmrg    CARD32 bgColor;
2037e6fb56fSmrg    CARD32 pattern0;
2047e6fb56fSmrg    CARD32 pattern1;
2057e6fb56fSmrg    CARD32 patternAddr;
2067e6fb56fSmrg    CARD32 keyControl;
2077e6fb56fSmrg    unsigned srcOffset;
2087e6fb56fSmrg    unsigned srcPitch;
2097e6fb56fSmrg    unsigned Bpp;
2107e6fb56fSmrg    unsigned bytesPPShift;
2117e6fb56fSmrg    Bool clipping;
2127e6fb56fSmrg    Bool dashed;
2137e6fb56fSmrg    int clipX1;
2147e6fb56fSmrg    int clipX2;
2157e6fb56fSmrg    int clipY1;
2167e6fb56fSmrg    int clipY2;
2177e6fb56fSmrg} ViaTwodContext;
2187e6fb56fSmrg
2197e6fb56fSmrgtypedef struct _VIA {
2207e6fb56fSmrg    VIARegRec           SavedReg;
2217e6fb56fSmrg    int                 Bpp, Bpl;
2227e6fb56fSmrg
2238aedb4f6Smrg    Bool                KMS;
2247e6fb56fSmrg    Bool                FirstInit;
2257e6fb56fSmrg    unsigned long       videoRambytes;
2267e6fb56fSmrg    int                 FBFreeStart;
2277e6fb56fSmrg    int                 FBFreeEnd;
2287e6fb56fSmrg    int                 driSize;
2297e6fb56fSmrg    int                 maxDriSize;
2308aedb4f6Smrg    struct buffer_object *vq_bo;
2317e6fb56fSmrg    int                 VQStart;
2327e6fb56fSmrg    int                 VQEnd;
2337e6fb56fSmrg
2347e6fb56fSmrg    /* These are physical addresses. */
2357e6fb56fSmrg    unsigned long       FrameBufferBase;
2367e6fb56fSmrg    unsigned long       MmioBase;
2377e6fb56fSmrg
2387e6fb56fSmrg    /* These are linear addresses. */
2397e6fb56fSmrg    unsigned char*      MapBase;
2407e6fb56fSmrg    unsigned char*      MpegMapBase;
2417e6fb56fSmrg    unsigned char*      BltBase;
2427e6fb56fSmrg    unsigned char*      MapBaseDense;
2437e6fb56fSmrg    unsigned char*      FBBase;
2447e6fb56fSmrg    CARD8               MemClk;
2457e6fb56fSmrg
2467e6fb56fSmrg    /* Here are all the Options */
2477e6fb56fSmrg    Bool                VQEnable;
2487e6fb56fSmrg    Bool                NoAccel;
2497e6fb56fSmrg    Bool                shadowFB;
2507e6fb56fSmrg    Rotation            rotate;
2517e6fb56fSmrg    int                 agpMem;
2527e6fb56fSmrg
2538aedb4f6Smrg	CreateScreenResourcesProcPtr CreateScreenResources;
2547e6fb56fSmrg    CloseScreenProcPtr  CloseScreen;
2558aedb4f6Smrg#ifdef HAVE_PCIACCESS
2568aedb4f6Smrg    struct pci_device  *PciInfo;
2577e6fb56fSmrg#else
2588aedb4f6Smrg    pciVideoPtr         PciInfo;
2597e6fb56fSmrg    PCITAG PciTag;
2607e6fb56fSmrg#endif
2617e6fb56fSmrg    int                 Chipset;
2627e6fb56fSmrg    int                 ChipId;
2637e6fb56fSmrg    int                 ChipRev;
2647e6fb56fSmrg    int                 EntityIndex;
2657e6fb56fSmrg
2667e6fb56fSmrg    /* Support for shadowFB and rotation */
2677e6fb56fSmrg    unsigned char*      ShadowPtr;
2687e6fb56fSmrg
2698aedb4f6Smrg    /* Support for EXA acceleration */
2707e6fb56fSmrg    ViaTwodContext      td;
2717e6fb56fSmrg    Via3DState          v3d;
2727e6fb56fSmrg    Via3DState          *lastToUpload;
2737e6fb56fSmrg    ViaCommandBuffer    cb;
2747e6fb56fSmrg    int                 accelMarker;
2758aedb4f6Smrg    struct buffer_object *exa_sync_bo;
2768aedb4f6Smrg    struct buffer_object *exaMem;
2777e6fb56fSmrg    CARD32              markerOffset;
2788aedb4f6Smrg    void               *markerBuf;
2797e6fb56fSmrg    CARD32              curMarker;
2807e6fb56fSmrg    CARD32              lastMarkerRead;
2817e6fb56fSmrg    Bool                agpDMA;
2827e6fb56fSmrg    Bool                nPOT[VIA_NUM_TEXUNITS];
2838aedb4f6Smrg    const unsigned     *HqvCmeRegs;
2847e6fb56fSmrg    ExaDriverPtr        exaDriverPtr;
2857e6fb56fSmrg    ExaOffscreenArea   *exa_scratch;
2867e6fb56fSmrg    unsigned int        exa_scratch_next;
2877e6fb56fSmrg    Bool                useEXA;
2887e6fb56fSmrg    void               *maskP;
2897e6fb56fSmrg    CARD32              maskFormat;
2907e6fb56fSmrg    Bool                componentAlpha;
2917e6fb56fSmrg    void               *srcP;
2927e6fb56fSmrg    CARD32              srcFormat;
2937e6fb56fSmrg    unsigned            scratchOffset;
2947e6fb56fSmrg    int                 exaScratchSize;
2957e6fb56fSmrg    char *              scratchAddr;
2967e6fb56fSmrg    Bool                noComposite;
2978aedb4f6Smrg    struct buffer_object *scratchBuffer;
2988aedb4f6Smrg#ifdef HAVE_DRI
2998aedb4f6Smrg    struct buffer_object *texAGPBuffer;
3007e6fb56fSmrg    char *              dBounce;
3017e6fb56fSmrg#endif
3027e6fb56fSmrg
3037e6fb56fSmrg    /* Rotation */
3047e6fb56fSmrg    Bool    RandRRotation;
3057e6fb56fSmrg
3067e6fb56fSmrg    /* BIOS Info Ptr */
3077e6fb56fSmrg    VIABIOSInfoPtr      pBIOSInfo;
30844802259Smrg
30944802259Smrg    /* OLPC XO-1.5 */
31044802259Smrg    Bool                IsOLPCXO15;
3117e6fb56fSmrg
3127e6fb56fSmrg    /* I2C & DDC */
3138aedb4f6Smrg    I2CBusPtr           pI2CBus1;
3148aedb4f6Smrg    I2CBusPtr           pI2CBus2;
3157e6fb56fSmrg    I2CBusPtr           pI2CBus3;
3167e6fb56fSmrg
3177e6fb56fSmrg    /* MHS */
3187e6fb56fSmrg    Bool                IsSecondary;
3197e6fb56fSmrg    Bool                HasSecondary;
3207e6fb56fSmrg    Bool                SAMM;
3217e6fb56fSmrg
3228aedb4f6Smrg    drmmode_rec         drmmode;
3238aedb4f6Smrg    enum dri_type       directRenderingType;
3248aedb4f6Smrg#ifdef HAVE_DRI
3257e6fb56fSmrg    Bool                XvMCEnabled;
3268aedb4f6Smrg    DRIInfoPtr          pDRIInfo;
3278aedb4f6Smrg    int                 numVisualConfigs;
3288aedb4f6Smrg    __GLXvisualConfig*	pVisualConfigs;
3298aedb4f6Smrg    VIAConfigPrivPtr	pVisualConfigsPriv;
3308aedb4f6Smrg    drm_handle_t        agpHandle;
3318aedb4f6Smrg    drm_handle_t        registerHandle;
3327e6fb56fSmrg    drm_handle_t        frameBufferHandle;
3338aedb4f6Smrg    unsigned long       agpAddr;
3347e6fb56fSmrg    drmAddress          agpMappedAddr;
3358aedb4f6Smrg    unsigned int        agpSize;
3368aedb4f6Smrg    Bool                IsPCI;
3377e6fb56fSmrg    ViaXvMC             xvmc;
3387e6fb56fSmrg    int                 drmVerMajor;
3397e6fb56fSmrg    int                 drmVerMinor;
3407e6fb56fSmrg    int                 drmVerPL;
3418aedb4f6Smrg    struct buffer_object *driOffScreenMem;
3427e6fb56fSmrg    void *              driOffScreenSave;
3437e6fb56fSmrg#endif
3448aedb4f6Smrg    Bool                DRIIrqEnable;
3457e6fb56fSmrg    Bool                agpEnable;
3467e6fb56fSmrg    Bool                dma2d;
3477e6fb56fSmrg    Bool                dmaXV;
3487e6fb56fSmrg
3497e6fb56fSmrg    /* Video */
3507e6fb56fSmrg    int                 VideoEngine;
3518aedb4f6Smrg    swovRec             swov;
3527e6fb56fSmrg    CARD32              VideoStatus;
3538aedb4f6Smrg    VIAHWDiff           HWDiff;
3548aedb4f6Smrg    unsigned long       dwV1, dwV3;
3558aedb4f6Smrg    unsigned long       dwFrameNum;
3567e6fb56fSmrg
3578aedb4f6Smrg    CARD32*             VidRegBuffer; /* Temporary buffer for video overlay registers. */
3588aedb4f6Smrg    unsigned long       VidRegCursor; /* Write cursor for VidRegBuffer. */
3597e6fb56fSmrg
3608aedb4f6Smrg    unsigned long       old_dwUseExtendedFIFO;
3618aedb4f6Smrg
3628aedb4f6Smrg    ViaSharedPtr        sharedData;
3637e6fb56fSmrg    Bool                useDmaBlit;
3647e6fb56fSmrg
3657e6fb56fSmrg    void                *displayMap;
3667e6fb56fSmrg    CARD32              displayOffset;
3678aedb4f6Smrg
3688aedb4f6Smrg    CARD8               I2CDevices;	/* Option */
3697e6fb56fSmrg
3707e6fb56fSmrg#ifdef HAVE_DEBUG
3717e6fb56fSmrg    Bool                disableXvBWCheck;
3727e6fb56fSmrg    Bool                DumpVGAROM;
3737e6fb56fSmrg    Bool                PrintVGARegs;
3747e6fb56fSmrg    Bool                PrintTVRegs;
3757e6fb56fSmrg    Bool                I2CScan;
3767e6fb56fSmrg#endif /* HAVE_DEBUG */
3778aedb4f6Smrg
3788aedb4f6Smrg    video_via_regs*     VideoRegs;
3797e6fb56fSmrg} VIARec, *VIAPtr;
3807e6fb56fSmrg
3817e6fb56fSmrg#define VIAPTR(p) ((VIAPtr)((p)->driverPrivate))
3827e6fb56fSmrg
3837e6fb56fSmrgtypedef struct
3847e6fb56fSmrg{
3857e6fb56fSmrg    Bool IsDRIEnabled;
3867e6fb56fSmrg
3877e6fb56fSmrg    Bool HasSecondary;
3887e6fb56fSmrg    Bool BypassSecondary;
3897e6fb56fSmrg    /*These two registers are used to make sure the CRTC2 is
3908aedb4f6Smrg      restored before CRTC_EXT, otherwise it could lead to blank screen.*/
3917e6fb56fSmrg    Bool IsSecondaryRestored;
3927e6fb56fSmrg    Bool RestorePrimary;
3937e6fb56fSmrg
3947e6fb56fSmrg    ScrnInfoPtr pSecondaryScrn;
3957e6fb56fSmrg    ScrnInfoPtr pPrimaryScrn;
3967e6fb56fSmrg} VIAEntRec, *VIAEntPtr;
3977e6fb56fSmrg
39803bd066fSmrg
39903bd066fSmrg/* In via_display.c. */
40003bd066fSmrgconst xf86CrtcFuncsRec iga1_crtc_funcs;
40103bd066fSmrgconst xf86CrtcFuncsRec iga2_crtc_funcs;
40203bd066fSmrg
4038aedb4f6Smrg/* In via_exa.c. */
4048aedb4f6SmrgBool viaInitExa(ScreenPtr pScreen);
4058aedb4f6SmrgBool viaAccelSetMode(int bpp, ViaTwodContext * tdc);
4067e6fb56fSmrgvoid viaAccelSync(ScrnInfoPtr);
4077e6fb56fSmrgvoid viaExitAccel(ScreenPtr);
4087e6fb56fSmrgvoid viaFinishInitAccel(ScreenPtr);
4098aedb4f6SmrgBool viaOrder(CARD32 val, CARD32 * shift);
4108aedb4f6SmrgCARD32 viaBitExpandHelper(CARD32 pixel, CARD32 bits);
4118aedb4f6SmrgBool viaCheckUpload(ScrnInfoPtr pScrn, Via3DState * v3d);
4128aedb4f6Smrgvoid viaPixelARGB8888(unsigned format, void *pixelP, CARD32 * argb8888);
4138aedb4f6SmrgBool viaExpandablePixel(int format);
4148aedb4f6Smrgvoid viaAccelFillPixmap(ScrnInfoPtr, unsigned long, unsigned long,
4157e6fb56fSmrg			int, int, int, int, int, unsigned long);
4168aedb4f6Smrgvoid viaAccelTextureBlit(ScrnInfoPtr, unsigned long, unsigned, unsigned,
4177e6fb56fSmrg			 unsigned, unsigned, unsigned, unsigned,
4187e6fb56fSmrg			 unsigned long, unsigned, unsigned,
4197e6fb56fSmrg			 unsigned, unsigned, int);
4208aedb4f6Smrg#ifdef VIA_DEBUG_COMPOSITE
4218aedb4f6Smrgvoid viaExaCompositePictDesc(PicturePtr pict, char *string, int n);
4228aedb4f6Smrgvoid viaExaPrintCompositeInfo(char *info, CARD8 op, PicturePtr pSrc, PicturePtr pMask,
4238aedb4f6Smrg                            PicturePtr pDst);
4248aedb4f6Smrg#endif
4257e6fb56fSmrg
4268aedb4f6Smrg/* In via_exa_h2.c */
4278aedb4f6SmrgBool viaExaPrepareSolid_H2(PixmapPtr pPixmap, int alu, Pixel planeMask,
4288aedb4f6Smrg                        Pixel fg);
4298aedb4f6Smrgvoid viaExaSolid_H2(PixmapPtr pPixmap, int x1, int y1, int x2, int y2);
4308aedb4f6Smrgvoid viaExaDoneSolidCopy_H2(PixmapPtr pPixmap);
4318aedb4f6SmrgBool viaExaPrepareCopy_H2(PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap,
4328aedb4f6Smrg                            int xdir, int ydir, int alu, Pixel planeMask);
4338aedb4f6Smrgvoid viaExaCopy_H2(PixmapPtr pDstPixmap, int srcX, int srcY, int dstX,
4348aedb4f6Smrg                    int dstY, int width, int height);
4358aedb4f6SmrgBool viaExaCheckComposite_H2(int op, PicturePtr pSrcPicture,
4368aedb4f6Smrg                            PicturePtr pMaskPicture, PicturePtr pDstPicture);
4378aedb4f6SmrgBool viaExaPrepareComposite_H2(int op, PicturePtr pSrcPicture,
4388aedb4f6Smrg                            PicturePtr pMaskPicture, PicturePtr pDstPicture,
4398aedb4f6Smrg                            PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst);
4408aedb4f6Smrgvoid viaExaComposite_H2(PixmapPtr pDst, int srcX, int srcY,
4418aedb4f6Smrg                        int maskX, int maskY, int dstX, int dstY,
4428aedb4f6Smrg                        int width, int height);
4438aedb4f6Smrgint viaAccelMarkSync_H2(ScreenPtr);
4448aedb4f6Smrg
4458aedb4f6Smrg/* In via_exa_h6.c */
4468aedb4f6SmrgBool viaExaPrepareSolid_H6(PixmapPtr pPixmap, int alu, Pixel planeMask,
4478aedb4f6Smrg                        Pixel fg);
4488aedb4f6Smrgvoid viaExaSolid_H6(PixmapPtr pPixmap, int x1, int y1, int x2, int y2);
4498aedb4f6Smrgvoid viaExaDoneSolidCopy_H6(PixmapPtr pPixmap);
4508aedb4f6SmrgBool viaExaPrepareCopy_H6(PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap,
4518aedb4f6Smrg                            int xdir, int ydir, int alu, Pixel planeMask);
4528aedb4f6Smrgvoid viaExaCopy_H6(PixmapPtr pDstPixmap, int srcX, int srcY, int dstX,
4538aedb4f6Smrg                    int dstY, int width, int height);
4548aedb4f6SmrgBool viaExaCheckComposite_H6(int op, PicturePtr pSrcPicture,
4558aedb4f6Smrg                            PicturePtr pMaskPicture, PicturePtr pDstPicture);
4568aedb4f6SmrgBool viaExaPrepareComposite_H6(int op, PicturePtr pSrcPicture,
4578aedb4f6Smrg                            PicturePtr pMaskPicture, PicturePtr pDstPicture,
4588aedb4f6Smrg                            PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst);
4598aedb4f6Smrgvoid viaExaComposite_H6(PixmapPtr pDst, int srcX, int srcY,
4608aedb4f6Smrg                        int maskX, int maskY, int dstX, int dstY,
4618aedb4f6Smrg                        int width, int height);
4628aedb4f6Smrgint viaAccelMarkSync_H6(ScreenPtr);
4638aedb4f6Smrg
4648aedb4f6Smrg/* In via_xv.c */
4658aedb4f6Smrgvoid viaInitVideo(ScreenPtr pScreen);
4668aedb4f6Smrgvoid viaExitVideo(ScrnInfoPtr pScrn);
4678aedb4f6Smrgvoid viaSaveVideo(ScrnInfoPtr pScrn);
4688aedb4f6Smrgvoid viaRestoreVideo(ScrnInfoPtr pScrn);
4698aedb4f6Smrgvoid viaSetColorSpace(VIAPtr pVia, int hue, int saturation, int brightness, int contrast,
4708aedb4f6Smrg		      Bool reset);
4717e6fb56fSmrg
4727e6fb56fSmrg
4738aedb4f6Smrg/* In via_xv.c */
4747e6fb56fSmrgvoid viaInitVideo(ScreenPtr pScreen);
4757e6fb56fSmrgvoid viaExitVideo(ScrnInfoPtr pScrn);
4767e6fb56fSmrgvoid viaSaveVideo(ScrnInfoPtr pScrn);
4777e6fb56fSmrgvoid viaRestoreVideo(ScrnInfoPtr pScrn);
4787e6fb56fSmrgvoid viaSetColorSpace(VIAPtr pVia, int hue, int saturation, int brightness, int contrast,
4797e6fb56fSmrg		      Bool reset);
4807e6fb56fSmrgvoid VIAVidAdjustFrame(ScrnInfoPtr pScrn, int x, int y);
4817e6fb56fSmrg
4828aedb4f6Smrg/* In via_memcpy.c */
4838aedb4f6Smrgtypedef void (*vidCopyFunc)(unsigned char *, const unsigned char *,
4848aedb4f6Smrg                            int, int, int, int);
4858aedb4f6Smrgextern vidCopyFunc viaVidCopyInit( char *copyType, ScreenPtr pScreen );
4867e6fb56fSmrg
4877e6fb56fSmrg/* In via_xwmc.c */
4887e6fb56fSmrg
4898aedb4f6Smrg#ifdef HAVE_DRI
4907e6fb56fSmrg/* Basic init and exit functions */
4918aedb4f6Smrgvoid ViaInitXVMC(ScreenPtr pScreen);
4927e6fb56fSmrgvoid ViaCleanupXVMC(ScrnInfoPtr pScrn, XF86VideoAdaptorPtr *XvAdaptors, int XvAdaptorCount);
4937e6fb56fSmrgint viaXvMCInitXv(ScrnInfoPtr pScrn, XF86VideoAdaptorPtr XvAdapt);
4947e6fb56fSmrg
4957e6fb56fSmrg/* Returns the size of the fake Xv Image used as XvMC command buffer to the X server*/
4967e6fb56fSmrgunsigned long viaXvMCPutImageSize(ScrnInfoPtr pScrn);
4977e6fb56fSmrg#endif
4987e6fb56fSmrg
4997e6fb56fSmrg/* via_i2c.c */
5007e6fb56fSmrgvoid ViaI2CInit(ScrnInfoPtr pScrn);
5017e6fb56fSmrg
5028aedb4f6Smrg#ifdef HAVE_DRI
5038aedb4f6SmrgBool VIADRI1ScreenInit(ScreenPtr pScreen);
5047e6fb56fSmrgvoid VIADRICloseScreen(ScreenPtr pScreen);
5057e6fb56fSmrgBool VIADRIFinishScreenInit(ScreenPtr pScreen);
5067e6fb56fSmrgvoid VIADRIRingBufferCleanup(ScrnInfoPtr pScrn);
5077e6fb56fSmrgBool VIADRIRingBufferInit(ScrnInfoPtr pScrn);
5087e6fb56fSmrgvoid viaDRIOffscreenRestore(ScrnInfoPtr pScrn);
5097e6fb56fSmrgvoid viaDRIOffscreenSave(ScrnInfoPtr pScrn);
5108aedb4f6SmrgBool VIADRIBufferInit(ScrnInfoPtr pScrn);
5117e6fb56fSmrg
5128aedb4f6Smrg#endif /* HAVE_DRI */
5137e6fb56fSmrg
5147024fa79Smrgint viaOffScreenLinear(struct buffer_object *obj, ScrnInfoPtr pScrn, unsigned long size);
51544802259Smrgvoid viaShowCursor(ScrnInfoPtr pScrn);
51644802259Smrgvoid viaHideCursor(ScrnInfoPtr pScrn);
51744802259SmrgBool viaHWCursorInit(ScreenPtr pScreen);
51844802259Smrgvoid ViaDisplaySetStreamOnCRT(ScrnInfoPtr pScrn, Bool primary);
519d89f4815Schristosvoid ViaDisplaySetStreamOnDFP(ScrnInfoPtr pScrn, Bool primary);
520d89f4815Schristos
5217e6fb56fSmrg#endif /* _VIA_DRIVER_H_ */
522