#ifndef _VIA_DRIVER_H_
#define _VIA_DRIVER_H_ 1
#ifdef DEBUG_PRINT
#define DEBUG(x) x
#else
#define DEBUG(x)
#endif
#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
#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)
#if XF86_VERSION_CURRENT < XF86_VERSION_NUMERIC(4,3,99,14,0)
#undef XFREE86_44
#else
#define XFREE86_44 1
#endif
#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;
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;
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];
} VIARegRec, *VIARegPtr;
#define PORT0 0
#define PORT1 1
typedef struct __viaVideoControl {
CARD16 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;
Bool Cap1OnScreen1;
Bool MPEGOnScreen1;
} VIAVideoControlRec, VIAVideoControlPtr;
#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
typedef struct __VIAHWRec
{
unsigned long dwThreeHQVBuffer;
unsigned long dwV3SrcHeightSetting;
unsigned long dwSupportExtendFIFO;
unsigned long dwHQVFetchByteUnit;
unsigned long dwHQVInitPatch;
unsigned long dwSupportV3Gamma;
unsigned long dwUpdFlip;
unsigned long dwHQVDisablePatch;
unsigned long dwSUBFlip;
unsigned long dwNeedV3Prefetch;
unsigned long dwNeedV4Prefetch;
unsigned long dwUseSystemMemory;
unsigned long dwExpandVerPatch;
unsigned long dwExpandVerHorPatch;
unsigned long dwV3ExpireNumTune;
unsigned long dwV3FIFOThresholdTune;
unsigned long dwCheckHQVFIFOEmpty;
unsigned long dwUseMPEGAGP;
unsigned long dwV3FIFOPatch;
unsigned long dwSupportTwoColorKey;
unsigned long dwCxColorSpace;
} VIAHWRec;
typedef struct _WaitHWINFO
{
unsigned char * pjVideo;
unsigned long dwVideoFlag;
}WaitHWINFO, * LPWaitHWINFO;
typedef struct
{
int decoderType;
#define SAA7108H 0
#define SAA7113H 1
#define SAA7114H 2
I2CDevPtr I2C;
I2CDevPtr FMI2C;
int autoDetect;
int tunerMode;
} ViaTunerRec, *ViaTunerPtr;
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;
unsigned long FrameBufferBase;
unsigned long MmioBase;
unsigned char* MapBase;
unsigned char* VidMapBase;
unsigned char* BltBase;
unsigned char* MapBaseDense;
unsigned char* FBBase;
unsigned char* FBStart;
int SWOVUsed[MEM_BLOCKS];
unsigned long SWOVPool;
unsigned long SWOVSize;
Bool PrimaryVidMapped;
int dacSpeedBpp;
int minClock, maxClock;
int MCLK, REFCLK, LCDclk;
double refclk_fact;
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;
unsigned char* ShadowPtr;
int ShadowPitch;
void (*PointerMoved)(int index, int x, int y);
XAAInfoRecPtr AccelInfoRec;
xRectangle Rect;
CARD32 SavedCmd;
CARD32 SavedFgColor;
CARD32 SavedBgColor;
CARD32 SavedPattern0;
CARD32 SavedPattern1;
CARD32 SavedPatternAddr;
xf86Int10InfoPtr pInt10;
VIABIOSInfoPtr pBIOSInfo;
int numDGAModes;
DGAModePtr DGAModes;
Bool DGAactive;
int DGAViewportStatus;
int DGAOldDisplayWidth;
int DGAOldBitsPerPixel;
int DGAOldDepth;
int (*myWaitIdle)(struct _VIA*);
I2CBusPtr I2C_Port1;
I2CBusPtr I2C_Port2;
xf86MonPtr DDC1;
xf86MonPtr DDC2;
Bool IsSecondary;
Bool HasSecondary;
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;
drmAddress agpMappedAddr;
unsigned char *agpBase;
unsigned int agpSize;
Bool IsPCI;
Bool drixinerama;
#endif
unsigned char ActiveDevice;
unsigned char *CursorImage;
CARD32 CursorFG;
CARD32 CursorBG;
CARD32 CursorMC;
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;
ViaTunerPtr Tuner[2];
I2CDevPtr CXA2104S;
int AudioMode;
int AudioMute;
ViaGraphicRec graphicInfo;
ViaSharedPtr sharedData;
} VIARec, *VIAPtr;
typedef struct
{
Bool IsDRIEnabled;
Bool HasSecondary;
Bool BypassSecondary;
Bool IsSecondaryRestored;
Bool RestorePrimary;
ScrnInfoPtr pSecondaryScrn;
ScrnInfoPtr pPrimaryScrn;
}VIAEntRec, *VIAEntPtr;
#define WaitIdle() pVia->myWaitIdle(pVia)
#define VIAPTR(p) ((VIAPtr)((p)->driverPrivate))
void VIAAdjustFrame(int scrnIndex, int y, int x, int flags);
Bool VIASwitchMode(int scrnIndex, DisplayModePtr mode, int flags);
void VIAvfInitHWDiff(VIAPtr pVia );
Bool VIAHWCursorInit(ScreenPtr pScreen);
void VIAShowCursor(ScrnInfoPtr);
void VIAHideCursor(ScrnInfoPtr);
Bool VIAInitAccel(ScreenPtr);
void VIAInitialize2DEngine(ScrnInfoPtr);
void VIAAccelSync(ScrnInfoPtr);
void VIAInitLinear(ScreenPtr pScreen);
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);
void VIAEnableLCD(VIABIOSInfoPtr pBIOSInfo);
void VIADisableLCD(VIABIOSInfoPtr pBIOSInfo);
Bool VIADGAInit(ScreenPtr);
Bool VIAI2CInit(ScrnInfoPtr pScrn);
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);
void viaInitVideo(ScreenPtr pScreen);
void viaExitVideo(ScrnInfoPtr pScrn);
void viaResetVideo(ScrnInfoPtr pScrn);
void viaSaveVideo(ScrnInfoPtr pScrn);
void viaRestoreVideo(ScrnInfoPtr pScrn);
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);
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 );
void VIAFreeLinear(VIAMemPtr);
unsigned long VIAAllocLinear(VIAMemPtr, ScrnInfoPtr, unsigned long);
void VIAInitPool(VIAPtr, unsigned long, unsigned long);
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);
#endif