1 /***************************************************************************\
3 |* Copyright 1993-1999 NVIDIA, Corporation. All rights reserved. *|
5 |* NOTICE TO USER: The source code is copyrighted under U.S. and *|
6 |* international laws. Users and possessors of this source code are *|
7 |* hereby granted a nonexclusive, royalty-free copyright license to *|
8 |* use this code in individual and commercial software. *|
10 |* Any use of this source code must include, in the user documenta- *|
11 |* tion and internal comments to the code, notices to the end user *|
14 |* Copyright 1993-1999 NVIDIA, Corporation. All rights reserved. *|
16 |* NVIDIA, CORPORATION MAKES NO REPRESENTATION ABOUT THE SUITABILITY *|
17 |* OF THIS SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" *|
18 |* WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. NVIDIA, CORPOR- *|
19 |* ATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOURCE CODE, *|
20 |* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGE- *|
21 |* MENT, AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL *|
22 |* NVIDIA, CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT, INCI- *|
23 |* DENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RE- *|
24 |* SULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION *|
25 |* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF *|
26 |* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOURCE CODE. *|
28 |* U.S. Government End Users. This source code is a "commercial *|
29 |* item," as that term is defined at 48 C.F.R. 2.101 (OCT 1995), *|
30 |* consisting of "commercial computer software" and "commercial *|
31 |* computer software documentation," as such terms are used in *|
32 |* 48 C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Govern- *|
33 |* ment only as a commercial end item. Consistent with 48 C.F.R. *|
34 |* 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), *|
35 |* all U.S. Government End Users acquire the source code with only *|
36 |* those rights set forth herein. *|
38 \***************************************************************************/
39 /* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/riva_hw.h,v 1.26 2003/07/31 20:24:31 mvojkovi Exp $ */
44 * Define supported architectures.
46 /***************************************************************************\
50 \***************************************************************************/
53 * Raster OPeration. Windows style ROP3.
55 typedef volatile struct
60 CARD32 reserved01[0x0BB];
64 * 8X8 Monochrome pattern.
66 typedef volatile struct
71 CARD32 reserved01[0x0BD];
73 CARD32 reserved03[0x001];
79 * Scissor clip rectangle.
81 typedef volatile struct
86 CARD32 reserved01[0x0BB];
91 * 2D filled rectangle.
93 typedef volatile struct
98 CARD32 reserved01[0x0BC];
100 CARD32 reserved03[0x03E];
105 * 2D screen-screen BLT.
107 typedef volatile struct
109 CARD32 reserved00[4];
112 CARD32 reserved01[0x0BB];
120 typedef volatile struct
122 CARD32 reserved00[4];
125 CARD32 reserved01[0x0BC];
128 CARD32 WidthHeightIn;
129 CARD32 reserved02[0x03C];
133 * Filled rectangle combined with monochrome expand. Useful for glyphs.
135 typedef volatile struct
137 CARD32 reserved00[4];
140 CARD32 reserved01[0x0BB];
141 CARD32 reserved03[(0x040)-1];
147 } UnclippedRectangle[64];
148 CARD32 reserved04[(0x080)-3];
159 } ClippedRectangle[64];
160 CARD32 reserved05[(0x080)-5];
169 CARD32 MonochromeData1C;
170 CARD32 reserved06[(0x080)+121];
177 CARD32 WidthHeightInD;
178 CARD32 WidthHeightOutD;
180 CARD32 MonochromeData1D;
181 CARD32 reserved07[(0x080)+120];
189 CARD32 WidthHeightInE;
190 CARD32 WidthHeightOutE;
192 CARD32 MonochromeData01E;
197 typedef volatile struct
199 CARD32 reserved00[4];
202 CARD32 reserved01[0x0BC];
203 CARD32 Color; /* source color 0304-0307*/
204 CARD32 Reserved02[0x03e];
205 struct { /* start aliased methods in array 0400- */
206 CARD32 point0; /* y_x S16_S16 in pixels 0- 3*/
207 CARD32 point1; /* y_x S16_S16 in pixels 4- 7*/
208 } Lin[16]; /* end of aliased methods in array -047f*/
209 struct { /* start aliased methods in array 0480- */
210 CARD32 point0X; /* in pixels, 0 at left 0- 3*/
211 CARD32 point0Y; /* in pixels, 0 at top 4- 7*/
212 CARD32 point1X; /* in pixels, 0 at left 8- b*/
213 CARD32 point1Y; /* in pixels, 0 at top c- f*/
214 } Lin32[8]; /* end of aliased methods in array -04ff*/
215 CARD32 PolyLin[32]; /* y_x S16_S16 in pixels 0500-057f*/
216 struct { /* start aliased methods in array 0580- */
217 CARD32 x; /* in pixels, 0 at left 0- 3*/
218 CARD32 y; /* in pixels, 0 at top 4- 7*/
219 } PolyLin32[16]; /* end of aliased methods in array -05ff*/
220 struct { /* start aliased methods in array 0600- */
221 CARD32 color; /* source color 0- 3*/
222 CARD32 point; /* y_x S16_S16 in pixels 4- 7*/
223 } ColorPolyLin[16]; /* end of aliased methods in array -067f*/
228 typedef volatile struct
230 CARD32 reserved00[4];
233 CARD32 reserved01[0x0BE];
236 typedef volatile struct
238 CARD32 reserved00[4];
241 CARD32 reserved01[0x0BD];
243 CARD32 RenderBufferOffset;
244 CARD32 ZBufferOffset;
247 /***************************************************************************\
249 * Virtualized RIVA H/W interface. *
251 \***************************************************************************/
256 struct _riva_hw_inst;
257 struct _riva_hw_state;
259 * Virtialized chip interface. Makes RIVA 128 and TNT look alike.
261 typedef struct _riva_hw_inst
264 * Chip specific settings.
266 CARD32 CrystalFreqKHz;
267 CARD32 RamAmountKBytes;
268 CARD32 MaxVClockFreqKHz;
269 CARD32 RamBandwidthKBytesPerSec;
273 CARD32 FifoFreeCount;
274 CARD32 FifoEmptyCount;
277 * Non-FIFO registers.
279 volatile CARD32 *PCRTC;
280 volatile CARD32 *PFB;
281 volatile CARD32 *PFIFO;
282 volatile CARD32 *PGRAPH;
283 volatile CARD32 *PEXTDEV;
284 volatile CARD32 *PTIMER;
285 volatile CARD32 *PMC;
286 volatile CARD32 *PRAMIN;
287 volatile CARD32 *FIFO;
288 volatile CARD32 *CURSOR;
289 volatile CARD8 *PCIO;
290 volatile CARD8 *PVIO;
291 volatile CARD8 *PDIO;
292 volatile CARD32 *PRAMDAC;
294 * Common chip functions.
296 int (*Busy)(struct _riva_hw_inst *);
297 void (*CalcStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *,int,int,int,int,int,int);
298 void (*LoadStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *);
299 void (*UnloadStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *);
300 void (*SetStartAddress)(struct _riva_hw_inst *,CARD32);
301 int (*ShowHideCursor)(struct _riva_hw_inst *,int);
302 void (*LockUnlock)(struct _riva_hw_inst *, int);
304 * Current extended mode settings.
306 struct _riva_hw_state *CurrentState;
319 * Extended mode state information.
321 typedef struct _riva_hw_state
348 * FIFO Free Count. Should attempt to yield processor if RIVA is busy.
351 #define RIVA_FIFO_FREE(hwinst,hwptr,cnt) \
353 while ((hwinst).FifoFreeCount < (cnt)) { \
356 (hwinst).FifoFreeCount = (hwinst).hwptr->FifoFree >> 2; \
358 (hwinst).FifoFreeCount -= (cnt); \
360 #define RIVA_BUSY(hwinst) \
363 while ((hwinst).Busy(&(hwinst))); \
365 #endif /* __RIVA_HW_H__ */