~ubuntu-branches/ubuntu/precise/xserver-xorg-video-tdfx-lts-quantal/precise-proposed

« back to all changes in this revision

Viewing changes to src/tdfx.h

  • Committer: Package Import Robot
  • Author(s): Maarten Lankhorst
  • Date: 2012-11-30 21:00:30 UTC
  • Revision ID: package-import@ubuntu.com-20121130210030-z6cpk5qrun266ihv
Tags: upstream-1.4.5
ImportĀ upstreamĀ versionĀ 1.4.5

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
   Voodoo Banshee driver version 1.0.2
 
3
 
 
4
   Author: Daryll Strauss
 
5
 
 
6
   Copyright: 1998,1999
 
7
*/
 
8
 
 
9
#ifndef _TDFX_H_
 
10
#define _TDFX_H_
 
11
 
 
12
#include <string.h>
 
13
#include <stdio.h>
 
14
 
 
15
#include "xf86PciInfo.h"
 
16
#include "xf86Pci.h"
 
17
#include "xf86DDC.h"
 
18
#include "xf86xv.h"
 
19
#include "tdfxdefs.h"
 
20
 
 
21
#ifndef XF86DRI
 
22
#undef TDFXDRI
 
23
#endif
 
24
 
 
25
#ifdef TDFXDRI
 
26
#include "xf86drm.h"
 
27
#include "sarea.h"
 
28
#define _XF86DRI_SERVER_
 
29
#include "dri.h"
 
30
#include "GL/glxint.h"
 
31
#include "tdfx_dri.h"
 
32
#include "tdfx_dripriv.h"
 
33
#endif
 
34
 
 
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
 
41
 
 
42
/* Macros to aid source compatibilty between pci-rework and "classic" builds.
 
43
 */
 
44
#ifdef XSERVER_LIBPCIACCESS
 
45
#include <pciaccess.h>
 
46
 
 
47
#define DEVICE_ID(p) (p)->device_id
 
48
 
 
49
#define PCI_READ_LONG(value, offset, card_index) \
 
50
    pci_device_cfg_read_u32(pTDFX->PciInfo[(card_index)], & (value), (offset))
 
51
 
 
52
#define PCI_WRITE_LONG(value, offset, card_index) \
 
53
    pci_device_cfg_write_u32(pTDFX->PciInfo[(card_index)], (value), (offset))
 
54
 
 
55
#define PCI_IO_BASE(p, region) \
 
56
    (p)->regions[region].base_addr
 
57
 
 
58
#define PCI_MEM_BASE(p, region) \
 
59
    (p)->regions[region].base_addr
 
60
#else
 
61
#define DEVICE_ID(p) (p)->chipType
 
62
 
 
63
#define PCI_READ_LONG(value, offset, card_index) \
 
64
    (value) = pciReadLong(pTDFX->PciTag[(card_index)], (offset))
 
65
 
 
66
#define PCI_WRITE_LONG(value, offset, card_index) \
 
67
    pciWriteLong(pTDFX->PciTag[(card_index)], (offset), (value))
 
68
 
 
69
#define PCI_IO_BASE(p, region) \
 
70
    (p)->ioBase[region]
 
71
 
 
72
#define PCI_MEM_BASE(p, region) \
 
73
    (p)->memBase[region]
 
74
#endif
 
75
 
 
76
struct _TDFXRec;
 
77
typedef struct _TDFXRec *TDFXPtr;
 
78
 
 
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);
 
84
 
 
85
#ifdef TDFXDRI
 
86
extern void FillPrivateDRI(TDFXPtr pTDFX, TDFXDRIPtr pTDFXDRI);
 
87
#endif
 
88
 
 
89
#if 0
 
90
/* These are not normally turned on. They are only included for debugging. */
 
91
#define TRACE 1
 
92
#define TRACEACCEL 1
 
93
#define TDFX_DEBUG_CMDS
 
94
#define TRACECURS 1
 
95
#define REGDEBUG 1
 
96
#define TRACEREG
 
97
#endif
 
98
 
 
99
#ifdef TRACE
 
100
#define TDFXTRACE ErrorF
 
101
#else
 
102
#define TDFXTRACE if(0) ErrorF
 
103
#endif
 
104
 
 
105
#ifdef TRACEACCEL
 
106
#define TDFXTRACEACCEL ErrorF
 
107
#else
 
108
#define TDFXTRACEACCEL if(0) ErrorF
 
109
#endif
 
110
 
 
111
#ifdef TRACECURS
 
112
#define TDFXTRACECURS ErrorF
 
113
#else
 
114
#define TDFXTRACECURS if(0) ErrorF
 
115
#endif
 
116
 
 
117
#ifdef TRACEREG
 
118
#define TDFXTRACEREG ErrorF
 
119
#else
 
