trident.h revision 95b296d0
195b296d0Smrg/* 295b296d0Smrg * Copyright 1992-2003 by Alan Hourihane, North Wales, UK. 395b296d0Smrg * 495b296d0Smrg * Permission to use, copy, modify, distribute, and sell this software and its 595b296d0Smrg * documentation for any purpose is hereby granted without fee, provided that 695b296d0Smrg * the above copyright notice appear in all copies and that both that 795b296d0Smrg * copyright notice and this permission notice appear in supporting 895b296d0Smrg * documentation, and that the name of Alan Hourihane not be used in 995b296d0Smrg * advertising or publicity pertaining to distribution of the software without 1095b296d0Smrg * specific, written prior permission. Alan Hourihane makes no representations 1195b296d0Smrg * about the suitability of this software for any purpose. It is provided 1295b296d0Smrg * "as is" without express or implied warranty. 1395b296d0Smrg * 1495b296d0Smrg * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 1595b296d0Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 1695b296d0Smrg * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR 1795b296d0Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 1895b296d0Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 1995b296d0Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 2095b296d0Smrg * PERFORMANCE OF THIS SOFTWARE. 2195b296d0Smrg * 2295b296d0Smrg * Authors: Alan Hourihane, <alanh@fairlite.demon.co.uk> 2395b296d0Smrg */ 2495b296d0Smrg/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/trident/trident.h,v 1.59 2003/09/05 22:07:28 alanh Exp $ */ 2595b296d0Smrg/*#define VBE_INFO*/ 2695b296d0Smrg 2795b296d0Smrg#ifndef _TRIDENT_H_ 2895b296d0Smrg#define _TRIDENT_H_ 2995b296d0Smrg 3095b296d0Smrg#include <stdio.h> 3195b296d0Smrg#include <string.h> 3295b296d0Smrg#include <math.h> 3395b296d0Smrg 3495b296d0Smrg#include "exa.h" 3595b296d0Smrg#include "xf86Cursor.h" 3695b296d0Smrg#include "xaa.h" 3795b296d0Smrg#include "xf86RamDac.h" 3895b296d0Smrg#include "compiler.h" 3995b296d0Smrg#include "vgaHW.h" 4095b296d0Smrg#include "xf86i2c.h" 4195b296d0Smrg#include "xf86int10.h" 4295b296d0Smrg#include "shadowfb.h" 4395b296d0Smrg#include "shadow.h" 4495b296d0Smrg#include "xf86xv.h" 4595b296d0Smrg#include "xf86Pci.h" 4695b296d0Smrg#include "vbe.h" 4795b296d0Smrg 4895b296d0Smrg#define PCI_CHIP_2200 0x2200 4995b296d0Smrg 5095b296d0Smrgtypedef struct { 5195b296d0Smrg unsigned char tridentRegs3x4[0x100]; 5295b296d0Smrg unsigned char tridentRegs3CE[0x100]; 5395b296d0Smrg unsigned char tridentRegs3C4[0x100]; 5495b296d0Smrg unsigned char tridentRegsDAC[0x01]; 5595b296d0Smrg unsigned char tridentRegsClock[0x05]; 5695b296d0Smrg unsigned char DacRegs[0x300]; 5795b296d0Smrg} TRIDENTRegRec, *TRIDENTRegPtr; 5895b296d0Smrg 5995b296d0Smrg#define VGA_REGNUM_ABOUT_TV 19 6095b296d0Smrg#define TRIDENTPTR(p) ((TRIDENTPtr)((p)->driverPrivate)) 6195b296d0Smrg 6295b296d0Smrgtypedef struct { 6395b296d0Smrg ScrnInfoPtr pScrn; 6495b296d0Smrg pciVideoPtr PciInfo; 6595b296d0Smrg PCITAG PciTag; 6695b296d0Smrg EntityInfoPtr pEnt; 6795b296d0Smrg ExaDriverPtr EXADriverPtr; 6895b296d0Smrg int useEXA; 6995b296d0Smrg int Chipset; 7095b296d0Smrg int DACtype; 7195b296d0Smrg int RamDac; 7295b296d0Smrg int ChipRev; 7395b296d0Smrg int HwBpp; 7495b296d0Smrg int BppShift; 7595b296d0Smrg CARD32 IOAddress; 7695b296d0Smrg unsigned long FbAddress; 7795b296d0Smrg unsigned char * IOBase; 7895b296d0Smrg unsigned char * FbBase; 7995b296d0Smrg long FbMapSize; 8095b296d0Smrg IOADDRESS PIOBase; 8195b296d0Smrg Bool NoAccel; 8295b296d0Smrg Bool HWCursor; 8395b296d0Smrg Bool UsePCIRetry; 8495b296d0Smrg Bool UsePCIBurst; 8595b296d0Smrg Bool NewClockCode; 8695b296d0Smrg Bool Clipping; 8795b296d0Smrg Bool DstEnable; 8895b296d0Smrg Bool ROP; 8995b296d0Smrg Bool HasSGRAM; 9095b296d0Smrg Bool MUX; 9195b296d0Smrg Bool IsCyber; 9295b296d0Smrg Bool CyberShadow; 9395b296d0Smrg Bool CyberStretch; 9495b296d0Smrg Bool NoMMIO; 9595b296d0Smrg Bool MMIOonly; 9695b296d0Smrg Bool ShadowFB; 9795b296d0Smrg Bool Linear; 9895b296d0Smrg DGAModePtr DGAModes; 9995b296d0Smrg int numDGAModes; 10095b296d0Smrg Bool DGAactive; 10195b296d0Smrg int DGAViewportStatus; 10295b296d0Smrg unsigned char * ShadowPtr; 10395b296d0Smrg int ShadowPitch; 10495b296d0Smrg RefreshAreaFuncPtr RefreshArea; 10595b296d0Smrg void (*PointerMoved)(int index, int x, int y); 10695b296d0Smrg int Rotate; 10795b296d0Smrg float frequency; 10895b296d0Smrg unsigned char REGPCIReg; 10995b296d0Smrg unsigned char REGNewMode1; 11095b296d0Smrg CARD8 SaveClock1; 11195b296d0Smrg CARD8 SaveClock2; 11295b296d0Smrg CARD8 SaveClock3; 11395b296d0Smrg int MinClock; 11495b296d0Smrg int MaxClock; 11595b296d0Smrg int MUXThreshold; 11695b296d0Smrg int currentClock; 11795b296d0Smrg int MCLK; 11895b296d0Smrg int dwords; 11995b296d0Smrg int h; 12095b296d0Smrg int x; 12195b296d0Smrg int w; 12295b296d0Smrg int y; 12395b296d0Smrg int lcdMode; 12495b296d0Smrg Bool lcdActive; 12595b296d0Smrg Bool doInit; 12695b296d0Smrg#ifdef READOUT 12795b296d0Smrg Bool DontSetClock; 12895b296d0Smrg#endif 12995b296d0Smrg TRIDENTRegRec SavedReg; 13095b296d0Smrg TRIDENTRegRec ModeReg; 13195b296d0Smrg I2CBusPtr DDC; 13295b296d0Smrg CARD16 EngineOperation; 13395b296d0Smrg CARD32 PatternLocation; 13495b296d0Smrg CARD32 BltScanDirection; 13595b296d0Smrg CARD32 DrawFlag; 13695b296d0Smrg CARD16 LinePattern; 13795b296d0Smrg RamDacRecPtr RamDacRec; 13895b296d0Smrg int CursorOffset; 13995b296d0Smrg xf86CursorInfoPtr CursorInfoRec; 14095b296d0Smrg xf86Int10InfoPtr Int10; 14195b296d0Smrg vbeInfoPtr pVbe; 14295b296d0Smrg#ifdef VBE_INFO 14395b296d0Smrg vbeModeInfoPtr vbeModes; 14495b296d0Smrg#endif 14595b296d0Smrg XAAInfoRecPtr AccelInfoRec; 14695b296d0Smrg CloseScreenProcPtr CloseScreen; 14795b296d0Smrg ScreenBlockHandlerProcPtr BlockHandler; 14895b296d0Smrg int panelWidth; 14995b296d0Smrg int panelHeight; 15095b296d0Smrg unsigned int (*ddc1Read)(ScrnInfoPtr); 15195b296d0Smrg CARD8* XAAScanlineColorExpandBuffers[2]; 15295b296d0Smrg CARD8* XAAImageScanlineBuffer[1]; 15395b296d0Smrg void (*InitializeAccelerator)(ScrnInfoPtr); 15495b296d0Smrg void (*VideoTimerCallback)(ScrnInfoPtr, Time); 15595b296d0Smrg XF86VideoAdaptorPtr adaptor; 15695b296d0Smrg int videoKey; 15795b296d0Smrg int hsync; 15895b296d0Smrg int hsync_rskew; 15995b296d0Smrg int vsync; 16095b296d0Smrg int vsync_bskew; 16195b296d0Smrg CARD32 videoFlags; 16295b296d0Smrg int keyOffset; 16395b296d0Smrg int OverrideHsync; 16495b296d0Smrg int OverrideVsync; 16595b296d0Smrg int OverrideBskew; 16695b296d0Smrg int OverrideRskew; 16795b296d0Smrg OptionInfoPtr Options; 16895b296d0Smrg Bool shadowNew; 16995b296d0Smrg int displaySize; 17095b296d0Smrg int dspOverride; 17195b296d0Smrg Bool GammaBrightnessOn; 17295b296d0Smrg int brightness; 17395b296d0Smrg double gamma; 17495b296d0Smrg int FPDelay; /* just for debugging - will go away */ 17595b296d0Smrg int TVChipset; /* 0: None 1: VT1621 2: CH7005C*/ 17695b296d0Smrg int TVSignalMode; /* 0: NTSC 1: PAL */ 17795b296d0Smrg Bool TVRegSet; /* 0: User not customer TV Reg, 1: User customer TV Reg */ 17895b296d0Smrg unsigned char TVRegUserSet[2][128]; /*[0][128] for Reg Index, [1][128] for Reg Value */ 17995b296d0Smrg unsigned char DefaultTVDependVGASetting[VGA_REGNUM_ABOUT_TV+0x62]; /* VGA_REGNUM_ABOUT_TV: VGA Reg, 0x62: TV Reg */ 18095b296d0Smrg} TRIDENTRec, *TRIDENTPtr; 18195b296d0Smrg 18295b296d0Smrgtypedef struct { 18395b296d0Smrg CARD8 mode; 18495b296d0Smrg int display_x; 18595b296d0Smrg int display_y; 18695b296d0Smrg int clock; 18795b296d0Smrg int shadow_0; 18895b296d0Smrg int shadow_3; 18995b296d0Smrg int shadow_4; 19095b296d0Smrg int shadow_5; 19195b296d0Smrg int shadow_6; 19295b296d0Smrg int shadow_7; 19395b296d0Smrg int shadow_10; 19495b296d0Smrg int shadow_11; 19595b296d0Smrg int shadow_16; 19695b296d0Smrg int shadow_HiOrd; 19795b296d0Smrg} tridentLCD; 19895b296d0Smrg 19995b296d0Smrg#define LCD_ACTIVE 0x01 20095b296d0Smrg#define CRT_ACTIVE 0x02 20195b296d0Smrg 20295b296d0Smrgextern tridentLCD LCD[]; 20395b296d0Smrg 20495b296d0Smrgtypedef struct { 20595b296d0Smrg int x_res; 20695b296d0Smrg int y_res; 20795b296d0Smrg int mode; 20895b296d0Smrg} biosMode; 20995b296d0Smrg 21095b296d0Smrgtypedef struct { 21195b296d0Smrg int x_res; 21295b296d0Smrg int y_res; 21395b296d0Smrg CARD8 GR5a; 21495b296d0Smrg CARD8 GR5c; 21595b296d0Smrg} newModes; 21695b296d0Smrg 21795b296d0Smrg/* Prototypes */ 21895b296d0Smrg 21995b296d0SmrgBool TRIDENTClockSelect(ScrnInfoPtr pScrn, int no); 22095b296d0SmrgBool TRIDENTSwitchMode(int scrnIndex, DisplayModePtr mode, int flags); 22195b296d0Smrgvoid TRIDENTAdjustFrame(int scrnIndex, int x, int y, int flags); 22295b296d0SmrgBool TRIDENTDGAInit(ScreenPtr pScreen); 22395b296d0SmrgBool TRIDENTI2CInit(ScreenPtr pScreen); 22495b296d0Smrgvoid TRIDENTInitVideo(ScreenPtr pScreen); 22595b296d0Smrgvoid TRIDENTResetVideo(ScrnInfoPtr pScrn); 22695b296d0Smrgunsigned int Tridentddc1Read(ScrnInfoPtr pScrn); 22795b296d0Smrgvoid TVGARestore(ScrnInfoPtr pScrn, TRIDENTRegPtr tridentReg); 22895b296d0Smrgvoid TVGASave(ScrnInfoPtr pScrn, TRIDENTRegPtr tridentReg); 22995b296d0SmrgBool TVGAInit(ScrnInfoPtr pScrn, DisplayModePtr mode); 23095b296d0Smrgvoid TridentRestore(ScrnInfoPtr pScrn, TRIDENTRegPtr tridentReg); 23195b296d0Smrgvoid TridentSave(ScrnInfoPtr pScrn, TRIDENTRegPtr tridentReg); 23295b296d0SmrgBool TridentInit(ScrnInfoPtr pScrn, DisplayModePtr mode); 23395b296d0SmrgBool TridentAccelInit(ScreenPtr pScreen); 23495b296d0SmrgBool XPAccelInit(ScreenPtr pScreen); 23595b296d0SmrgBool XP4XaaInit(ScreenPtr pScreen); 23695b296d0SmrgBool XP4ExaInit(ScreenPtr pScreen); 23795b296d0SmrgBool ImageAccelInit(ScreenPtr pScreen); 23895b296d0SmrgBool BladeXaaInit(ScreenPtr pScreen); 23995b296d0SmrgBool BladeExaInit(ScreenPtr pScreen); 24095b296d0SmrgBool TridentHWCursorInit(ScreenPtr pScreen); 24195b296d0Smrgint TridentFindMode(int xres, int yres, int depth); 24295b296d0Smrgvoid TGUISetClock(ScrnInfoPtr pScrn, int clock, unsigned char *a, unsigned char *b); 24395b296d0Smrgvoid TGUISetMCLK(ScrnInfoPtr pScrn, int clock, unsigned char *a, unsigned char *b); 24495b296d0Smrgvoid tridentSetModeBIOS(ScrnInfoPtr pScrn, DisplayModePtr mode); 24595b296d0Smrgvoid TridentOutIndReg(ScrnInfoPtr pScrn, 24695b296d0Smrg CARD32 reg, unsigned char mask, unsigned char data); 24795b296d0Smrgunsigned char TridentInIndReg(ScrnInfoPtr pScrn, CARD32 reg); 24895b296d0Smrgvoid TridentWriteAddress(ScrnInfoPtr pScrn, CARD32 index); 24995b296d0Smrgvoid TridentReadAddress(ScrnInfoPtr pScrn, CARD32 index); 25095b296d0Smrgvoid TridentWriteData(ScrnInfoPtr pScrn, unsigned char data); 25195b296d0Smrgunsigned char TridentReadData(ScrnInfoPtr pScrn); 25295b296d0Smrgvoid TridentLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indicies, LOCO *colors, VisualPtr pVisual); 25395b296d0Smrgvoid TridentSetOverscan(ScrnInfoPtr pScrn, int overscan); 25495b296d0Smrgint TGUISetRead(ScreenPtr pScreen, int bank); 25595b296d0Smrgint TGUISetWrite(ScreenPtr pScreen, int bank); 25695b296d0Smrgint TGUISetReadWrite(ScreenPtr pScreen, int bank); 25795b296d0Smrgint TVGA8900SetRead(ScreenPtr pScreen, int bank); 25895b296d0Smrgint TVGA8900SetWrite(ScreenPtr pScreen, int bank); 25995b296d0Smrgint TVGA8900SetReadWrite(ScreenPtr pScreen, int bank); 26095b296d0Smrgvoid TridentFindClock(ScrnInfoPtr pScrn, int clock); 26195b296d0Smrgfloat CalculateMCLK(ScrnInfoPtr pScrn); 26295b296d0Smrgvoid TRIDENTRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 26395b296d0Smrgvoid TRIDENTShadowUpdate (ScreenPtr pScreen, shadowBufPtr pBuf); 26495b296d0Smrgvoid TRIDENTPointerMoved(int index, int x, int y); 26595b296d0Smrgvoid TRIDENTRefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 26695b296d0Smrgvoid TRIDENTRefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 26795b296d0Smrgvoid TRIDENTRefreshArea24(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 26895b296d0Smrgvoid TRIDENTRefreshArea32(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 26995b296d0Smrg 27095b296d0Smrgvoid VIA_TVInit(ScrnInfoPtr pScrn); 27195b296d0Smrgvoid VIA_SaveTVDepentVGAReg(ScrnInfoPtr pScrn); 27295b296d0Smrgvoid VIA_RestoreTVDependVGAReg(ScrnInfoPtr pScrn); 27395b296d0Smrgvoid VIA_DumpReg(ScrnInfoPtr pScrn); 27495b296d0Smrg 27595b296d0Smrg/* 27695b296d0Smrg * Trident Chipset Definitions 27795b296d0Smrg */ 27895b296d0Smrg 27995b296d0Smrg/* Supported chipsets */ 28095b296d0Smrgtypedef enum { 28195b296d0Smrg TVGA8200LX, 28295b296d0Smrg TVGA8800BR, 28395b296d0Smrg TVGA8800CS, 28495b296d0Smrg TVGA8900B, 28595b296d0Smrg TVGA8900C, 28695b296d0Smrg TVGA8900CL, 28795b296d0Smrg TVGA8900D, 28895b296d0Smrg TVGA9000, 28995b296d0Smrg TVGA9000i, 29095b296d0Smrg TVGA9100B, 29195b296d0Smrg TVGA9200CXr, 29295b296d0Smrg TGUI9400CXi, 29395b296d0Smrg TGUI9420DGi, 29495b296d0Smrg TGUI9430DGi, 29595b296d0Smrg TGUI9440AGi, 29695b296d0Smrg CYBER9320, 29795b296d0Smrg TGUI9660, 29895b296d0Smrg TGUI9680, 29995b296d0Smrg PROVIDIA9682, 30095b296d0Smrg CYBER9382, 30195b296d0Smrg CYBER9385, 30295b296d0Smrg PROVIDIA9685, 30395b296d0Smrg CYBER9388, 30495b296d0Smrg CYBER9397, 30595b296d0Smrg CYBER9397DVD, 30695b296d0Smrg CYBER9520, 30795b296d0Smrg CYBER9525DVD, 30895b296d0Smrg IMAGE975, 30995b296d0Smrg IMAGE985, 31095b296d0Smrg BLADE3D, 31195b296d0Smrg CYBERBLADEI7, 31295b296d0Smrg CYBERBLADEI7D, 31395b296d0Smrg CYBERBLADEI1, 31495b296d0Smrg CYBERBLADEI1D, 31595b296d0Smrg CYBERBLADEAI1, 31695b296d0Smrg CYBERBLADEAI1D, 31795b296d0Smrg CYBERBLADEE4, 31895b296d0Smrg BLADEXP, 31995b296d0Smrg CYBERBLADEXPAI1, 32095b296d0Smrg CYBERBLADEXP4, 32195b296d0Smrg XP5 32295b296d0Smrg} TRIDENTType; 32395b296d0Smrg 32495b296d0Smrg#define UseMMIO (pTrident->NoMMIO == FALSE) 32595b296d0Smrg 32695b296d0Smrg#define IsPciCard (pTrident->pEnt->location.type == BUS_PCI) 32795b296d0Smrg 32895b296d0Smrg#define IsPrimaryCard ((xf86IsPrimaryPci(pTrident->PciInfo)) || \ 32995b296d0Smrg (xf86IsPrimaryIsa())) 33095b296d0Smrg 33195b296d0Smrg#define HAS_DST_TRANS ((pTrident->Chipset == PROVIDIA9682) || \ 33295b296d0Smrg (pTrident->Chipset == PROVIDIA9685) || \ 33395b296d0Smrg (pTrident->Chipset == BLADEXP) || \ 33495b296d0Smrg (pTrident->Chipset == CYBERBLADEXPAI1)) 33595b296d0Smrg 33695b296d0Smrg#define Is3Dchip ((pTrident->Chipset == CYBER9397) || \ 33795b296d0Smrg (pTrident->Chipset == CYBER9397DVD) || \ 33895b296d0Smrg (pTrident->Chipset == CYBER9520) || \ 33995b296d0Smrg (pTrident->Chipset == CYBER9525DVD) || \ 34095b296d0Smrg (pTrident->Chipset == CYBERBLADEE4) || \ 34195b296d0Smrg (pTrident->Chipset == IMAGE975) || \ 34295b296d0Smrg (pTrident->Chipset == IMAGE985) || \ 34395b296d0Smrg (pTrident->Chipset == CYBERBLADEI7) || \ 34495b296d0Smrg (pTrident->Chipset == CYBERBLADEI7D) || \ 34595b296d0Smrg (pTrident->Chipset == CYBERBLADEI1) || \ 34695b296d0Smrg (pTrident->Chipset == CYBERBLADEI1D) || \ 34795b296d0Smrg (pTrident->Chipset == CYBERBLADEAI1) || \ 34895b296d0Smrg (pTrident->Chipset == CYBERBLADEAI1D) || \ 34995b296d0Smrg (pTrident->Chipset == BLADE3D) || \ 35095b296d0Smrg (pTrident->Chipset == CYBERBLADEXPAI1) || \ 35195b296d0Smrg (pTrident->Chipset == CYBERBLADEXP4) || \ 35295b296d0Smrg (pTrident->Chipset == XP5) || \ 35395b296d0Smrg (pTrident->Chipset == BLADEXP)) 35495b296d0Smrg 35595b296d0Smrg/* 35695b296d0Smrg * Trident DAC's 35795b296d0Smrg */ 35895b296d0Smrg 35995b296d0Smrg#define TKD8001 0 36095b296d0Smrg#define TGUIDAC 1 36195b296d0Smrg 36295b296d0Smrg/* 36395b296d0Smrg * Video Flags 36495b296d0Smrg */ 36595b296d0Smrg 36695b296d0Smrg#define VID_ZOOM_INV 0x1 36795b296d0Smrg#define VID_ZOOM_MINI 0x2 36895b296d0Smrg#define VID_OFF_SHIFT_4 0x4 36995b296d0Smrg#define VID_ZOOM_NOMINI 0x8 37095b296d0Smrg#define VID_DOUBLE_LINEBUFFER_FOR_WIDE_SRC 0x10 37195b296d0Smrg#endif /* _TRIDENT_H_ */ 37295b296d0Smrg 373