tdfx.h revision 02be438a
102be438aSmrg/*
202be438aSmrg   Voodoo Banshee driver version 1.0.2
302be438aSmrg
402be438aSmrg   Author: Daryll Strauss
502be438aSmrg
602be438aSmrg   Copyright: 1998,1999
702be438aSmrg*/
802be438aSmrg/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx.h,v 1.26 2002/01/25 21:56:11 tsi Exp $ */
902be438aSmrg
1002be438aSmrg#ifndef _TDFX_H_
1102be438aSmrg#define _TDFX_H_
1202be438aSmrg
1302be438aSmrg#include <string.h>
1402be438aSmrg#include <stdio.h>
1502be438aSmrg
1602be438aSmrg#include "xf86PciInfo.h"
1702be438aSmrg#include "xf86Pci.h"
1802be438aSmrg#include "xf86xv.h"
1902be438aSmrg#include "tdfxdefs.h"
2002be438aSmrg
2102be438aSmrg#ifdef XF86DRI
2202be438aSmrg#include "xf86drm.h"
2302be438aSmrg#include "sarea.h"
2402be438aSmrg#define _XF86DRI_SERVER_
2502be438aSmrg#include "dri.h"
2602be438aSmrg#include "GL/glxint.h"
2702be438aSmrg#include "tdfx_dri.h"
2802be438aSmrg#include "tdfx_dripriv.h"
2902be438aSmrg#endif
3002be438aSmrg
3102be438aSmrg#define TDFX_VERSION 4000
3202be438aSmrg#define TDFX_NAME "TDFX"
3302be438aSmrg#define TDFX_DRIVER_NAME "tdfx"
3402be438aSmrg#define TDFX_MAJOR_VERSION 1
3502be438aSmrg#define TDFX_MINOR_VERSION 3
3602be438aSmrg#define TDFX_PATCHLEVEL 0
3702be438aSmrg
3802be438aSmrgstruct _TDFXRec;
3902be438aSmrgtypedef struct _TDFXRec *TDFXPtr;
4002be438aSmrg
4102be438aSmrg#include "tdfx_priv.h"
4202be438aSmrgextern void TDFXSwapContextFifo(ScreenPtr pScreen);
4302be438aSmrgextern void TDFXLostContext(ScreenPtr pScreen);
4402be438aSmrgextern Bool TDFXSetupSLI(ScrnInfoPtr pScrn, Bool sliEnable, int aaSamples);
4502be438aSmrgextern Bool TDFXDisableSLI(TDFXPtr pTDFX);
4602be438aSmrg
4702be438aSmrg#ifdef XF86DRI
4802be438aSmrgextern void FillPrivateDRI(TDFXPtr pTDFX, TDFXDRIPtr pTDFXDRI);
4902be438aSmrg#endif
5002be438aSmrg
5102be438aSmrg#if 0
5202be438aSmrg/* These are not normally turned on. They are only included for debugging. */
5302be438aSmrg#define TRACE 1
5402be438aSmrg#define TRACEACCEL 1
5502be438aSmrg#define TDFX_DEBUG_CMDS
5602be438aSmrg#define TRACECURS 1
5702be438aSmrg#define REGDEBUG 1
5802be438aSmrg#define TRACEREG
5902be438aSmrg#endif
6002be438aSmrg
6102be438aSmrg#ifdef TRACE
6202be438aSmrg#define TDFXTRACE ErrorF
6302be438aSmrg#else
6402be438aSmrg#define TDFXTRACE if(0) ErrorF
6502be438aSmrg#endif
6602be438aSmrg
6702be438aSmrg#ifdef TRACEACCEL
6802be438aSmrg#define TDFXTRACEACCEL ErrorF
6902be438aSmrg#else
7002be438aSmrg#define TDFXTRACEACCEL if(0) ErrorF
7102be438aSmrg#endif
7202be438aSmrg
7302be438aSmrg#ifdef TRACECURS
7402be438aSmrg#define TDFXTRACECURS ErrorF
7502be438aSmrg#else
7602be438aSmrg#define TDFXTRACECURS if(0) ErrorF
7702be438aSmrg#endif
7802be438aSmrg
7902be438aSmrg#ifdef TRACEREG
8002be438aSmrg#define TDFXTRACEREG ErrorF
8102be438aSmrg#else
8202be438aSmrg#define TDFXTRACEREG if(0) ErrorF
8302be438aSmrg#endif
8402be438aSmrg
8502be438aSmrg#include "xaa.h"
8602be438aSmrg#include "xf86Cursor.h"
8702be438aSmrg
8802be438aSmrgtypedef void (*TDFXWriteIndexedByteFunc)(TDFXPtr pTDFX, int addr,
8902be438aSmrg					 char index, char value);
9002be438aSmrgtypedef char (*TDFXReadIndexedByteFunc)(TDFXPtr pTDFX, int addr,
9102be438aSmrg					char index);
9202be438aSmrgtypedef void (*TDFXWriteWordFunc)(TDFXPtr pTDFX, int addr, int value);
9302be438aSmrgtypedef int (*TDFXReadWordFunc)(TDFXPtr pTDFX, int addr);
9402be438aSmrgtypedef void (*TDFXWriteChipIndexedByteFunc)(TDFXPtr pTDFX, int chip,
9502be438aSmrg					     int addr, char index, char value);
9602be438aSmrgtypedef char (*TDFXReadChipIndexedByteFunc)(TDFXPtr pTDFX, int chip,
9702be438aSmrg					    int addr, char index);
9802be438aSmrgtypedef void (*TDFXWriteChipWordFunc)(TDFXPtr pTDFX, int chip,
9902be438aSmrg				      int addr, int value);
10002be438aSmrgtypedef int (*TDFXReadChipWordFunc)(TDFXPtr pTDFX, int chip,
10102be438aSmrg				    int addr);
10202be438aSmrgtypedef void (*TDFXSyncFunc)(ScrnInfoPtr pScrn);
10302be438aSmrgtypedef void (*TDFXBufferFunc)(TDFXPtr pTDFX, int which);
10402be438aSmrg#if X_BYTE_ORDER == X_BIG_ENDIAN
10502be438aSmrgtypedef void (*TDFXWriteFifoFunc)(TDFXPtr pTDFX, int val);
10602be438aSmrg#endif
10702be438aSmrg
10802be438aSmrg
10902be438aSmrgtypedef struct {
11002be438aSmrg  unsigned int vidcfg;
11102be438aSmrg  unsigned int vidpll;
11202be438aSmrg  unsigned int dacmode;
11302be438aSmrg  unsigned int vgainit0;
11402be438aSmrg  unsigned int vgainit1;
11502be438aSmrg  unsigned int miscinit0;
11602be438aSmrg  unsigned int miscinit1;
11702be438aSmrg  unsigned int screensize;
11802be438aSmrg  unsigned int stride;
11902be438aSmrg  unsigned int cursloc;
12002be438aSmrg  unsigned int startaddr;
12102be438aSmrg  unsigned int clip0min;
12202be438aSmrg  unsigned int clip0max;
12302be438aSmrg  unsigned int clip1min;
12402be438aSmrg  unsigned int clip1max;
12502be438aSmrg  unsigned int srcbaseaddr;
12602be438aSmrg  unsigned int dstbaseaddr;
12702be438aSmrg  unsigned char ExtVga[2];
12802be438aSmrg  unsigned int dactable[512];
12902be438aSmrg} TDFXRegRec, *TDFXRegPtr;
13002be438aSmrg
13102be438aSmrgtypedef struct TextureData_t {
13202be438aSmrg  int contextid;
13302be438aSmrg  void *data;
13402be438aSmrg  struct TextureData_t *next;
13502be438aSmrg} TextureData;
13602be438aSmrg
13702be438aSmrg#define MAXCHIPS 4
13802be438aSmrg
13902be438aSmrgtypedef struct _TDFXRec {
14002be438aSmrg  unsigned char *MMIOBase[MAXCHIPS];
14102be438aSmrg  unsigned char *FbBase;
14202be438aSmrg  unsigned char *myFbBase;
14302be438aSmrg  IOADDRESS PIOBase[MAXCHIPS];
14402be438aSmrg  long FbMapSize;
14502be438aSmrg  int pixelFormat;
14602be438aSmrg  int stride;
14702be438aSmrg  int cpp;
14802be438aSmrg  int maxClip;
14902be438aSmrg  int MaxClock;
15002be438aSmrg  int ChipType;
15102be438aSmrg  pciVideoPtr PciInfo;
15202be438aSmrg  unsigned long LinearAddr[MAXCHIPS];
15302be438aSmrg  unsigned long MMIOAddr[MAXCHIPS];
15402be438aSmrg  EntityInfoPtr pEnt;
15502be438aSmrg  int numChips;
15602be438aSmrg  PCITAG PciTag[MAXCHIPS];
15702be438aSmrg  Bool Primary;
15802be438aSmrg  int HasSGRAM;
15902be438aSmrg  int PciCnt;
16002be438aSmrg  int PrevDrawState;
16102be438aSmrg  int DrawState;
16202be438aSmrg  int Cmd;
16302be438aSmrg  int DashedLineSize;
16402be438aSmrg  BoxRec prevBlitDest;
16502be438aSmrg  TDFXRegRec SavedReg;
16602be438aSmrg  TDFXRegRec ModeReg;
16702be438aSmrg  XAAInfoRecPtr AccelInfoRec;
16802be438aSmrg  xf86CursorInfoPtr CursorInfoRec;
16902be438aSmrg  CloseScreenProcPtr CloseScreen;
17002be438aSmrg  Bool usePIO;
17102be438aSmrg  Bool NoAccel;
17202be438aSmrg  DGAModePtr DGAModes;
17302be438aSmrg  Bool DGAactive;
17402be438aSmrg  Bool initDone;
17502be438aSmrg  int DGAViewportStatus;
17602be438aSmrg  int cursorOffset;
17702be438aSmrg  int fbOffset;
17802be438aSmrg  int backOffset;
17902be438aSmrg  int depthOffset;
18002be438aSmrg  int texOffset;
18102be438aSmrg  int texSize;
18202be438aSmrg  TDFXWriteIndexedByteFunc writeControl;
18302be438aSmrg  TDFXReadIndexedByteFunc readControl;
18402be438aSmrg  TDFXWriteWordFunc writeLong;
18502be438aSmrg  TDFXReadWordFunc readLong;
18602be438aSmrg  TDFXWriteChipWordFunc writeChipLong;
18702be438aSmrg  TDFXReadChipWordFunc readChipLong;
18802be438aSmrg  TDFXSyncFunc sync;
18902be438aSmrg#if X_BYTE_ORDER == X_BIG_ENDIAN
19002be438aSmrg  TDFXWriteFifoFunc writeFifo;
19102be438aSmrg#endif
19202be438aSmrg  int syncDone;
19302be438aSmrg  int scanlineWidth;
19402be438aSmrg  unsigned char *scanlineColorExpandBuffers[2];
19502be438aSmrg  PROPDATA
19602be438aSmrg#ifdef XF86DRI
19702be438aSmrg  Bool directRenderingEnabled;
19802be438aSmrg  DRIInfoPtr pDRIInfo;
19902be438aSmrg  int drmSubFD;
20002be438aSmrg  int numVisualConfigs;
20102be438aSmrg  __GLXvisualConfig* pVisualConfigs;
20202be438aSmrg  TDFXConfigPrivPtr pVisualConfigsPriv;
20302be438aSmrg  TDFXRegRec DRContextRegs;
20402be438aSmrg#endif
20502be438aSmrg  /* State for video */
20602be438aSmrg  FBAreaPtr offscreenYUVBuf;
20702be438aSmrg  int offscreenYUVBufWidth;
20802be438aSmrg  int offscreenYUVBufHeight;
20902be438aSmrg
21002be438aSmrg  /* This is a small register shadow.  I'm only shadowing
21102be438aSmrg   *   sst2dDstFmt
21202be438aSmrg   *   sst2dSrcFmt
21302be438aSmrg   * If a real register shadow is ever needed we should probably
21402be438aSmrg   * shadow everything and make it happen automatically for every write. */
21502be438aSmrg  INT32 sst2DSrcFmtShadow;
21602be438aSmrg  INT32 sst2DDstFmtShadow;
21702be438aSmrg  int pixmapCacheLinesMin;
21802be438aSmrg  int pixmapCacheLinesMax;
21902be438aSmrg  FBAreaPtr reservedArea;
22002be438aSmrg  Bool ShowCache;
22102be438aSmrg  int videoKey;
22202be438aSmrg  void (*VideoTimerCallback)(ScrnInfoPtr, Time);
22302be438aSmrg  FBLinearPtr overlayBuffer;
22402be438aSmrg  FBLinearPtr overlayBuffer2;	/* for double-buffering */
22502be438aSmrg  int whichOverlayBuffer;	/* flip-flop */
22602be438aSmrg  FBAreaPtr textureBuffer;
22702be438aSmrg  Bool TextureXvideo;
22802be438aSmrg  XF86VideoAdaptorPtr overlayAdaptor;
22902be438aSmrg  XF86VideoAdaptorPtr textureAdaptor;
23002be438aSmrg  ScreenBlockHandlerProcPtr BlockHandler;
23102be438aSmrg  OptionInfoPtr Options;
23202be438aSmrg
23302be438aSmrg  ScreenWakeupHandlerProcPtr coreWakeupHandler;
23402be438aSmrg  ScreenBlockHandlerProcPtr coreBlockHandler;
23502be438aSmrg
23602be438aSmrg} TDFXRec;
23702be438aSmrg
23802be438aSmrgtypedef struct {
23902be438aSmrg  RegionRec	clip;
24002be438aSmrg  CARD32	colorKey;
24102be438aSmrg  int		filterQuality;
24202be438aSmrg  CARD32	videoStatus;
24302be438aSmrg  Time		offTime;
24402be438aSmrg  Time		freeTime;
24502be438aSmrg} TDFXPortPrivRec, *TDFXPortPrivPtr;
24602be438aSmrg
24702be438aSmrgtypedef struct {
24802be438aSmrg  PROPSAREADATA
24902be438aSmrg  int fifoOwner;
25002be438aSmrg  int CtxOwner;
25102be438aSmrg  int TexOwner;
25202be438aSmrg} TDFXSAREAPriv;
25302be438aSmrg
25402be438aSmrg#define TDFXPTR(p) ((TDFXPtr)((p)->driverPrivate))
25502be438aSmrg
25602be438aSmrg#define DRAW_STATE_CLIPPING 0x1
25702be438aSmrg#define DRAW_STATE_TRANSPARENT 0x2
25802be438aSmrg#define DRAW_STATE_CLIP1CHANGED 0x4
25902be438aSmrg
26002be438aSmrg#define TDFX_FRONT 0
26102be438aSmrg#define TDFX_BACK 1
26202be438aSmrg#define TDFX_DEPTH 2
26302be438aSmrg
26402be438aSmrg#define TDFX2XCUTOFF 135000
26502be438aSmrg
26602be438aSmrgextern Bool TDFXAccelInit(ScreenPtr pScreen);
26702be438aSmrgextern Bool TDFXCursorInit(ScreenPtr pScreen);
26802be438aSmrgextern void TDFXSync(ScrnInfoPtr pScrn);
26902be438aSmrgextern Bool TDFXDRIScreenInit(ScreenPtr pScreen);
27002be438aSmrgextern void TDFXDRICloseScreen(ScreenPtr pScreen);
27102be438aSmrgextern Bool TDFXDRIFinishScreenInit(ScreenPtr pScreen);
27202be438aSmrgextern Bool TDFXDGAInit(ScreenPtr pScreen);
27302be438aSmrgextern void TDFXCursorGrabMemory(ScreenPtr pScreen);
27402be438aSmrgextern void TDFXSetLFBConfig(TDFXPtr pTDFX);
27502be438aSmrgextern void TDFXSendNOPFifo(ScrnInfoPtr pScrn);
27602be438aSmrg
27702be438aSmrgextern Bool TDFXSwitchMode(int scrnIndex, DisplayModePtr mode, int flags);
27802be438aSmrgextern void TDFXAdjustFrame(int scrnIndex, int x, int y, int flags);
27902be438aSmrg
28002be438aSmrgextern void TDFXSetPIOAccess(TDFXPtr pTDFX);
28102be438aSmrgextern void TDFXSetMMIOAccess(TDFXPtr pTDFX);
28202be438aSmrgextern void TDFXWriteLongMMIO(TDFXPtr pTDFX, int addr, int val);
28302be438aSmrgextern int TDFXReadLongMMIO(TDFXPtr pTDFX, int addr);
28402be438aSmrgextern void TDFXWriteChipLongMMIO(TDFXPtr pTDFX, int chip, int addr, int val);
28502be438aSmrg
28602be438aSmrgextern void TDFXNeedSync(ScrnInfoPtr pScrn);
28702be438aSmrgextern void TDFXCheckSync(ScrnInfoPtr pScrn);
28802be438aSmrgextern void TDFXFirstSync(ScrnInfoPtr pScrn);
28902be438aSmrg
29002be438aSmrgextern void TDFXSetupForScreenToScreenCopy(ScrnInfoPtr pScrn, int xdir,
29102be438aSmrg					   int ydir, int rop,
29202be438aSmrg					   unsigned int planemask,
29302be438aSmrg					   int trans_color);
29402be438aSmrgextern void TDFXSubsequentScreenToScreenCopy(ScrnInfoPtr pScrn, int srcX,
29502be438aSmrg					     int srcY, int dstX, int dstY,
29602be438aSmrg					     int w, int h);
29702be438aSmrgextern void TDFXSetupForSolidFill(ScrnInfoPtr pScrn, int color, int rop,
29802be438aSmrg				  unsigned int planemask);
29902be438aSmrgextern void TDFXSubsequentSolidFillRect(ScrnInfoPtr pScrn, int x, int y,
30002be438aSmrg					int w, int h);
30102be438aSmrg
30202be438aSmrgextern void TDFXSelectBuffer(TDFXPtr pTDFX, int which);
30302be438aSmrg
30402be438aSmrgextern void TDFXInitVideo(ScreenPtr pScreen);
30502be438aSmrgextern void TDFXCloseVideo(ScreenPtr pScreen);
30602be438aSmrg
30702be438aSmrg#endif
308