120
#define TDFXTRACEREG if(0) ErrorF
 
121
#endif
 
122
 
 
123
#ifdef HAVE_XAA_H
 
124
#include "xaa.h"
 
125
#endif
 
126
#include "xf86fbman.h"
 
127
#include "xf86Cursor.h"
 
128
#include "compat-api.h"
 
129
 
 
130
typedef void (*TDFXWriteIndexedByteFunc)(TDFXPtr pTDFX, int addr, 
 
131
                                         char index, char value);
 
132
typedef char (*TDFXReadIndexedByteFunc)(TDFXPtr pTDFX, int addr, 
 
133
                                        char index);
 
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,
 
143
                                    int addr);
 
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);
 
148
#endif
 
149
 
 
150
 
 
151
typedef struct {
 
152
  unsigned int vidcfg;
 
153
  unsigned int vidpll;
 
154
  unsigned int dacmode;
 
155
  unsigned int vgainit0;
 
156
  unsigned int vgainit1;
 
157
  unsigned int miscinit0;
 
158
  unsigned int miscinit1;
 
159
  unsigned int screensize;
 
160
  unsigned int stride;
 
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;
 
172
 
 
173
typedef struct TextureData_t {
 
174
  int contextid;
 
175
  void *data;
 
176
  struct TextureData_t *next;
 
177
} TextureData;
 
178
 
 
179
#define MAXCHIPS 4
 
180
 
 
181
#ifdef XSERVER_LIBPCIACCESS
 
182
enum tdfx_chips {
 
183
    Banshee = 0,
 
184
    Voodoo3_2000,
 
185
    Voodoo3_3000,
 
186
    Voodoo3_Unknown,
 
187
    Voodoo5,
 
188
    MAX_VOODOO_CARDS
 
189
};
 
190
#endif
 
191
 
 
192
typedef struct _TDFXRec {
 
193
#ifdef XSERVER_LIBPCIACCESS
 
194
    enum tdfx_chips match_id;
 
195
    void *MMIOBase[MAXCHIPS];
 
196
    void *FbBase;
 
197
#else
 
198
  unsigned char *MMIOBase[MAXCHIPS];
 
199
  unsigned char *FbBase;
 
200
  unsigned char *myFbBase;
 
201
#endif
 
202
  unsigned long PIOBase[MAXCHIPS];
 
203
  long FbMapSize;
 
204
  int pixelFormat;
 
205
  int stride;
 
206
  int cpp;
 
207
  int maxClip;
 
208
  int MaxClock;
 
209
  int ChipType;
 
210
#ifdef XSERVER_LIBPCIACCESS
 
211
    struct pci_device *PciInfo[MAXCHIPS];
 
212
#else
 
213
  pciVideoPtr PciInfo;
 
214
#endif
 
215
  unsigned long LinearAddr[MAXCHIPS];
 
216
  unsigned long MMIOAddr[MAXCHIPS];
 
217
  EntityInfoPtr pEnt;
 
218
  int numChips;
 
219
#ifndef XSERVER_PCIACCESS
 
220
  PCITAG PciTag[MAXCHIPS];
 
221
#endif
 
222
  Bool Primary;
 
223
  int HasSGRAM;
 
224
  int PciCnt;
 
225
  int PrevDrawState;
 
226
  int DrawState;
 
227
  int Cmd;
 
228
  int DashedLineSize;
 
229
  BoxRec prevBlitDest;
 
230
  TDFXRegRec SavedReg;
 
231
  TDFXRegRec ModeReg;
 
232
#ifdef HAVE_XAA_H
 
233
  XAAInfoRecPtr AccelInfoRec;
 
234
#endif
 
235
  xf86CursorInfoPtr CursorInfoRec;
 
236
  CloseScreenProcPtr CloseScreen;
 
237
  Bool usePIO;
 
238
  Bool NoAccel;
 
239
  DGAModePtr DGAModes;
 
240
  Bool DGAactive;
 
241
  Bool initDone;
 
242
  int DGAViewportStatus;
 
243
  int cursorOffset;
 
244
  int fbOffset;
 
245
  int backOffset;
 
246
  int depthOffset;
 
247
  int texOffset;
 
248
  int texSize;
 
249
  TDFXWriteIndexedByteFunc writeControl;
 
250
  TDFXReadIndexedByteFunc readControl;
 
251
  TDFXWriteWordFunc writeLong;
 
252
  TDFXReadWordFunc readLong;
 
253
  TDFXWriteChipWordFunc writeChipLong;
 
254
  TDFXReadChipWordFunc readChipLong;
 
255
  TDFXSyncFunc sync;
 
256
#if X_BYTE_ORDER == X_BIG_ENDIAN
 
257
  TDFXWriteFifoFunc writeFifo;
 
258
#endif
 
259
  int syncDone;
 
260
  int scanlineWidth;
 
261
  unsigned char *scanlineColorExpandBuffers[2];
 
262
  PROPDATA
 
263
#ifdef TDFXDRI
 
264
  Bool directRenderingEnabled;
 
265
  DRIInfoPtr pDRIInfo;
 
266
  int drmSubFD;
 
267
  int numVisualConfigs;
 
268
  __GLXvisualConfig* pVisualConfigs;
 
269
  TDFXConfigPrivPtr pVisualConfigsPriv;
 
270
  TDFXRegRec DRContextRegs;
 
271
#endif
 
272
  /* State for video */
 
273
  FBAreaPtr offscreenYUVBuf;
 
274
  int offscreenYUVBufWidth;
 
275
  int offscreenYUVBufHeight;
 
276
  
 
277
  /* This is a small register shadow.  I'm only shadowing 
 
278
   *   sst2dDstFmt
 
279
   *   sst2dSrcFmt
 
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;
 
287
  Bool ShowCache;
 
288
  int videoKey;
 
289
  void (*VideoTimerCallback)(ScrnInfoPtr, Time);
 
290
  FBLinearPtr overlayBuffer;
 
291
  FBLinearPtr overlayBuffer2;   /* for double-buffering */
 
292
  int whichOverlayBuffer;       /* flip-flop */
 
293
  FBAreaPtr textureBuffer;
 
294
  Bool TextureXvideo;
 
295
  XF86VideoAdaptorPtr overlayAdaptor;
 
296
  XF86VideoAdaptorPtr textureAdaptor;
 
297
  ScreenBlockHandlerProcPtr BlockHandler;
 
298
  OptionInfoPtr Options;
 
299
 
 
300
  ScreenWakeupHandlerProcPtr coreWakeupHandler;
 
301
  ScreenBlockHandlerProcPtr coreBlockHandler;
 
302
 
 
303
  I2CBusPtr pI2CBus;
 
304
 
 
305
} TDFXRec;
 
306
 
 
307
typedef struct {
 
308
  RegionRec     clip;
 
309
  CARD32        colorKey;
 
310
  int           filterQuality;
 
311
  CARD32        videoStatus;
 
312
  Time          offTime;
 
313
  Time          freeTime;
 
314
} TDFXPortPrivRec, *TDFXPortPrivPtr;
 
315
 
 
316
typedef struct {
 
317
  PROPSAREADATA
 
318
  int fifoOwner;
 
319
  int CtxOwner;
 
320
  int TexOwner;
 
321
} TDFXSAREAPriv;
 
322
 
 
323
#define TDFXPTR(p) ((TDFXPtr)((p)->driverPrivate))
 
324
 
 
325
#define DRAW_STATE_CLIPPING 0x1
 
326
#define DRAW_STATE_TRANSPARENT 0x2
 
327
#define DRAW_STATE_CLIP1CHANGED 0x4
 
328
 
 
329
#define TDFX_FRONT 0
 
330
#define TDFX_BACK 1
 
331
#define TDFX_DEPTH 2
 
332
 
 
333
#define TDFX2XCUTOFF 135000
 
334
 
 
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);
 
