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