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