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