345
 
 
346
extern Bool TDFXSwitchMode(SWITCH_MODE_ARGS_DECL);
 
347
extern void TDFXAdjustFrame(ADJUST_FRAME_ARGS_DECL);
 
348
 
 
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);
 
354
 
 
355
extern void TDFXNeedSync(ScrnInfoPtr pScrn);
 
356
extern void TDFXCheckSync(ScrnInfoPtr pScrn);
 
357
extern void TDFXFirstSync(ScrnInfoPtr pScrn);
 
358
 
 
359
extern void TDFXSetupForScreenToScreenCopy(ScrnInfoPtr pScrn, int xdir, 
 
360
                                           int ydir, int rop,
 
361
                                           unsigned int planemask, 
 
362
                                           int trans_color);
 
363
extern void TDFXSubsequentScreenToScreenCopy(ScrnInfoPtr pScrn, int srcX, 
 
364
                                             int srcY, int dstX, int dstY, 
 
365
                                             int w, int h);
 
366
extern void TDFXSetupForSolidFill(ScrnInfoPtr pScrn, int color, int rop, 
 
367
                                  unsigned int planemask);
 
368
extern void TDFXSubsequentSolidFillRect(ScrnInfoPtr pScrn, int x, int y, 
 
369
                                        int w, int h);
 
370
 
 
371
extern void TDFXSelectBuffer(TDFXPtr pTDFX, int which);
 
372
 
 
373
extern void TDFXInitVideo(ScreenPtr pScreen);
 
374
extern void TDFXCloseVideo(ScreenPtr pScreen);
 
375
 
 
376
#endif