xref: /openbmc/linux/drivers/video/fbdev/riva/riva_hw.h (revision f7018c21350204c4cf628462f229d44d03545254)
1*f7018c21STomi Valkeinen /***************************************************************************\
2*f7018c21STomi Valkeinen |*                                                                           *|
3*f7018c21STomi Valkeinen |*       Copyright 1993-1999 NVIDIA, Corporation.  All rights reserved.      *|
4*f7018c21STomi Valkeinen |*                                                                           *|
5*f7018c21STomi Valkeinen |*     NOTICE TO USER:   The source code  is copyrighted under  U.S. and     *|
6*f7018c21STomi Valkeinen |*     international laws.  Users and possessors of this source code are     *|
7*f7018c21STomi Valkeinen |*     hereby granted a nonexclusive,  royalty-free copyright license to     *|
8*f7018c21STomi Valkeinen |*     use this code in individual and commercial software.                  *|
9*f7018c21STomi Valkeinen |*                                                                           *|
10*f7018c21STomi Valkeinen |*     Any use of this source code must include,  in the user documenta-     *|
11*f7018c21STomi Valkeinen |*     tion and  internal comments to the code,  notices to the end user     *|
12*f7018c21STomi Valkeinen |*     as follows:                                                           *|
13*f7018c21STomi Valkeinen |*                                                                           *|
14*f7018c21STomi Valkeinen |*       Copyright 1993-1999 NVIDIA, Corporation.  All rights reserved.      *|
15*f7018c21STomi Valkeinen |*                                                                           *|
16*f7018c21STomi Valkeinen |*     NVIDIA, CORPORATION MAKES NO REPRESENTATION ABOUT THE SUITABILITY     *|
17*f7018c21STomi Valkeinen |*     OF  THIS SOURCE  CODE  FOR ANY PURPOSE.  IT IS  PROVIDED  "AS IS"     *|
18*f7018c21STomi Valkeinen |*     WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.  NVIDIA, CORPOR-     *|
19*f7018c21STomi Valkeinen |*     ATION DISCLAIMS ALL WARRANTIES  WITH REGARD  TO THIS SOURCE CODE,     *|
20*f7018c21STomi Valkeinen |*     INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGE-     *|
21*f7018c21STomi Valkeinen |*     MENT,  AND FITNESS  FOR A PARTICULAR PURPOSE.   IN NO EVENT SHALL     *|
22*f7018c21STomi Valkeinen |*     NVIDIA, CORPORATION  BE LIABLE FOR ANY SPECIAL,  INDIRECT,  INCI-     *|
23*f7018c21STomi Valkeinen |*     DENTAL, OR CONSEQUENTIAL DAMAGES,  OR ANY DAMAGES  WHATSOEVER RE-     *|
24*f7018c21STomi Valkeinen |*     SULTING FROM LOSS OF USE,  DATA OR PROFITS,  WHETHER IN AN ACTION     *|
25*f7018c21STomi Valkeinen |*     OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,  ARISING OUT OF     *|
26*f7018c21STomi Valkeinen |*     OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOURCE CODE.     *|
27*f7018c21STomi Valkeinen |*                                                                           *|
28*f7018c21STomi Valkeinen |*     U.S. Government  End  Users.   This source code  is a "commercial     *|
29*f7018c21STomi Valkeinen |*     item,"  as that  term is  defined at  48 C.F.R. 2.101 (OCT 1995),     *|
30*f7018c21STomi Valkeinen |*     consisting  of "commercial  computer  software"  and  "commercial     *|
31*f7018c21STomi Valkeinen |*     computer  software  documentation,"  as such  terms  are  used in     *|
32*f7018c21STomi Valkeinen |*     48 C.F.R. 12.212 (SEPT 1995)  and is provided to the U.S. Govern-     *|
33*f7018c21STomi Valkeinen |*     ment only as  a commercial end item.   Consistent with  48 C.F.R.     *|
34*f7018c21STomi Valkeinen |*     12.212 and  48 C.F.R. 227.7202-1 through  227.7202-4 (JUNE 1995),     *|
35*f7018c21STomi Valkeinen |*     all U.S. Government End Users  acquire the source code  with only     *|
36*f7018c21STomi Valkeinen |*     those rights set forth herein.                                        *|
37*f7018c21STomi Valkeinen |*                                                                           *|
38*f7018c21STomi Valkeinen \***************************************************************************/
39*f7018c21STomi Valkeinen 
40*f7018c21STomi Valkeinen /*
41*f7018c21STomi Valkeinen  * GPL licensing note -- nVidia is allowing a liberal interpretation of
42*f7018c21STomi Valkeinen  * the documentation restriction above, to merely say that this nVidia's
43*f7018c21STomi Valkeinen  * copyright and disclaimer should be included with all code derived
44*f7018c21STomi Valkeinen  * from this source.  -- Jeff Garzik <jgarzik@pobox.com>, 01/Nov/99
45*f7018c21STomi Valkeinen  */
46*f7018c21STomi Valkeinen 
47*f7018c21STomi Valkeinen /* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/riva_hw.h,v 1.21 2002/10/14 18:22:46 mvojkovi Exp $ */
48*f7018c21STomi Valkeinen #ifndef __RIVA_HW_H__
49*f7018c21STomi Valkeinen #define __RIVA_HW_H__
50*f7018c21STomi Valkeinen #define RIVA_SW_VERSION 0x00010003
51*f7018c21STomi Valkeinen 
52*f7018c21STomi Valkeinen #ifndef Bool
53*f7018c21STomi Valkeinen typedef int Bool;
54*f7018c21STomi Valkeinen #endif
55*f7018c21STomi Valkeinen 
56*f7018c21STomi Valkeinen #ifndef TRUE
57*f7018c21STomi Valkeinen #define TRUE 1
58*f7018c21STomi Valkeinen #endif
59*f7018c21STomi Valkeinen #ifndef FALSE
60*f7018c21STomi Valkeinen #define FALSE 0
61*f7018c21STomi Valkeinen #endif
62*f7018c21STomi Valkeinen #ifndef NULL
63*f7018c21STomi Valkeinen #define NULL 0
64*f7018c21STomi Valkeinen #endif
65*f7018c21STomi Valkeinen 
66*f7018c21STomi Valkeinen /*
67*f7018c21STomi Valkeinen  * Typedefs to force certain sized values.
68*f7018c21STomi Valkeinen  */
69*f7018c21STomi Valkeinen typedef unsigned char  U008;
70*f7018c21STomi Valkeinen typedef unsigned short U016;
71*f7018c21STomi Valkeinen typedef unsigned int   U032;
72*f7018c21STomi Valkeinen 
73*f7018c21STomi Valkeinen /*
74*f7018c21STomi Valkeinen  * HW access macros.
75*f7018c21STomi Valkeinen  */
76*f7018c21STomi Valkeinen #include <asm/io.h>
77*f7018c21STomi Valkeinen 
78*f7018c21STomi Valkeinen #define NV_WR08(p,i,d)  (__raw_writeb((d), (void __iomem *)(p) + (i)))
79*f7018c21STomi Valkeinen #define NV_RD08(p,i)    (__raw_readb((void __iomem *)(p) + (i)))
80*f7018c21STomi Valkeinen #define NV_WR16(p,i,d)  (__raw_writew((d), (void __iomem *)(p) + (i)))
81*f7018c21STomi Valkeinen #define NV_RD16(p,i)    (__raw_readw((void __iomem *)(p) + (i)))
82*f7018c21STomi Valkeinen #define NV_WR32(p,i,d)  (__raw_writel((d), (void __iomem *)(p) + (i)))
83*f7018c21STomi Valkeinen #define NV_RD32(p,i)    (__raw_readl((void __iomem *)(p) + (i)))
84*f7018c21STomi Valkeinen 
85*f7018c21STomi Valkeinen #define VGA_WR08(p,i,d) (writeb((d), (void __iomem *)(p) + (i)))
86*f7018c21STomi Valkeinen #define VGA_RD08(p,i)   (readb((void __iomem *)(p) + (i)))
87*f7018c21STomi Valkeinen 
88*f7018c21STomi Valkeinen /*
89*f7018c21STomi Valkeinen  * Define different architectures.
90*f7018c21STomi Valkeinen  */
91*f7018c21STomi Valkeinen #define NV_ARCH_03  0x03
92*f7018c21STomi Valkeinen #define NV_ARCH_04  0x04
93*f7018c21STomi Valkeinen #define NV_ARCH_10  0x10
94*f7018c21STomi Valkeinen #define NV_ARCH_20  0x20
95*f7018c21STomi Valkeinen #define NV_ARCH_30  0x30
96*f7018c21STomi Valkeinen #define NV_ARCH_40  0x40
97*f7018c21STomi Valkeinen 
98*f7018c21STomi Valkeinen /***************************************************************************\
99*f7018c21STomi Valkeinen *                                                                           *
100*f7018c21STomi Valkeinen *                             FIFO registers.                               *
101*f7018c21STomi Valkeinen *                                                                           *
102*f7018c21STomi Valkeinen \***************************************************************************/
103*f7018c21STomi Valkeinen 
104*f7018c21STomi Valkeinen /*
105*f7018c21STomi Valkeinen  * Raster OPeration. Windows style ROP3.
106*f7018c21STomi Valkeinen  */
107*f7018c21STomi Valkeinen typedef volatile struct
108*f7018c21STomi Valkeinen {
109*f7018c21STomi Valkeinen     U032 reserved00[4];
110*f7018c21STomi Valkeinen #ifdef __BIG_ENDIAN
111*f7018c21STomi Valkeinen     U032 FifoFree;
112*f7018c21STomi Valkeinen #else
113*f7018c21STomi Valkeinen     U016 FifoFree;
114*f7018c21STomi Valkeinen     U016 Nop;
115*f7018c21STomi Valkeinen #endif
116*f7018c21STomi Valkeinen     U032 reserved01[0x0BB];
117*f7018c21STomi Valkeinen     U032 Rop3;
118*f7018c21STomi Valkeinen } RivaRop;
119*f7018c21STomi Valkeinen /*
120*f7018c21STomi Valkeinen  * 8X8 Monochrome pattern.
121*f7018c21STomi Valkeinen  */
122*f7018c21STomi Valkeinen typedef volatile struct
123*f7018c21STomi Valkeinen {
124*f7018c21STomi Valkeinen     U032 reserved00[4];
125*f7018c21STomi Valkeinen #ifdef __BIG_ENDIAN
126*f7018c21STomi Valkeinen     U032 FifoFree;
127*f7018c21STomi Valkeinen #else
128*f7018c21STomi Valkeinen     U016 FifoFree;
129*f7018c21STomi Valkeinen     U016 Nop;
130*f7018c21STomi Valkeinen #endif
131*f7018c21STomi Valkeinen     U032 reserved01[0x0BD];
132*f7018c21STomi Valkeinen     U032 Shape;
133*f7018c21STomi Valkeinen     U032 reserved03[0x001];
134*f7018c21STomi Valkeinen     U032 Color0;
135*f7018c21STomi Valkeinen     U032 Color1;
136*f7018c21STomi Valkeinen     U032 Monochrome[2];
137*f7018c21STomi Valkeinen } RivaPattern;
138*f7018c21STomi Valkeinen /*
139*f7018c21STomi Valkeinen  * Scissor clip rectangle.
140*f7018c21STomi Valkeinen  */
141*f7018c21STomi Valkeinen typedef volatile struct
142*f7018c21STomi Valkeinen {
143*f7018c21STomi Valkeinen     U032 reserved00[4];
144*f7018c21STomi Valkeinen #ifdef __BIG_ENDIAN
145*f7018c21STomi Valkeinen     U032 FifoFree;
146*f7018c21STomi Valkeinen #else
147*f7018c21STomi Valkeinen     U016 FifoFree;
148*f7018c21STomi Valkeinen     U016 Nop;
149*f7018c21STomi Valkeinen #endif
150*f7018c21STomi Valkeinen     U032 reserved01[0x0BB];
151*f7018c21STomi Valkeinen     U032 TopLeft;
152*f7018c21STomi Valkeinen     U032 WidthHeight;
153*f7018c21STomi Valkeinen } RivaClip;
154*f7018c21STomi Valkeinen /*
155*f7018c21STomi Valkeinen  * 2D filled rectangle.
156*f7018c21STomi Valkeinen  */
157*f7018c21STomi Valkeinen typedef volatile struct
158*f7018c21STomi Valkeinen {
159*f7018c21STomi Valkeinen     U032 reserved00[4];
160*f7018c21STomi Valkeinen #ifdef __BIG_ENDIAN
161*f7018c21STomi Valkeinen     U032 FifoFree;
162*f7018c21STomi Valkeinen #else
163*f7018c21STomi Valkeinen     U016 FifoFree;
164*f7018c21STomi Valkeinen     U016 Nop[1];
165*f7018c21STomi Valkeinen #endif
166*f7018c21STomi Valkeinen     U032 reserved01[0x0BC];
167*f7018c21STomi Valkeinen     U032 Color;
168*f7018c21STomi Valkeinen     U032 reserved03[0x03E];
169*f7018c21STomi Valkeinen     U032 TopLeft;
170*f7018c21STomi Valkeinen     U032 WidthHeight;
171*f7018c21STomi Valkeinen } RivaRectangle;
172*f7018c21STomi Valkeinen /*
173*f7018c21STomi Valkeinen  * 2D screen-screen BLT.
174*f7018c21STomi Valkeinen  */
175*f7018c21STomi Valkeinen typedef volatile struct
176*f7018c21STomi Valkeinen {
177*f7018c21STomi Valkeinen     U032 reserved00[4];
178*f7018c21STomi Valkeinen #ifdef __BIG_ENDIAN
179*f7018c21STomi Valkeinen     U032 FifoFree;
180*f7018c21STomi Valkeinen #else
181*f7018c21STomi Valkeinen     U016 FifoFree;
182*f7018c21STomi Valkeinen     U016 Nop;
183*f7018c21STomi Valkeinen #endif
184*f7018c21STomi Valkeinen     U032 reserved01[0x0BB];
185*f7018c21STomi Valkeinen     U032 TopLeftSrc;
186*f7018c21STomi Valkeinen     U032 TopLeftDst;
187*f7018c21STomi Valkeinen     U032 WidthHeight;
188*f7018c21STomi Valkeinen } RivaScreenBlt;
189*f7018c21STomi Valkeinen /*
190*f7018c21STomi Valkeinen  * 2D pixel BLT.
191*f7018c21STomi Valkeinen  */
192*f7018c21STomi Valkeinen typedef volatile struct
193*f7018c21STomi Valkeinen {
194*f7018c21STomi Valkeinen     U032 reserved00[4];
195*f7018c21STomi Valkeinen #ifdef __BIG_ENDIAN
196*f7018c21STomi Valkeinen     U032 FifoFree;
197*f7018c21STomi Valkeinen #else
198*f7018c21STomi Valkeinen     U016 FifoFree;
199*f7018c21STomi Valkeinen     U016 Nop[1];
200*f7018c21STomi Valkeinen #endif
201*f7018c21STomi Valkeinen     U032 reserved01[0x0BC];
202*f7018c21STomi Valkeinen     U032 TopLeft;
203*f7018c21STomi Valkeinen     U032 WidthHeight;
204*f7018c21STomi Valkeinen     U032 WidthHeightIn;
205*f7018c21STomi Valkeinen     U032 reserved02[0x03C];
206*f7018c21STomi Valkeinen     U032 Pixels;
207*f7018c21STomi Valkeinen } RivaPixmap;
208*f7018c21STomi Valkeinen /*
209*f7018c21STomi Valkeinen  * Filled rectangle combined with monochrome expand.  Useful for glyphs.
210*f7018c21STomi Valkeinen  */
211*f7018c21STomi Valkeinen typedef volatile struct
212*f7018c21STomi Valkeinen {
213*f7018c21STomi Valkeinen     U032 reserved00[4];
214*f7018c21STomi Valkeinen #ifdef __BIG_ENDIAN
215*f7018c21STomi Valkeinen     U032 FifoFree;
216*f7018c21STomi Valkeinen #else
217*f7018c21STomi Valkeinen     U016 FifoFree;
218*f7018c21STomi Valkeinen     U016 Nop;
219*f7018c21STomi Valkeinen #endif
220*f7018c21STomi Valkeinen     U032 reserved01[0x0BB];
221*f7018c21STomi Valkeinen     U032 reserved03[(0x040)-1];
222*f7018c21STomi Valkeinen     U032 Color1A;
223*f7018c21STomi Valkeinen     struct
224*f7018c21STomi Valkeinen     {
225*f7018c21STomi Valkeinen         U032 TopLeft;
226*f7018c21STomi Valkeinen         U032 WidthHeight;
227*f7018c21STomi Valkeinen     } UnclippedRectangle[64];
228*f7018c21STomi Valkeinen     U032 reserved04[(0x080)-3];
229*f7018c21STomi Valkeinen     struct
230*f7018c21STomi Valkeinen     {
231*f7018c21STomi Valkeinen         U032 TopLeft;
232*f7018c21STomi Valkeinen         U032 BottomRight;
233*f7018c21STomi Valkeinen     } ClipB;
234*f7018c21STomi Valkeinen     U032 Color1B;
235*f7018c21STomi Valkeinen     struct
236*f7018c21STomi Valkeinen     {
237*f7018c21STomi Valkeinen         U032 TopLeft;
238*f7018c21STomi Valkeinen         U032 BottomRight;
239*f7018c21STomi Valkeinen     } ClippedRectangle[64];
240*f7018c21STomi Valkeinen     U032 reserved05[(0x080)-5];
241*f7018c21STomi Valkeinen     struct
242*f7018c21STomi Valkeinen     {
243*f7018c21STomi Valkeinen         U032 TopLeft;
244*f7018c21STomi Valkeinen         U032 BottomRight;
245*f7018c21STomi Valkeinen     } ClipC;
246*f7018c21STomi Valkeinen     U032 Color1C;
247*f7018c21STomi Valkeinen     U032 WidthHeightC;
248*f7018c21STomi Valkeinen     U032 PointC;
249*f7018c21STomi Valkeinen     U032 MonochromeData1C;
250*f7018c21STomi Valkeinen     U032 reserved06[(0x080)+121];
251*f7018c21STomi Valkeinen     struct
252*f7018c21STomi Valkeinen     {
253*f7018c21STomi Valkeinen         U032 TopLeft;
254*f7018c21STomi Valkeinen         U032 BottomRight;
255*f7018c21STomi Valkeinen     } ClipD;
256*f7018c21STomi Valkeinen     U032 Color1D;
257*f7018c21STomi Valkeinen     U032 WidthHeightInD;
258*f7018c21STomi Valkeinen     U032 WidthHeightOutD;
259*f7018c21STomi Valkeinen     U032 PointD;
260*f7018c21STomi Valkeinen     U032 MonochromeData1D;
261*f7018c21STomi Valkeinen     U032 reserved07[(0x080)+120];
262*f7018c21STomi Valkeinen     struct
263*f7018c21STomi Valkeinen     {
264*f7018c21STomi Valkeinen         U032 TopLeft;
265*f7018c21STomi Valkeinen         U032 BottomRight;
266*f7018c21STomi Valkeinen     } ClipE;
267*f7018c21STomi Valkeinen     U032 Color0E;
268*f7018c21STomi Valkeinen     U032 Color1E;
269*f7018c21STomi Valkeinen     U032 WidthHeightInE;
270*f7018c21STomi Valkeinen     U032 WidthHeightOutE;
271*f7018c21STomi Valkeinen     U032 PointE;
272*f7018c21STomi Valkeinen     U032 MonochromeData01E;
273*f7018c21STomi Valkeinen } RivaBitmap;
274*f7018c21STomi Valkeinen /*
275*f7018c21STomi Valkeinen  * 3D textured, Z buffered triangle.
276*f7018c21STomi Valkeinen  */
277*f7018c21STomi Valkeinen typedef volatile struct
278*f7018c21STomi Valkeinen {
279*f7018c21STomi Valkeinen     U032 reserved00[4];
280*f7018c21STomi Valkeinen #ifdef __BIG_ENDIAN
281*f7018c21STomi Valkeinen     U032 FifoFree;
282*f7018c21STomi Valkeinen #else
283*f7018c21STomi Valkeinen     U016 FifoFree;
284*f7018c21STomi Valkeinen     U016 Nop;
285*f7018c21STomi Valkeinen #endif
286*f7018c21STomi Valkeinen     U032 reserved01[0x0BC];
287*f7018c21STomi Valkeinen     U032 TextureOffset;
288*f7018c21STomi Valkeinen     U032 TextureFormat;
289*f7018c21STomi Valkeinen     U032 TextureFilter;
290*f7018c21STomi Valkeinen     U032 FogColor;
291*f7018c21STomi Valkeinen /* This is a problem on LynxOS */
292*f7018c21STomi Valkeinen #ifdef Control
293*f7018c21STomi Valkeinen #undef Control
294*f7018c21STomi Valkeinen #endif
295*f7018c21STomi Valkeinen     U032 Control;
296*f7018c21STomi Valkeinen     U032 AlphaTest;
297*f7018c21STomi Valkeinen     U032 reserved02[0x339];
298*f7018c21STomi Valkeinen     U032 FogAndIndex;
299*f7018c21STomi Valkeinen     U032 Color;
300*f7018c21STomi Valkeinen     float ScreenX;
301*f7018c21STomi Valkeinen     float ScreenY;
302*f7018c21STomi Valkeinen     float ScreenZ;
303*f7018c21STomi Valkeinen     float EyeM;
304*f7018c21STomi Valkeinen     float TextureS;
305*f7018c21STomi Valkeinen     float TextureT;
306*f7018c21STomi Valkeinen } RivaTexturedTriangle03;
307*f7018c21STomi Valkeinen typedef volatile struct
308*f7018c21STomi Valkeinen {
309*f7018c21STomi Valkeinen     U032 reserved00[4];
310*f7018c21STomi Valkeinen #ifdef __BIG_ENDIAN
311*f7018c21STomi Valkeinen     U032 FifoFree;
312*f7018c21STomi Valkeinen #else
313*f7018c21STomi Valkeinen     U016 FifoFree;
314*f7018c21STomi Valkeinen     U016 Nop;
315*f7018c21STomi Valkeinen #endif
316*f7018c21STomi Valkeinen     U032 reserved01[0x0BB];
317*f7018c21STomi Valkeinen     U032 ColorKey;
318*f7018c21STomi Valkeinen     U032 TextureOffset;
319*f7018c21STomi Valkeinen     U032 TextureFormat;
320*f7018c21STomi Valkeinen     U032 TextureFilter;
321*f7018c21STomi Valkeinen     U032 Blend;
322*f7018c21STomi Valkeinen /* This is a problem on LynxOS */
323*f7018c21STomi Valkeinen #ifdef Control
324*f7018c21STomi Valkeinen #undef Control
325*f7018c21STomi Valkeinen #endif
326*f7018c21STomi Valkeinen     U032 Control;
327*f7018c21STomi Valkeinen     U032 FogColor;
328*f7018c21STomi Valkeinen     U032 reserved02[0x39];
329*f7018c21STomi Valkeinen     struct
330*f7018c21STomi Valkeinen     {
331*f7018c21STomi Valkeinen         float ScreenX;
332*f7018c21STomi Valkeinen         float ScreenY;
333*f7018c21STomi Valkeinen         float ScreenZ;
334*f7018c21STomi Valkeinen         float EyeM;
335*f7018c21STomi Valkeinen         U032 Color;
336*f7018c21STomi Valkeinen         U032 Specular;
337*f7018c21STomi Valkeinen         float TextureS;
338*f7018c21STomi Valkeinen         float TextureT;
339*f7018c21STomi Valkeinen     } Vertex[16];
340*f7018c21STomi Valkeinen     U032 DrawTriangle3D;
341*f7018c21STomi Valkeinen } RivaTexturedTriangle05;
342*f7018c21STomi Valkeinen /*
343*f7018c21STomi Valkeinen  * 2D line.
344*f7018c21STomi Valkeinen  */
345*f7018c21STomi Valkeinen typedef volatile struct
346*f7018c21STomi Valkeinen {
347*f7018c21STomi Valkeinen     U032 reserved00[4];
348*f7018c21STomi Valkeinen #ifdef __BIG_ENDIAN
349*f7018c21STomi Valkeinen     U032 FifoFree;
350*f7018c21STomi Valkeinen #else
351*f7018c21STomi Valkeinen     U016 FifoFree;
352*f7018c21STomi Valkeinen     U016 Nop[1];
353*f7018c21STomi Valkeinen #endif
354*f7018c21STomi Valkeinen     U032 reserved01[0x0BC];
355*f7018c21STomi Valkeinen     U032 Color;             /* source color               0304-0307*/
356*f7018c21STomi Valkeinen     U032 Reserved02[0x03e];
357*f7018c21STomi Valkeinen     struct {                /* start aliased methods in array   0400-    */
358*f7018c21STomi Valkeinen         U032 point0;        /* y_x S16_S16 in pixels            0-   3*/
359*f7018c21STomi Valkeinen         U032 point1;        /* y_x S16_S16 in pixels            4-   7*/
360*f7018c21STomi Valkeinen     } Lin[16];              /* end of aliased methods in array      -047f*/
361*f7018c21STomi Valkeinen     struct {                /* start aliased methods in array   0480-    */
362*f7018c21STomi Valkeinen         U032 point0X;       /* in pixels, 0 at left                0-   3*/
363*f7018c21STomi Valkeinen         U032 point0Y;       /* in pixels, 0 at top                 4-   7*/
364*f7018c21STomi Valkeinen         U032 point1X;       /* in pixels, 0 at left                8-   b*/
365*f7018c21STomi Valkeinen         U032 point1Y;       /* in pixels, 0 at top                 c-   f*/
366*f7018c21STomi Valkeinen     } Lin32[8];             /* end of aliased methods in array      -04ff*/
367*f7018c21STomi Valkeinen     U032 PolyLin[32];       /* y_x S16_S16 in pixels         0500-057f*/
368*f7018c21STomi Valkeinen     struct {                /* start aliased methods in array   0580-    */
369*f7018c21STomi Valkeinen         U032 x;             /* in pixels, 0 at left                0-   3*/
370*f7018c21STomi Valkeinen         U032 y;             /* in pixels, 0 at top                 4-   7*/
371*f7018c21STomi Valkeinen     } PolyLin32[16];        /* end of aliased methods in array      -05ff*/
372*f7018c21STomi Valkeinen     struct {                /* start aliased methods in array   0600-    */
373*f7018c21STomi Valkeinen         U032 color;         /* source color                     0-   3*/
374*f7018c21STomi Valkeinen         U032 point;         /* y_x S16_S16 in pixels            4-   7*/
375*f7018c21STomi Valkeinen     } ColorPolyLin[16];     /* end of aliased methods in array      -067f*/
376*f7018c21STomi Valkeinen } RivaLine;
377*f7018c21STomi Valkeinen /*
378*f7018c21STomi Valkeinen  * 2D/3D surfaces
379*f7018c21STomi Valkeinen  */
380*f7018c21STomi Valkeinen typedef volatile struct
381*f7018c21STomi Valkeinen {
382*f7018c21STomi Valkeinen     U032 reserved00[4];
383*f7018c21STomi Valkeinen #ifdef __BIG_ENDIAN
384*f7018c21STomi Valkeinen     U032 FifoFree;
385*f7018c21STomi Valkeinen #else
386*f7018c21STomi Valkeinen     U016 FifoFree;
387*f7018c21STomi Valkeinen     U016 Nop;
388*f7018c21STomi Valkeinen #endif
389*f7018c21STomi Valkeinen     U032 reserved01[0x0BE];
390*f7018c21STomi Valkeinen     U032 Offset;
391*f7018c21STomi Valkeinen } RivaSurface;
392*f7018c21STomi Valkeinen typedef volatile struct
393*f7018c21STomi Valkeinen {
394*f7018c21STomi Valkeinen     U032 reserved00[4];
395*f7018c21STomi Valkeinen #ifdef __BIG_ENDIAN
396*f7018c21STomi Valkeinen     U032 FifoFree;
397*f7018c21STomi Valkeinen #else
398*f7018c21STomi Valkeinen     U016 FifoFree;
399*f7018c21STomi Valkeinen     U016 Nop;
400*f7018c21STomi Valkeinen #endif
401*f7018c21STomi Valkeinen     U032 reserved01[0x0BD];
402*f7018c21STomi Valkeinen     U032 Pitch;
403*f7018c21STomi Valkeinen     U032 RenderBufferOffset;
404*f7018c21STomi Valkeinen     U032 ZBufferOffset;
405*f7018c21STomi Valkeinen } RivaSurface3D;
406*f7018c21STomi Valkeinen 
407*f7018c21STomi Valkeinen /***************************************************************************\
408*f7018c21STomi Valkeinen *                                                                           *
409*f7018c21STomi Valkeinen *                        Virtualized RIVA H/W interface.                    *
410*f7018c21STomi Valkeinen *                                                                           *
411*f7018c21STomi Valkeinen \***************************************************************************/
412*f7018c21STomi Valkeinen 
413*f7018c21STomi Valkeinen #define FP_ENABLE  1
414*f7018c21STomi Valkeinen #define FP_DITHER  2
415*f7018c21STomi Valkeinen 
416*f7018c21STomi Valkeinen struct _riva_hw_inst;
417*f7018c21STomi Valkeinen struct _riva_hw_state;
418*f7018c21STomi Valkeinen /*
419*f7018c21STomi Valkeinen  * Virtialized chip interface. Makes RIVA 128 and TNT look alike.
420*f7018c21STomi Valkeinen  */
421*f7018c21STomi Valkeinen typedef struct _riva_hw_inst
422*f7018c21STomi Valkeinen {
423*f7018c21STomi Valkeinen     /*
424*f7018c21STomi Valkeinen      * Chip specific settings.
425*f7018c21STomi Valkeinen      */
426*f7018c21STomi Valkeinen     U032 Architecture;
427*f7018c21STomi Valkeinen     U032 Version;
428*f7018c21STomi Valkeinen     U032 Chipset;
429*f7018c21STomi Valkeinen     U032 CrystalFreqKHz;
430*f7018c21STomi Valkeinen     U032 RamAmountKBytes;
431*f7018c21STomi Valkeinen     U032 MaxVClockFreqKHz;
432*f7018c21STomi Valkeinen     U032 RamBandwidthKBytesPerSec;
433*f7018c21STomi Valkeinen     U032 EnableIRQ;
434*f7018c21STomi Valkeinen     U032 IO;
435*f7018c21STomi Valkeinen     U032 VBlankBit;
436*f7018c21STomi Valkeinen     U032 FifoFreeCount;
437*f7018c21STomi Valkeinen     U032 FifoEmptyCount;
438*f7018c21STomi Valkeinen     U032 CursorStart;
439*f7018c21STomi Valkeinen     U032 flatPanel;
440*f7018c21STomi Valkeinen     Bool twoHeads;
441*f7018c21STomi Valkeinen     /*
442*f7018c21STomi Valkeinen      * Non-FIFO registers.
443*f7018c21STomi Valkeinen      */
444*f7018c21STomi Valkeinen     volatile U032 __iomem *PCRTC0;
445*f7018c21STomi Valkeinen     volatile U032 __iomem *PCRTC;
446*f7018c21STomi Valkeinen     volatile U032 __iomem *PRAMDAC0;
447*f7018c21STomi Valkeinen     volatile U032 __iomem *PFB;
448*f7018c21STomi Valkeinen     volatile U032 __iomem *PFIFO;
449*f7018c21STomi Valkeinen     volatile U032 __iomem *PGRAPH;
450*f7018c21STomi Valkeinen     volatile U032 __iomem *PEXTDEV;
451*f7018c21STomi Valkeinen     volatile U032 __iomem *PTIMER;
452*f7018c21STomi Valkeinen     volatile U032 __iomem *PMC;
453*f7018c21STomi Valkeinen     volatile U032 __iomem *PRAMIN;
454*f7018c21STomi Valkeinen     volatile U032 __iomem *FIFO;
455*f7018c21STomi Valkeinen     volatile U032 __iomem *CURSOR;
456*f7018c21STomi Valkeinen     volatile U008 __iomem *PCIO0;
457*f7018c21STomi Valkeinen     volatile U008 __iomem *PCIO;
458*f7018c21STomi Valkeinen     volatile U008 __iomem *PVIO;
459*f7018c21STomi Valkeinen     volatile U008 __iomem *PDIO0;
460*f7018c21STomi Valkeinen     volatile U008 __iomem *PDIO;
461*f7018c21STomi Valkeinen     volatile U032 __iomem *PRAMDAC;
462*f7018c21STomi Valkeinen     /*
463*f7018c21STomi Valkeinen      * Common chip functions.
464*f7018c21STomi Valkeinen      */
465*f7018c21STomi Valkeinen     int  (*Busy)(struct _riva_hw_inst *);
466*f7018c21STomi Valkeinen     void (*LoadStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *);
467*f7018c21STomi Valkeinen     void (*UnloadStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *);
468*f7018c21STomi Valkeinen     void (*SetStartAddress)(struct _riva_hw_inst *,U032);
469*f7018c21STomi Valkeinen     void (*SetSurfaces2D)(struct _riva_hw_inst *,U032,U032);
470*f7018c21STomi Valkeinen     void (*SetSurfaces3D)(struct _riva_hw_inst *,U032,U032);
471*f7018c21STomi Valkeinen     int  (*ShowHideCursor)(struct _riva_hw_inst *,int);
472*f7018c21STomi Valkeinen     void (*LockUnlock)(struct _riva_hw_inst *, int);
473*f7018c21STomi Valkeinen     /*
474*f7018c21STomi Valkeinen      * Current extended mode settings.
475*f7018c21STomi Valkeinen      */
476*f7018c21STomi Valkeinen     struct _riva_hw_state *CurrentState;
477*f7018c21STomi Valkeinen     /*
478*f7018c21STomi Valkeinen      * FIFO registers.
479*f7018c21STomi Valkeinen      */
480*f7018c21STomi Valkeinen     RivaRop                 __iomem *Rop;
481*f7018c21STomi Valkeinen     RivaPattern             __iomem *Patt;
482*f7018c21STomi Valkeinen     RivaClip                __iomem *Clip;
483*f7018c21STomi Valkeinen     RivaPixmap              __iomem *Pixmap;
484*f7018c21STomi Valkeinen     RivaScreenBlt           __iomem *Blt;
485*f7018c21STomi Valkeinen     RivaBitmap              __iomem *Bitmap;
486*f7018c21STomi Valkeinen     RivaLine                __iomem *Line;
487*f7018c21STomi Valkeinen     RivaTexturedTriangle03  __iomem *Tri03;
488*f7018c21STomi Valkeinen     RivaTexturedTriangle05  __iomem *Tri05;
489*f7018c21STomi Valkeinen } RIVA_HW_INST;
490*f7018c21STomi Valkeinen /*
491*f7018c21STomi Valkeinen  * Extended mode state information.
492*f7018c21STomi Valkeinen  */
493*f7018c21STomi Valkeinen typedef struct _riva_hw_state
494*f7018c21STomi Valkeinen {
495*f7018c21STomi Valkeinen     U032 bpp;
496*f7018c21STomi Valkeinen     U032 width;
497*f7018c21STomi Valkeinen     U032 height;
498*f7018c21STomi Valkeinen     U032 interlace;
499*f7018c21STomi Valkeinen     U032 repaint0;
500*f7018c21STomi Valkeinen     U032 repaint1;
501*f7018c21STomi Valkeinen     U032 screen;
502*f7018c21STomi Valkeinen     U032 scale;
503*f7018c21STomi Valkeinen     U032 dither;
504*f7018c21STomi Valkeinen     U032 extra;
505*f7018c21STomi Valkeinen     U032 pixel;
506*f7018c21STomi Valkeinen     U032 horiz;
507*f7018c21STomi Valkeinen     U032 arbitration0;
508*f7018c21STomi Valkeinen     U032 arbitration1;
509*f7018c21STomi Valkeinen     U032 vpll;
510*f7018c21STomi Valkeinen     U032 vpll2;
511*f7018c21STomi Valkeinen     U032 pllsel;
512*f7018c21STomi Valkeinen     U032 general;
513*f7018c21STomi Valkeinen     U032 crtcOwner;
514*f7018c21STomi Valkeinen     U032 head;
515*f7018c21STomi Valkeinen     U032 head2;
516*f7018c21STomi Valkeinen     U032 config;
517*f7018c21STomi Valkeinen     U032 cursorConfig;
518*f7018c21STomi Valkeinen     U032 cursor0;
519*f7018c21STomi Valkeinen     U032 cursor1;
520*f7018c21STomi Valkeinen     U032 cursor2;
521*f7018c21STomi Valkeinen     U032 offset0;
522*f7018c21STomi Valkeinen     U032 offset1;
523*f7018c21STomi Valkeinen     U032 offset2;
524*f7018c21STomi Valkeinen     U032 offset3;
525*f7018c21STomi Valkeinen     U032 pitch0;
526*f7018c21STomi Valkeinen     U032 pitch1;
527*f7018c21STomi Valkeinen     U032 pitch2;
528*f7018c21STomi Valkeinen     U032 pitch3;
529*f7018c21STomi Valkeinen } RIVA_HW_STATE;
530*f7018c21STomi Valkeinen 
531*f7018c21STomi Valkeinen /*
532*f7018c21STomi Valkeinen  * function prototypes
533*f7018c21STomi Valkeinen  */
534*f7018c21STomi Valkeinen 
535*f7018c21STomi Valkeinen extern int CalcStateExt
536*f7018c21STomi Valkeinen (
537*f7018c21STomi Valkeinen     RIVA_HW_INST  *chip,
538*f7018c21STomi Valkeinen     RIVA_HW_STATE *state,
539*f7018c21STomi Valkeinen     int            bpp,
540*f7018c21STomi Valkeinen     int            width,
541*f7018c21STomi Valkeinen     int            hDisplaySize,
542*f7018c21STomi Valkeinen     int            height,
543*f7018c21STomi Valkeinen     int            dotClock
544*f7018c21STomi Valkeinen );
545*f7018c21STomi Valkeinen 
546*f7018c21STomi Valkeinen /*
547*f7018c21STomi Valkeinen  * External routines.
548*f7018c21STomi Valkeinen  */
549*f7018c21STomi Valkeinen int RivaGetConfig(RIVA_HW_INST *, unsigned int);
550*f7018c21STomi Valkeinen /*
551*f7018c21STomi Valkeinen  * FIFO Free Count. Should attempt to yield processor if RIVA is busy.
552*f7018c21STomi Valkeinen  */
553*f7018c21STomi Valkeinen 
554*f7018c21STomi Valkeinen #define RIVA_FIFO_FREE(hwinst,hwptr,cnt)                            \
555*f7018c21STomi Valkeinen {                                                                   \
556*f7018c21STomi Valkeinen     while ((hwinst).FifoFreeCount < (cnt)) {                        \
557*f7018c21STomi Valkeinen 	mb();mb();						    \
558*f7018c21STomi Valkeinen         (hwinst).FifoFreeCount = NV_RD32(&(hwinst).hwptr->FifoFree, 0) >> 2;     \
559*f7018c21STomi Valkeinen     }								    \
560*f7018c21STomi Valkeinen     (hwinst).FifoFreeCount -= (cnt);                                \
561*f7018c21STomi Valkeinen }
562*f7018c21STomi Valkeinen #endif /* __RIVA_HW_H__ */
563*f7018c21STomi Valkeinen 
564