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