2
Voodoo Banshee driver version 1.0.2
15
#include "xf86PciInfo.h"
28
#define _XF86DRI_SERVER_
30
#include "GL/glxint.h"
32
#include "tdfx_dripriv.h"
35
#define TDFX_VERSION 4000
36
#define TDFX_NAME "TDFX"
37
#define TDFX_DRIVER_NAME "tdfx"
38
#define TDFX_MAJOR_VERSION PACKAGE_VERSION_MAJOR
39
#define TDFX_MINOR_VERSION PACKAGE_VERSION_MINOR
40
#define TDFX_PATCHLEVEL PACKAGE_VERSION_PATCHLEVEL
42
/* Macros to aid source compatibilty between pci-rework and "classic" builds.
44
#ifdef XSERVER_LIBPCIACCESS
45
#include <pciaccess.h>
47
#define DEVICE_ID(p) (p)->device_id
49
#define PCI_READ_LONG(value, offset, card_index) \
50
pci_device_cfg_read_u32(pTDFX->PciInfo[(card_index)], & (value), (offset))
52
#define PCI_WRITE_LONG(value, offset, card_index) \
53
pci_device_cfg_write_u32(pTDFX->PciInfo[(card_index)], (value), (offset))
55
#define PCI_IO_BASE(p, region) \
56
(p)->regions[region].base_addr
58
#define PCI_MEM_BASE(p, region) \
59
(p)->regions[region].base_addr
61
#define DEVICE_ID(p) (p)->chipType
63
#define PCI_READ_LONG(value, offset, card_index) \
64
(value) = pciReadLong(pTDFX->PciTag[(card_index)], (offset))
66
#define PCI_WRITE_LONG(value, offset, card_index) \
67
pciWriteLong(pTDFX->PciTag[(card_index)], (offset), (value))
69
#define PCI_IO_BASE(p, region) \
72
#define PCI_MEM_BASE(p, region) \
77
typedef struct _TDFXRec *TDFXPtr;
79
#include "tdfx_priv.h"
80
extern void TDFXSwapContextFifo(ScreenPtr pScreen);
81
extern void TDFXLostContext(ScreenPtr pScreen);
82
extern Bool TDFXSetupSLI(ScrnInfoPtr pScrn, Bool sliEnable, int aaSamples);
83
extern Bool TDFXDisableSLI(TDFXPtr pTDFX);
86
extern void FillPrivateDRI(TDFXPtr pTDFX, TDFXDRIPtr pTDFXDRI);
90
/* These are not normally turned on. They are only included for debugging. */
93
#define TDFX_DEBUG_CMDS
100
#define TDFXTRACE ErrorF
102
#define TDFXTRACE if(0) ErrorF
106
#define TDFXTRACEACCEL ErrorF
108
#define TDFXTRACEACCEL if(0) ErrorF
112
#define TDFXTRACECURS ErrorF
114
#define TDFXTRACECURS if(0) ErrorF
118
#define TDFXTRACEREG ErrorF
120
#define TDFXTRACEREG if(0) ErrorF
126
#include "xf86fbman.h"
127
#include "xf86Cursor.h"
128
#include "compat-api.h"
130
typedef void (*TDFXWriteIndexedByteFunc)(TDFXPtr pTDFX, int addr,
131
char index, char value);
132
typedef char (*TDFXReadIndexedByteFunc)(TDFXPtr pTDFX, int addr,
134
typedef void (*TDFXWriteWordFunc)(TDFXPtr pTDFX, int addr, int value);
135
typedef int (*TDFXReadWordFunc)(TDFXPtr pTDFX, int addr);
136
typedef void (*TDFXWriteChipIndexedByteFunc)(TDFXPtr pTDFX, int chip,
137
int addr, char index, char value);
138
typedef char (*TDFXReadChipIndexedByteFunc)(TDFXPtr pTDFX, int chip,
139
int addr, char index);
140
typedef void (*TDFXWriteChipWordFunc)(TDFXPtr pTDFX, int chip,
141
int addr, int value);
142
typedef int (*TDFXReadChipWordFunc)(TDFXPtr pTDFX, int chip,
144
typedef void (*TDFXSyncFunc)(ScrnInfoPtr pScrn);
145
typedef void (*TDFXBufferFunc)(TDFXPtr pTDFX, int which);
146
#if X_BYTE_ORDER == X_BIG_ENDIAN
147
typedef void (*TDFXWriteFifoFunc)(TDFXPtr pTDFX, int val);
154
unsigned int dacmode;
155
unsigned int vgainit0;
156
unsigned int vgainit1;
157
unsigned int miscinit0;
158
unsigned int miscinit1;
159
unsigned int screensize;
161
unsigned int cursloc;
162
unsigned int startaddr;
163
unsigned int clip0min;
164
unsigned int clip0max;
165
unsigned int clip1min;
166
unsigned int clip1max;
167
unsigned int srcbaseaddr;
168
unsigned int dstbaseaddr;
169
unsigned char ExtVga[2];
170
unsigned int dactable[512];
171
} TDFXRegRec, *TDFXRegPtr;
173
typedef struct TextureData_t {
176
struct TextureData_t *next;
181
#ifdef XSERVER_LIBPCIACCESS
192
typedef struct _TDFXRec {
193
#ifdef XSERVER_LIBPCIACCESS
194
enum tdfx_chips match_id;
195
void *MMIOBase[MAXCHIPS];
198
unsigned char *MMIOBase[MAXCHIPS];
199
unsigned char *FbBase;
200
unsigned char *myFbBase;
202
unsigned long PIOBase[MAXCHIPS];
210
#ifdef XSERVER_LIBPCIACCESS
211
struct pci_device *PciInfo[MAXCHIPS];
215
unsigned long LinearAddr[MAXCHIPS];
216
unsigned long MMIOAddr[MAXCHIPS];
219
#ifndef XSERVER_PCIACCESS
220
PCITAG PciTag[MAXCHIPS];
233
XAAInfoRecPtr AccelInfoRec;
235
xf86CursorInfoPtr CursorInfoRec;
236
CloseScreenProcPtr CloseScreen;
242
int DGAViewportStatus;
249
TDFXWriteIndexedByteFunc writeControl;
250
TDFXReadIndexedByteFunc readControl;
251
TDFXWriteWordFunc writeLong;
252
TDFXReadWordFunc readLong;
253
TDFXWriteChipWordFunc writeChipLong;
254
TDFXReadChipWordFunc readChipLong;
256
#if X_BYTE_ORDER == X_BIG_ENDIAN
257
TDFXWriteFifoFunc writeFifo;
261
unsigned char *scanlineColorExpandBuffers[2];
264
Bool directRenderingEnabled;
267
int numVisualConfigs;
268
__GLXvisualConfig* pVisualConfigs;
269
TDFXConfigPrivPtr pVisualConfigsPriv;
270
TDFXRegRec DRContextRegs;
272
/* State for video */
273
FBAreaPtr offscreenYUVBuf;
274
int offscreenYUVBufWidth;
275
int offscreenYUVBufHeight;
277
/* This is a small register shadow. I'm only shadowing
280
* If a real register shadow is ever needed we should probably
281
* shadow everything and make it happen automatically for every write. */
282
INT32 sst2DSrcFmtShadow;
283
INT32 sst2DDstFmtShadow;
284
int pixmapCacheLinesMin;
285
int pixmapCacheLinesMax;
286
FBAreaPtr reservedArea;
289
void (*VideoTimerCallback)(ScrnInfoPtr, Time);
290
FBLinearPtr overlayBuffer;
291
FBLinearPtr overlayBuffer2; /* for double-buffering */
292
int whichOverlayBuffer; /* flip-flop */
293
FBAreaPtr textureBuffer;
295
XF86VideoAdaptorPtr overlayAdaptor;
296
XF86VideoAdaptorPtr textureAdaptor;
297
ScreenBlockHandlerProcPtr BlockHandler;
298
OptionInfoPtr Options;
300
ScreenWakeupHandlerProcPtr coreWakeupHandler;
301
ScreenBlockHandlerProcPtr coreBlockHandler;
314
} TDFXPortPrivRec, *TDFXPortPrivPtr;
323
#define TDFXPTR(p) ((TDFXPtr)((p)->driverPrivate))
325
#define DRAW_STATE_CLIPPING 0x1
326
#define DRAW_STATE_TRANSPARENT 0x2
327
#define DRAW_STATE_CLIP1CHANGED 0x4
333
#define TDFX2XCUTOFF 135000
335
extern Bool TDFXAccelInit(ScreenPtr pScreen);
336
extern Bool TDFXCursorInit(ScreenPtr pScreen);
337
extern void TDFXSync(ScrnInfoPtr pScrn);
338
extern Bool TDFXDRIScreenInit(ScreenPtr pScreen);
339
extern void TDFXDRICloseScreen(ScreenPtr pScreen);
340
extern Bool TDFXDRIFinishScreenInit(ScreenPtr pScreen);
341
extern Bool TDFXDGAInit(ScreenPtr pScreen);
342
extern void TDFXCursorGrabMemory(ScreenPtr pScreen);
343
extern void TDFXSetLFBConfig(TDFXPtr pTDFX);
344
extern void TDFXSendNOPFifo(ScrnInfoPtr pScrn);
346
extern Bool TDFXSwitchMode(SWITCH_MODE_ARGS_DECL);
347
extern void TDFXAdjustFrame(ADJUST_FRAME_ARGS_DECL);
349
extern void TDFXSetPIOAccess(TDFXPtr pTDFX);
350
extern void TDFXSetMMIOAccess(TDFXPtr pTDFX);
351
extern void TDFXWriteLongMMIO(TDFXPtr pTDFX, int addr, int val);
352
extern int TDFXReadLongMMIO(TDFXPtr pTDFX, int addr);
353
extern void TDFXWriteChipLongMMIO(TDFXPtr pTDFX, int chip, int addr, int val);
355
extern void TDFXNeedSync(ScrnInfoPtr pScrn);
356
extern void TDFXCheckSync(ScrnInfoPtr pScrn);
357
extern void TDFXFirstSync(ScrnInfoPtr pScrn);
359
extern void TDFXSetupForScreenToScreenCopy(ScrnInfoPtr pScrn, int xdir,
361
unsigned int planemask,
363
extern void TDFXSubsequentScreenToScreenCopy(ScrnInfoPtr pScrn, int srcX,
364
int srcY, int dstX, int dstY,
366
extern void TDFXSetupForSolidFill(ScrnInfoPtr pScrn, int color, int rop,
367
unsigned int planemask);
368
extern void TDFXSubsequentSolidFillRect(ScrnInfoPtr pScrn, int x, int y,
371
extern void TDFXSelectBuffer(TDFXPtr pTDFX, int which);
373
extern void TDFXInitVideo(ScreenPtr pScreen);
374
extern void TDFXCloseVideo(ScreenPtr pScreen);