146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/***************************************************************************\ 246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* *| 346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* Copyright 1993-1999 NVIDIA, Corporation. All rights reserved. *| 446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* *| 546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* NOTICE TO USER: The source code is copyrighted under U.S. and *| 646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* international laws. Users and possessors of this source code are *| 746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* hereby granted a nonexclusive, royalty-free copyright license to *| 846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* use this code in individual and commercial software. *| 946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* *| 1046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* Any use of this source code must include, in the user documenta- *| 1146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* tion and internal comments to the code, notices to the end user *| 1246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* as follows: *| 1346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* *| 1446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* Copyright 1993-1999 NVIDIA, Corporation. All rights reserved. *| 1546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* *| 1646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* NVIDIA, CORPORATION MAKES NO REPRESENTATION ABOUT THE SUITABILITY *| 1746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* OF THIS SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" *| 1846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. NVIDIA, CORPOR- *| 1946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* ATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOURCE CODE, *| 2046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGE- *| 2146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* MENT, AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL *| 2246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* NVIDIA, CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT, INCI- *| 2346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* DENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RE- *| 2446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* SULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION *| 2546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF *| 2646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOURCE CODE. *| 2746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* *| 2846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* U.S. Government End Users. This source code is a "commercial *| 2946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* item," as that term is defined at 48 C.F.R. 2.101 (OCT 1995), *| 3046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* consisting of "commercial computer software" and "commercial *| 3146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* computer software documentation," as such terms are used in *| 3246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* 48 C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Govern- *| 3346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* ment only as a commercial end item. Consistent with 48 C.F.R. *| 3446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), *| 3546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* all U.S. Government End Users acquire the source code with only *| 3646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* those rights set forth herein. *| 3746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner|* *| 3846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner\***************************************************************************/ 3946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 4046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifndef __RIVA_HW_H__ 4146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define __RIVA_HW_H__ 4246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define RIVA_SW_VERSION 0x00010003 4346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 4446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 4546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner * Typedefs to force certain sized values. 4646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner */ 4746be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef Uint8 U008; 4846be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef Uint16 U016; 4946be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef Uint32 U032; 5046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 5146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 5246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner * HW access macros. 5346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner */ 5446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define NV_WR08(p,i,d) (((U008 *)(p))[i]=(d)) 5546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define NV_RD08(p,i) (((U008 *)(p))[i]) 5646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define NV_WR16(p,i,d) (((U016 *)(p))[(i)/2]=(d)) 5746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define NV_RD16(p,i) (((U016 *)(p))[(i)/2]) 5846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define NV_WR32(p,i,d) (((U032 *)(p))[(i)/4]=(d)) 5946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define NV_RD32(p,i) (((U032 *)(p))[(i)/4]) 6046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VGA_WR08(p,i,d) NV_WR08(p,i,d) 6146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define VGA_RD08(p,i) NV_RD08(p,i) 6246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 6346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 6446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner * Define supported architectures. 6546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner */ 6646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define NV_ARCH_03 0x03 6746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define NV_ARCH_04 0x04 6846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define NV_ARCH_10 0x10 6946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/***************************************************************************\ 7046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner* * 7146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner* FIFO registers. * 7246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner* * 7346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner\***************************************************************************/ 7446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 7546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 7646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner * Raster OPeration. Windows style ROP3. 7746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner */ 7846be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef volatile struct 7946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 8046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved00[4]; 8146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 FifoFree; 8246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 Nop; 8346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved01[0x0BB]; 8446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Rop3; 8546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} RivaRop; 8646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 8746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner * 8X8 Monochrome pattern. 8846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner */ 8946be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef volatile struct 9046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 9146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved00[4]; 9246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 FifoFree; 9346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 Nop; 9446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved01[0x0BD]; 9546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Shape; 9646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved03[0x001]; 9746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Color0; 9846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Color1; 9946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Monochrome[2]; 10046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} RivaPattern; 10146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 10246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner * Scissor clip rectangle. 10346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner */ 10446be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef volatile struct 10546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 10646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved00[4]; 10746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 FifoFree; 10846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 Nop; 10946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved01[0x0BB]; 11046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 TopLeft; 11146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 WidthHeight; 11246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} RivaClip; 11346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 11446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner * 2D filled rectangle. 11546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner */ 11646be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef volatile struct 11746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 11846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved00[4]; 11946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 FifoFree; 12046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 Nop[1]; 12146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved01[0x0BC]; 12246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Color; 12346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved03[0x03E]; 12446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 TopLeft; 12546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 WidthHeight; 12646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} RivaRectangle; 12746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 12846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner * 2D screen-screen BLT. 12946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner */ 13046be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef volatile struct 13146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 13246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved00[4]; 13346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 FifoFree; 13446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 Nop; 13546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved01[0x0BB]; 13646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 TopLeftSrc; 13746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 TopLeftDst; 13846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 WidthHeight; 13946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} RivaScreenBlt; 14046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 14146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner * 2D pixel BLT. 14246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner */ 14346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef volatile struct 14446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 14546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved00[4]; 14646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 FifoFree; 14746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 Nop[1]; 14846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved01[0x0BC]; 14946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 TopLeft; 15046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 WidthHeight; 15146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 WidthHeightIn; 15246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved02[0x03C]; 15346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Pixels; 15446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} RivaPixmap; 15546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 15646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner * Filled rectangle combined with monochrome expand. Useful for glyphs. 15746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner */ 15846be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef volatile struct 15946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 16046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved00[4]; 16146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 FifoFree; 16246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 Nop; 16346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved01[0x0BB]; 16446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved03[(0x040)-1]; 16546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Color1A; 16646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner struct 16746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 16846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 TopLeft; 16946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 WidthHeight; 17046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } UnclippedRectangle[64]; 17146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved04[(0x080)-3]; 17246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner struct 17346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 17446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 TopLeft; 17546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 BottomRight; 17646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } ClipB; 17746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Color1B; 17846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner struct 17946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 18046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 TopLeft; 18146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 BottomRight; 18246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } ClippedRectangle[64]; 18346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved05[(0x080)-5]; 18446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner struct 18546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 18646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 TopLeft; 18746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 BottomRight; 18846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } ClipC; 18946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Color1C; 19046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 WidthHeightC; 19146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 PointC; 19246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 MonochromeData1C; 19346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved06[(0x080)+121]; 19446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner struct 19546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 19646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 TopLeft; 19746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 BottomRight; 19846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } ClipD; 19946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Color1D; 20046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 WidthHeightInD; 20146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 WidthHeightOutD; 20246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 PointD; 20346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 MonochromeData1D; 20446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved07[(0x080)+120]; 20546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner struct 20646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 20746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 TopLeft; 20846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 BottomRight; 20946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } ClipE; 21046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Color0E; 21146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Color1E; 21246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 WidthHeightInE; 21346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 WidthHeightOutE; 21446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 PointE; 21546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 MonochromeData01E; 21646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} RivaBitmap; 21746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 21846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner * 3D textured, Z buffered triangle. 21946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner */ 22046be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef volatile struct 22146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 22246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved00[4]; 22346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 FifoFree; 22446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 Nop; 22546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved01[0x0BC]; 22646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 TextureOffset; 22746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 TextureFormat; 22846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 TextureFilter; 22946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 FogColor; 23046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* This is a problem on LynxOS */ 23146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef Control 23246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#undef Control 23346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif 23446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Control; 23546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 AlphaTest; 23646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved02[0x339]; 23746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 FogAndIndex; 23846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Color; 23946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner float ScreenX; 24046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner float ScreenY; 24146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner float ScreenZ; 24246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner float EyeM; 24346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner float TextureS; 24446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner float TextureT; 24546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} RivaTexturedTriangle03; 24646be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef volatile struct 24746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 24846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved00[4]; 24946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 FifoFree; 25046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 Nop; 25146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved01[0x0BB]; 25246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 ColorKey; 25346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 TextureOffset; 25446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 TextureFormat; 25546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 TextureFilter; 25646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Blend; 25746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* This is a problem on LynxOS */ 25846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifdef Control 25946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#undef Control 26046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif 26146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Control; 26246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 FogColor; 26346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved02[0x39]; 26446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner struct 26546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 26646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner float ScreenX; 26746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner float ScreenY; 26846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner float ScreenZ; 26946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner float EyeM; 27046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Color; 27146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Specular; 27246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner float TextureS; 27346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner float TextureT; 27446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } Vertex[16]; 27546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 DrawTriangle3D; 27646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} RivaTexturedTriangle05; 27746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 27846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner * 2D line. 27946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner */ 28046be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef volatile struct 28146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 28246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved00[4]; 28346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 FifoFree; 28446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 Nop[1]; 28546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved01[0x0BC]; 28646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Color; /* source color 0304-0307*/ 28746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Reserved02[0x03e]; 28846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner struct { /* start aliased methods in array 0400- */ 28946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 point0; /* y_x S16_S16 in pixels 0- 3*/ 29046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 point1; /* y_x S16_S16 in pixels 4- 7*/ 29146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } Lin[16]; /* end of aliased methods in array -047f*/ 29246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner struct { /* start aliased methods in array 0480- */ 29346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 point0X; /* in pixels, 0 at left 0- 3*/ 29446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 point0Y; /* in pixels, 0 at top 4- 7*/ 29546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 point1X; /* in pixels, 0 at left 8- b*/ 29646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 point1Y; /* in pixels, 0 at top c- f*/ 29746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } Lin32[8]; /* end of aliased methods in array -04ff*/ 29846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 PolyLin[32]; /* y_x S16_S16 in pixels 0500-057f*/ 29946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner struct { /* start aliased methods in array 0580- */ 30046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 x; /* in pixels, 0 at left 0- 3*/ 30146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 y; /* in pixels, 0 at top 4- 7*/ 30246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } PolyLin32[16]; /* end of aliased methods in array -05ff*/ 30346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner struct { /* start aliased methods in array 0600- */ 30446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 color; /* source color 0- 3*/ 30546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 point; /* y_x S16_S16 in pixels 4- 7*/ 30646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } ColorPolyLin[16]; /* end of aliased methods in array -067f*/ 30746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} RivaLine; 30846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 30946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner * 2D/3D surfaces 31046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner */ 31146be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef volatile struct 31246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 31346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved00[4]; 31446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 FifoFree; 31546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 Nop; 31646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved01[0x0BE]; 31746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Offset; 31846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} RivaSurface; 31946be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef volatile struct 32046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 32146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved00[4]; 32246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 FifoFree; 32346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U016 Nop; 32446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 reserved01[0x0BD]; 32546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Pitch; 32646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 RenderBufferOffset; 32746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 ZBufferOffset; 32846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} RivaSurface3D; 32946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 33046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/***************************************************************************\ 33146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner* * 33246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner* Virtualized RIVA H/W interface. * 33346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner* * 33446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner\***************************************************************************/ 33546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 33646be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerstruct _riva_hw_inst; 33746be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerstruct _riva_hw_state; 33846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 33946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner * Virtialized chip interface. Makes RIVA 128 and TNT look alike. 34046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner */ 34146be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef struct _riva_hw_inst 34246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 34346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* 34446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner * Chip specific settings. 34546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner */ 34646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Architecture; 34746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 Version; 34846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 CrystalFreqKHz; 34946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 RamAmountKBytes; 35046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 MaxVClockFreqKHz; 35146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 RamBandwidthKBytesPerSec; 35246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 EnableIRQ; 35346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 IO; 35446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 VBlankBit; 35546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 FifoFreeCount; 35646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 FifoEmptyCount; 35746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* 35846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner * Non-FIFO registers. 35946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner */ 36046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner volatile U032 *PCRTC; 36146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner volatile U032 *PRAMDAC; 36246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner volatile U032 *PFB; 36346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner volatile U032 *PFIFO; 36446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner volatile U032 *PGRAPH; 36546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner volatile U032 *PEXTDEV; 36646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner volatile U032 *PTIMER; 36746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner volatile U032 *PMC; 36846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner volatile U032 *PRAMIN; 36946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner volatile U032 *FIFO; 37046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner volatile U032 *CURSOR; 37146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner volatile U032 *CURSORPOS; 37246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner volatile U032 *VBLANKENABLE; 37346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner volatile U032 *VBLANK; 37446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner volatile U008 *PCIO; 37546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner volatile U008 *PVIO; 37646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner volatile U008 *PDIO; 37746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* 37846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner * Common chip functions. 37946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner */ 38046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int (*Busy)(struct _riva_hw_inst *); 38146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner void (*CalcStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *,int,int,int,int,int,int,int,int,int,int,int,int,int); 38246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner void (*LoadStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *); 38346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner void (*UnloadStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *); 38446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner void (*SetStartAddress)(struct _riva_hw_inst *,U032); 38546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner void (*SetSurfaces2D)(struct _riva_hw_inst *,U032,U032); 38646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner void (*SetSurfaces3D)(struct _riva_hw_inst *,U032,U032); 38746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int (*ShowHideCursor)(struct _riva_hw_inst *,int); 38846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner void (*LockUnlock)(struct _riva_hw_inst *, int); 38946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* 39046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner * Current extended mode settings. 39146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner */ 39246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner struct _riva_hw_state *CurrentState; 39346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* 39446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner * FIFO registers. 39546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner */ 39646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner RivaRop *Rop; 39746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner RivaPattern *Patt; 39846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner RivaClip *Clip; 39946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner RivaPixmap *Pixmap; 40046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner RivaScreenBlt *Blt; 40146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner RivaBitmap *Bitmap; 40246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner RivaLine *Line; 40346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner RivaTexturedTriangle03 *Tri03; 40446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner RivaTexturedTriangle05 *Tri05; 40546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} RIVA_HW_INST; 40646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 40746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner * Extended mode state information. 40846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner */ 40946be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef struct _riva_hw_state 41046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 41146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 bpp; 41246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 width; 41346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 height; 41446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 repaint0; 41546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 repaint1; 41646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 screen; 41746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 pixel; 41846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 horiz; 41946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 arbitration0; 42046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 arbitration1; 42146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 vpll; 42246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 pllsel; 42346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 general; 42446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 config; 42546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 cursor0; 42646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 cursor1; 42746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 cursor2; 42846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 offset0; 42946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 offset1; 43046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 offset2; 43146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 offset3; 43246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 pitch0; 43346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 pitch1; 43446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 pitch2; 43546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner U032 pitch3; 43646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} RIVA_HW_STATE; 43746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 43846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 43946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner * FIFO Free Count. Should attempt to yield processor if RIVA is busy. 44046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner */ 44146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 44246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define RIVA_FIFO_FREE(hwptr,cnt) \ 44346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ \ 44446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner while (FifoFreeCount < (cnt)) \ 44546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner FifoFreeCount = hwptr->FifoFree >> 2; \ 44646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner FifoFreeCount -= (cnt); \ 44746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 44846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif /* __RIVA_HW_H__ */ 44946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 450