From f18598cbd2802e61c2cbb1d610630da9b5951169 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Fri, 30 Jan 2004 23:26:19 +0000 Subject: Via Unichrome/cle266 driver (Erdi Chen) --- src/mesa/drivers/dri/unichrome/server/via_driver.h | 574 +++++++++++++++++++++ 1 file changed, 574 insertions(+) create mode 100644 src/mesa/drivers/dri/unichrome/server/via_driver.h (limited to 'src/mesa/drivers/dri/unichrome/server/via_driver.h') diff --git a/src/mesa/drivers/dri/unichrome/server/via_driver.h b/src/mesa/drivers/dri/unichrome/server/via_driver.h new file mode 100644 index 0000000000..f97704c076 --- /dev/null +++ b/src/mesa/drivers/dri/unichrome/server/via_driver.h @@ -0,0 +1,574 @@ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via_driver.h,v 1.7 2003/11/06 18:38:11 tsi Exp $ */ +/* + * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved. + * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sub license, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef _VIA_DRIVER_H_ +#define _VIA_DRIVER_H_ 1 + +#if 0 /* DEBUG is use in VIA DRI code as a flag */ +/* #define DEBUG_PRINT */ +#ifdef DEBUG_PRINT +#define DEBUG(x) x +#else +#define DEBUG(x) +#endif +#endif + +#if 0 +#include "vgaHW.h" +#include "xf86.h" +#include "xf86Resources.h" +#include "xf86_ansic.h" +#include "xf86Pci.h" +#include "xf86PciInfo.h" +#include "xf86_OSproc.h" +#include "compiler.h" +#include "xf86Cursor.h" +#include "mipointer.h" +#include "micmap.h" + +#define USE_FB +#ifdef USE_FB +#include "fb.h" +#else +#include "cfb.h" +#include "cfb16.h" +#include "cfb32.h" +#endif + +#include "xf86cmap.h" +#include "vbe.h" +#include "xaa.h" + +#include "via_regs.h" +#include "via_bios.h" +#include "via_gpioi2c.h" +#include "via_priv.h" +#include "ginfo.h" + +#ifdef XF86DRI +#define _XF86DRI_SERVER_ +#include "sarea.h" +#include "dri.h" +#include "GL/glxint.h" +#include "via_dri.h" +#endif +#else +#include "via_priv.h" +#include "via_regs.h" + +#include "sarea.h" +#include "dri.h" +#include "via_dri.h" +#endif + +#define DRIVER_NAME "via" +#define DRIVER_VERSION "4.1.0" +#define VERSION_MAJOR 4 +#define VERSION_MINOR 1 +#define PATCHLEVEL 30 +#define VIA_VERSION ((VERSION_MAJOR<<24) | (VERSION_MINOR<<16) | PATCHLEVEL) + +#define VGAIN8(addr) MMIO_IN8(pVia->MapBase+0x8000, addr) +#define VGAIN16(addr) MMIO_IN16(pVia->MapBase+0x8000, addr) +#define VGAIN(addr) MMIO_IN32(pVia->MapBase+0x8000, addr) + +#define VGAOUT8(addr, val) MMIO_OUT8(pVia->MapBase+0x8000, addr, val) +#define VGAOUT16(addr, val) MMIO_OUT16(pVia->MapBase+0x8000, addr, val) +#define VGAOUT(addr, val) MMIO_OUT32(pVia->MapBase+0x8000, addr, val) + +#define INREG(addr) MMIO_IN32(pVia->MapBase, addr) +#define OUTREG(addr, val) MMIO_OUT32(pVia->MapBase, addr, val) +#define INREG16(addr) MMIO_IN16(pVia->MapBase, addr) +#define OUTREG16(addr, val) MMIO_OUT16(pVia->MapBase, addr, val) + +#define VIA_PIXMAP_CACHE_SIZE (256 * 1024) +#define VIA_CURSOR_SIZE (4 * 1024) +#define VIA_VQ_SIZE (256 * 1024) + +typedef struct { + unsigned int mode, refresh, resMode; + int countWidthByQWord; + int offsetWidthByQWord; + unsigned char SR08, SR0A, SR0F; + + /* extended Sequencer registers */ + unsigned char SR10, SR11, SR12, SR13,SR14,SR15,SR16; + unsigned char SR17, SR18, SR19, SR1A,SR1B,SR1C,SR1D,SR1E; + unsigned char SR1F, SR20, SR21, SR22,SR23,SR24,SR25,SR26; + unsigned char SR27, SR28, SR29, SR2A,SR2B,SR2C,SR2D,SR2E; + unsigned char SR2F, SR30, SR31, SR32,SR33,SR34,SR40,SR41; + unsigned char SR42, SR43, SR44, SR45,SR46,SR47; + + unsigned char Clock; + + /* extended CRTC registers */ + unsigned char CR13, CR30, CR31, CR32, CR33, CR34, CR35, CR36; + unsigned char CR37, CR38, CR39, CR3A, CR40, CR41, CR42, CR43; + unsigned char CR44, CR45, CR46, CR47, CR48, CR49, CR4A; + unsigned char CRTCRegs[68]; + unsigned char TVRegs[0xFF]; +/* unsigned char LCDRegs[0x40];*/ +} VIARegRec, *VIARegPtr; + +/*Definition for CapturePortID*/ +#define PORT0 0 /* Capture Port 0*/ +#define PORT1 1 /* Capture Port 1*/ + +typedef struct __viaVideoControl { + CARD32 PORTID; + CARD32 dwCompose; + CARD32 dwHighQVDO; + CARD32 VideoStatus; + CARD32 dwAction; +#define ACTION_SET_PORTID 0 +#define ACTION_SET_COMPOSE 1 +#define ACTION_SET_HQV 2 +#define ACTION_SET_BOB 4 +#define ACTION_SET_VIDEOSTATUS 8 + Bool Cap0OnScreen1; /* True: Capture0 On Screen1 ; False: Capture0 On Screen0 */ + Bool Cap1OnScreen1; /* True: Capture1 On Screen1 ; False: Capture1 On Screen0 */ + Bool MPEGOnScreen1; /* True: MPEG On Screen1 ; False: MPEG On Screen0 */ +} VIAVideoControlRec, VIAVideoControlPtr; + +/*For Video HW Difference */ +#define VIA_REVISION_CLEC0 0x10 +#define VIA_REVISION_CLEC1 0x11 +#define VIA_REVISION_CLECX 0x10 + +#define VID_HWDIFF_TRUE 0x00000001 +#define VID_HWDIFF_FALSE 0x00000000 + +/* + * Video HW Difference Structure + */ + +typedef struct __VIAHWRec +{ + unsigned long dwThreeHQVBuffer; /* Use Three HQV Buffers*/ + unsigned long dwV3SrcHeightSetting; /* Set Video Source Width and Height*/ + unsigned long dwSupportExtendFIFO; /* Support Extand FIFO*/ + unsigned long dwHQVFetchByteUnit; /* HQV Fetch Count unit is byte*/ + unsigned long dwHQVInitPatch; /* Initialize HQV Engine 2 times*/ + unsigned long dwSupportV3Gamma; /* Support V3 Gamma */ + unsigned long dwUpdFlip; /* Set HQV3D0[15] to flip video*/ + unsigned long dwHQVDisablePatch; /* Change Video Engine Clock setting for HQV disable bug*/ + unsigned long dwSUBFlip; /* Set HQV3D0[15] to flip video for sub-picture blending*/ + unsigned long dwNeedV3Prefetch; /* V3 pre-fetch function for K8*/ + unsigned long dwNeedV4Prefetch; /* V4 pre-fetch function for K8*/ + unsigned long dwUseSystemMemory; /* Use system memory for DXVA compressed data buffers*/ + unsigned long dwExpandVerPatch; /* Patch video HW bug in expand SIM mode or same display path*/ + unsigned long dwExpandVerHorPatch; /* Patch video HW bug in expand SAMM mode or same display path*/ + unsigned long dwV3ExpireNumTune; /* Change V3 expire number setting for V3 bandwidth issue*/ + unsigned long dwV3FIFOThresholdTune; /* Change V3 FIFO, Threshold and Pre-threshold setting for V3 bandwidth issue*/ + unsigned long dwCheckHQVFIFOEmpty; /* HW Flip path, need to check HQV FIFO status */ + unsigned long dwUseMPEGAGP; /* Use MPEG AGP function*/ + unsigned long dwV3FIFOPatch; /* For CLE V3 FIFO Bug (srcWidth <= 8)*/ + unsigned long dwSupportTwoColorKey; /* Support two color key*/ + unsigned long dwCxColorSpace; /* CLE_Cx ColorSpace*/ +} VIAHWRec; + +/*Wait Function Structure and Flag*/ +typedef struct _WaitHWINFO +{ + unsigned char * pjVideo; /* MMIO Address Info*/ + unsigned long dwVideoFlag; /* Video Flag*/ +}WaitHWINFO, * LPWaitHWINFO; + +#if 0 +/* VIA Tuners */ +typedef struct +{ + int decoderType; /* Decoder I2C Type */ +#define SAA7108H 0 +#define SAA7113H 1 +#define SAA7114H 2 + I2CDevPtr I2C; /* Decoder I2C */ + I2CDevPtr FMI2C; /* FM Tuner I2C */ + + /* Not yet used */ + int autoDetect; /* Autodetect mode */ + int tunerMode; /* Fixed mode */ +} ViaTunerRec, *ViaTunerPtr; +#endif + +/* + * New style overlay structure for the SubPicture overlay + */ + +#if 0 +typedef struct +{ + VIAMem Memory; + int visible:1; /* Idea is for the top bits to become a generic class */ + CARD32 width; + CARD32 height; + CARD32 pitch; + CARD32 base[2]; /* Some channels have 3 so 3 for the generic unit */ + struct + { + CARD8 Y; + CARD8 Cb; + CARD8 Cr; + } palette[16]; +} ViaSubPictureRecord; + +typedef struct +{ + VIAMem Memory; + int visible:1; /* Visible */ + CARD32 width; + CARD32 height; + CARD32 pitch; + CARD32 base[3]; + int Channel; + int HQV; /* Own HQV */ +} ViaTVRecord; + +typedef struct +{ + VIAMem Memory; + CARD32 base[3]; + int Busy; +} ViaHQVRecord; +#endif + +/* + * Variables that need to be shared among different screens. + */ +typedef struct { + Bool b3DRegsInitialized; +} ViaSharedRec, *ViaSharedPtr; + + +typedef struct _VIA { + VIARegRec SavedReg; + VIARegRec ModeReg; + //xf86CursorInfoPtr CursorInfoRec; + Bool ModeStructInit; + int Bpp, Bpl, ScissB; + unsigned PlaneMask; + + unsigned long videoRambytes; + int videoRamKbytes; + int FBFreeStart; + int FBFreeEnd; + int CursorStart; + int VQStart; + int VQEnd; + + /* These are physical addresses. */ + unsigned long FrameBufferBase; + unsigned long MmioBase; + + /* These are linear addresses. */ + unsigned char* MapBase; + unsigned char* VidMapBase; + unsigned char* BltBase; + unsigned char* MapBaseDense; + unsigned char* FBBase; + unsigned char* FBStart; + + /* Private memory pool management */ + int SWOVUsed[MEM_BLOCKS]; /* Free map for SWOV pool */ + unsigned long SWOVPool; /* Base of SWOV pool */ + unsigned long SWOVSize; /* Size of SWOV blocks */ + + Bool PrimaryVidMapped; + int dacSpeedBpp; + int minClock, maxClock; + int MCLK, REFCLK, LCDclk; + double refclk_fact; + + /* Here are all the Options */ + Bool VQEnable; + Bool pci_burst; + Bool NoPCIRetry; + Bool hwcursor; + Bool NoAccel; + Bool shadowFB; + Bool NoDDCValue; + int rotate; + + //CloseScreenProcPtr CloseScreen; + //pciVideoPtr PciInfo; + //PCITAG PciTag; + int Chipset; + int ChipId; + int ChipRev; + //vbeInfoPtr pVbe; + int EntityIndex; + + /* Support for shadowFB and rotation */ + unsigned char* ShadowPtr; + int ShadowPitch; + void (*PointerMoved)(int index, int x, int y); + + /* Support for XAA acceleration */ + //XAAInfoRecPtr AccelInfoRec; + //xRectangle Rect; + CARD32 SavedCmd; + CARD32 SavedFgColor; + CARD32 SavedBgColor; + CARD32 SavedPattern0; + CARD32 SavedPattern1; + CARD32 SavedPatternAddr; + + /* Support for Int10 processing */ + //xf86Int10InfoPtr pInt10; + + /* BIOS Info Ptr */ + //VIABIOSInfoPtr pBIOSInfo; + + /* Support for DGA */ + int numDGAModes; + //DGAModePtr DGAModes; + Bool DGAactive; + int DGAViewportStatus; + int DGAOldDisplayWidth; + int DGAOldBitsPerPixel; + int DGAOldDepth; + /* The various wait handlers. */ + int (*myWaitIdle)(struct _VIA*); + + /* I2C & DDC */ + //I2CBusPtr I2C_Port1; + //I2CBusPtr I2C_Port2; + //xf86MonPtr DDC1; + //xf86MonPtr DDC2; + + /* MHS */ + Bool IsSecondary; + Bool HasSecondary; + + /* Capture de-interlace Mode */ + CARD32 Cap0_Deinterlace; + CARD32 Cap1_Deinterlace; + + Bool Cap0_FieldSwap; + +#ifdef XF86DRI + Bool directRenderingEnabled; + DRIInfoPtr pDRIInfo; + int drmFD; + int numVisualConfigs; + __GLXvisualConfig* pVisualConfigs; + VIAConfigPrivPtr pVisualConfigsPriv; + unsigned long agpHandle; + unsigned long registerHandle; + unsigned long agpAddr; + unsigned char *agpBase; + unsigned int agpSize; + Bool IsPCI; + Bool drixinerama; +#else + int drmFD; + unsigned long agpHandle; + unsigned long registerHandle; + unsigned long agpAddr; + unsigned char *agpBase; + unsigned int agpSize; + Bool IsPCI; +#endif + Bool OldDRI; /* True if DRM < 2.0 found */ + + unsigned char ActiveDevice; /* if SAMM, non-equal pBIOSInfo->ActiveDevice */ + unsigned char *CursorImage; + CARD32 CursorFG; + CARD32 CursorBG; + CARD32 CursorMC; + +#if 0 + /* Video */ + swovRec swov; + VIAVideoControlRec Video; + VIAHWRec ViaHW; + unsigned long dwV1, dwV3; + unsigned long OverlaySupported; + unsigned long dwFrameNum; + + pointer VidReg; + unsigned long gdwVidRegCounter; + unsigned long old_dwUseExtendedFIFO; + + /* Overlay TV Tuners */ + ViaTunerPtr Tuner[2]; + I2CDevPtr CXA2104S; + int AudioMode; + int AudioMute; +#endif + + /* SubPicture */ + //ViaSubPictureRecord SubPicture; + //ViaHQVRecord HQV; + //ViaTVRecord TV0, TV1; + + /* TODO: MPEG TV0 TV1 */ + + /* Global 2D state block - needs to slowly die */ + //ViaGraphicRec graphicInfo; + ViaSharedPtr sharedData; + + VIADRIPtr devPrivate; +} VIARec, *VIAPtr; + + +#if 0 +typedef struct +{ + Bool IsDRIEnabled; + + Bool HasSecondary; + Bool BypassSecondary; + /*These two registers are used to make sure the CRTC2 is + retored before CRTC_EXT, otherwise it could lead to blank screen.*/ + Bool IsSecondaryRestored; + Bool RestorePrimary; + + ScrnInfoPtr pSecondaryScrn; + ScrnInfoPtr pPrimaryScrn; +}VIAEntRec, *VIAEntPtr; +#endif + + +/* Shortcuts. These depend on a local symbol "pVia". */ + +#define WaitIdle() pVia->myWaitIdle(pVia) +#define VIAPTR(p) ((VIAPtr)((p)->driverPrivate)) + + +#if 0 +/* Prototypes. */ +void VIAAdjustFrame(int scrnIndex, int y, int x, int flags); +Bool VIASwitchMode(int scrnIndex, DisplayModePtr mode, int flags); + +/* In HwDiff.c */ +void VIAvfInitHWDiff(VIAPtr pVia ); + +/* In via_cursor.c. */ +Bool VIAHWCursorInit(ScreenPtr pScreen); +void VIAShowCursor(ScrnInfoPtr); +void VIAHideCursor(ScrnInfoPtr); + + +/* In via_accel.c. */ +Bool VIAInitAccel(ScreenPtr); +void VIAInitialize2DEngine(ScrnInfoPtr); +void VIAAccelSync(ScrnInfoPtr); +void VIAInitLinear(ScreenPtr pScreen); + + +/* In via_shadow.c */ +void VIAPointerMoved(int index, int x, int y); +void VIARefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox); +void VIARefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox); +void VIARefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox); +void VIARefreshArea24(ScrnInfoPtr pScrn, int num, BoxPtr pbox); +void VIARefreshArea32(ScrnInfoPtr pScrn, int num, BoxPtr pbox); + + +/* In via_bios.c */ +void VIAEnableLCD(VIABIOSInfoPtr pBIOSInfo); +void VIADisableLCD(VIABIOSInfoPtr pBIOSInfo); + +/* In via_dga.c */ +Bool VIADGAInit(ScreenPtr); + +/* In via_i2c.c */ +Bool VIAI2CInit(ScrnInfoPtr pScrn); + +/* In via_gpioi2c.c */ +Bool VIAGPIOI2C_Write(VIABIOSInfoPtr pBIOSInfo, int SubAddress, CARD8 Data); +Bool VIAGPIOI2C_Read(VIABIOSInfoPtr pBIOSInfo, int SubAddress, CARD8 *Buffer, int BufferLen); +Bool VIAGPIOI2C_ReadByte(VIABIOSInfoPtr pBIOSInfo, int SubAddress, CARD8 *Buffer); +Bool VIAGPIOI2C_Initial(VIABIOSInfoPtr pBIOSInfo, CARD8 SlaveDevice); + +/*In via_video.c*/ +void viaInitVideo(ScreenPtr pScreen); +void viaExitVideo(ScrnInfoPtr pScrn); +void viaResetVideo(ScrnInfoPtr pScrn); +void viaSaveVideo(ScrnInfoPtr pScrn); +void viaRestoreVideo(ScrnInfoPtr pScrn); + +/*In via_utility.c */ +void VIAXVUtilityProc(ScrnInfoPtr pScrn, unsigned char* buf); +Bool VIAUTGetInfo(VIABIOSInfoPtr pBIOSInfo); +Bool VIALoadUserSetting(VIABIOSInfoPtr pBIOSInfo); +Bool VIALoadGammaSetting(VIABIOSInfoPtr pBIOSInfo); +Bool VIARestoreUserSetting(VIABIOSInfoPtr pBIOSInfo); +void VIAUTRemoveRestartFlag(VIABIOSInfoPtr pBIOSInfo); + +/* in via_overlay.c */ +unsigned long viaOverlayHQVCalcZoomHeight (VIAPtr pVia, unsigned long srcHeight,unsigned long dstHeight, + unsigned long * lpzoomCtl, unsigned long * lpminiCtl, unsigned long * lpHQVfilterCtl, unsigned long * lpHQVminiCtl,unsigned long * lpHQVzoomflag); +unsigned long viaOverlayGetSrcStartAddress (VIAPtr pVia, unsigned long dwVideoFlag,RECTL rSrc,RECTL rDest, unsigned long dwSrcPitch,LPDDPIXELFORMAT lpDPF,unsigned long * lpHQVoffset ); +void viaOverlayGetDisplayCount(VIAPtr pVIa, unsigned long dwVideoFlag,LPDDPIXELFORMAT lpDPF,unsigned long dwSrcWidth,unsigned long * lpDisplayCountW); +unsigned long viaOverlayHQVCalcZoomWidth(VIAPtr pVia, unsigned long dwVideoFlag, unsigned long srcWidth , unsigned long dstWidth, + unsigned long * lpzoomCtl, unsigned long * lpminiCtl, unsigned long * lpHQVfilterCtl, unsigned long * lpHQVminiCtl,unsigned long * lpHQVzoomflag); +void viaOverlayGetV1Format(VIAPtr pVia, unsigned long dwVideoFlag,LPDDPIXELFORMAT lpDPF, unsigned long * lpdwVidCtl,unsigned long * lpdwHQVCtl ); +void viaOverlayGetV3Format(VIAPtr pVia, unsigned long dwVideoFlag,LPDDPIXELFORMAT lpDPF, unsigned long * lpdwVidCtl,unsigned long * lpdwHQVCtl ); + +/* In via_memory.c */ +void VIAFreeLinear(VIAMemPtr); +unsigned long VIAAllocLinear(VIAMemPtr, ScrnInfoPtr, unsigned long); +void VIAInitPool(VIAPtr, unsigned long, unsigned long); + +/* In via_tuner.c */ +void ViaTunerStandard(ViaTunerPtr, int); +void ViaTunerBrightness(ViaTunerPtr, int); +void ViaTunerContrast(ViaTunerPtr, int); +void ViaTunerHue(ViaTunerPtr, int); +void ViaTunerLuminance(ViaTunerPtr, int); +void ViaTunerSaturation(ViaTunerPtr, int); +void ViaTunerInput(ViaTunerPtr, int); +#define MODE_TV 0 +#define MODE_SVIDEO 1 +#define MODE_COMPOSITE 2 + +void ViaTunerChannel(ViaTunerPtr, int, int); +void ViaAudioSelect(VIAPtr pVia, int tuner); +void ViaAudioInit(VIAPtr pVia); +void ViaAudioMode(VIAPtr pVia, int mode); +void ViaAudioMute(VIAPtr pVia, int mute); +void ViaTunerProbe(ScrnInfoPtr pScrn); +void ViaTunerDestroy(ScrnInfoPtr pScrn); + +/* In via_lib.c */ +int VIACLECXChipset(VIAPtr pVia); +void VIASetColorspace(VIAPtr pVia, int check_secondary); +void VIAYUVFillBlack(VIAPtr pVia, int offset, int pixels); + +/* In via_subp.c */ +unsigned long VIACreateSubPictureSurface(ScrnInfoPtr pScrn, CARD32 width, CARD32 height); +void VIADestroySubPictureSurface(ScrnInfoPtr pScrn); +void VIASubPicturePalette(ScrnInfoPtr pScrn); +void VIASubPictureStart(ScrnInfoPtr pScrn, int frame); +void VIASubPictureStop(ScrnInfoPtr pScrn); + +/* In via_tv0.c */ +unsigned long VIACreateTV0Surface(ScrnInfoPtr pScrn, CARD32 width, CARD32 height); +void VIADestroyTV0Surface(ScrnInfoPtr pScrn); +#endif + +#endif /* _VIA_DRIVER_H_ */ -- cgit v1.2.3