FreeBE/nvidia/riva_hw.h

324 lines
10 KiB
C

/***************************************************************************\
|* *|
|* Copyright 1993-1998 NVIDIA, Corporation. All rights reserved. *|
|* *|
|* NOTICE TO USER: The source code is copyrighted under U.S. and *|
|* international laws. Users and possessors of this source code are *|
|* hereby granted a nonexclusive, royalty-free copyright license to *|
|* use this code in individual and commercial software. *|
|* *|
|* Any use of this source code must include, in the user documenta- *|
|* tion and internal comments to the code, notices to the end user *|
|* as follows: *|
|* *|
|* Copyright 1993-1998 NVIDIA, Corporation. All rights reserved. *|
|* *|
|* NVIDIA, CORPORATION MAKES NO REPRESENTATION ABOUT THE SUITABILITY *|
|* OF THIS SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" *|
|* WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. NVIDIA, CORPOR- *|
|* ATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOURCE CODE, *|
|* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGE- *|
|* MENT, AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL *|
|* NVIDIA, CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT, INCI- *|
|* DENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RE- *|
|* SULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION *|
|* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF *|
|* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOURCE CODE. *|
|* *|
|* U.S. Government End Users. This source code is a "commercial *|
|* item," as that term is defined at 48 C.F.R. 2.101 (OCT 1995), *|
|* consisting of "commercial computer software" and "commercial *|
|* computer software documentation," as such terms are used in *|
|* 48 C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Govern- *|
|* ment only as a commercial end item. Consistent with 48 C.F.R. *|
|* 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), *|
|* all U.S. Government End Users acquire the source code with only *|
|* those rights set forth herein. *|
|* *|
\***************************************************************************/
/* $XFree86:
* xc/programs/Xserver/hw/xfree86/vga256/drivers/nv/riva_hw.h,v 1.1.2.2
* 1998/12/22 16:33:19 hohndel Exp $ */
#ifndef __RIVA_HW_H__
#define __RIVA_HW_H__
#define RIVA_SW_VERSION 0x00010000
/***************************************************************************\
* *
* FIFO registers. *
* *
\***************************************************************************/
/*
* Raster OPeration. Windows style ROP3.
*/
typedef volatile struct {
unsigned reserved00[4];
unsigned short FifoFree;
unsigned short Nop;
unsigned reserved01[0x0BB];
unsigned Rop3;
} RivaRop;
/*
* 8X8 Monochrome pattern.
*/
typedef volatile struct {
unsigned reserved00[4];
unsigned short FifoFree;
unsigned short Nop;
unsigned reserved01[0x0BD];
unsigned Shape;
unsigned reserved03[0x001];
unsigned Color0;
unsigned Color1;
unsigned Monochrome[2];
} RivaPattern;
/*
* Scissor clip rectangle.
*/
typedef volatile struct {
unsigned reserved00[4];
unsigned short FifoFree;
unsigned short Nop;
unsigned reserved01[0x0BB];
unsigned TopLeft;
unsigned WidthHeight;
} RivaClip;
/*
* 2D filled rectangle.
*/
typedef volatile struct {
unsigned reserved00[4];
unsigned short FifoFree;
unsigned short Nop[1];
unsigned reserved01[0x0BC];
unsigned Color;
unsigned reserved03[0x03E];
unsigned TopLeft;
unsigned WidthHeight;
} RivaRectangle;
/*
* 2D screen-screen BLT.
*/
typedef volatile struct {
unsigned reserved00[4];
unsigned short FifoFree;
unsigned short Nop;
unsigned reserved01[0x0BB];
unsigned TopLeftSrc;
unsigned TopLeftDst;
unsigned WidthHeight;
} RivaScreenBlt;
/*
* 2D pixel BLT.
*/
typedef volatile struct {
unsigned reserved00[4];
unsigned short FifoFree;
unsigned short Nop[1];
unsigned reserved01[0x0BC];
unsigned TopLeft;
unsigned WidthHeight;
unsigned WidthHeightIn;
unsigned reserved02[0x03C];
unsigned Pixels;
} RivaPixmap;
/*
* Filled rectangle combined with monochrome expand. Useful for glyphs.
*/
typedef volatile struct {
unsigned reserved00[4];
unsigned short FifoFree;
unsigned short Nop;
unsigned reserved01[0x0BB];
unsigned reserved03[(0x040) - 1];
unsigned Color1A;
struct {
unsigned TopLeft;
unsigned WidthHeight;
} UnclippedRectangle[64];
unsigned reserved04[(0x080) - 3];
struct {
unsigned TopLeft;
unsigned BottomRight;
} ClipB;
unsigned Color1B;
struct {
unsigned TopLeft;
unsigned BottomRight;
} ClippedRectangle[64];
unsigned reserved05[(0x080) - 5];
struct {
unsigned TopLeft;
unsigned BottomRight;
} ClipC;
unsigned Color1C;
unsigned WidthHeightC;
unsigned PointC;
unsigned MonochromeData1C;
unsigned reserved06[(0x080) + 121];
struct {
unsigned TopLeft;
unsigned BottomRight;
} ClipD;
unsigned Color1D;
unsigned WidthHeightInD;
unsigned WidthHeightOutD;
unsigned PointD;
unsigned MonochromeData1D;
unsigned reserved07[(0x080) + 120];
struct {
unsigned TopLeft;
unsigned BottomRight;
} ClipE;
unsigned Color0E;
unsigned Color1E;
unsigned WidthHeightInE;
unsigned WidthHeightOutE;
unsigned PointE;
unsigned MonochromeData01E;
} RivaBitmap;
/*
* 3D textured, Z buffered triangle.
*/
typedef volatile struct {
unsigned reserved00[4];
unsigned short FifoFree;
unsigned short Nop;
unsigned reserved01[0x0BC];
unsigned TextureOffset;
unsigned TextureFormat;
unsigned TextureFilter;
unsigned FogColor;
unsigned Control;
unsigned AlphaTest;
unsigned reserved02[0x339];
unsigned FogAndIndex;
unsigned Color;
float ScreenX;
float ScreenY;
float ScreenZ;
float EyeM;
float TextureS;
float TextureT;
} RivaTexturedTriangle03;
/***************************************************************************\
* *
* Virtualized RIVA H/W interface. *
* *
\***************************************************************************/
struct _riva_hw_inst;
struct _riva_hw_state;
/*
* Virtialized chip interface. Makes RIVA 128 and TNT look alike.
*/
typedef struct _riva_hw_inst {
/*
* Chip specific settings.
*/
unsigned Architecture;
unsigned Version;
unsigned CrystalFreqKHz;
unsigned RamAmountKBytes;
unsigned MaxVClockFreqKHz;
unsigned RamBandwidthKBytesPerSec;
unsigned EnableIRQ;
unsigned IO;
unsigned LockUnlockIO;
unsigned LockUnlockIndex;
unsigned VBlankBit;
unsigned FifoFreeCount;
/*
* Non-FIFO registers.
*/
volatile unsigned *PCRTC;
volatile unsigned *PRAMDAC;
volatile unsigned *PFB;
volatile unsigned *PFIFO;
volatile unsigned *PGRAPH;
volatile unsigned *PEXTDEV;
volatile unsigned *PTIMER;
volatile unsigned *PMC;
volatile unsigned *PRAMIN;
volatile unsigned *FIFO;
volatile unsigned *CURSOR;
volatile unsigned *CURSORPOS;
volatile unsigned *VBLANKENABLE;
volatile unsigned *VBLANK;
/*
* Common chip functions.
*/
int (*Busy)(struct _riva_hw_inst *);
void (*CalcStateExt)(struct _riva_hw_inst *, struct _riva_hw_state *, int,
int, int, int, int, int, int, int, int, int, int, int,
int);
void (*LoadStateExt)(struct _riva_hw_inst *, struct _riva_hw_state *,
int all);
void (*UnloadStateExt)(struct _riva_hw_inst *, struct _riva_hw_state *);
void (*SetStartAddress)(struct _riva_hw_inst *, unsigned);
void (*SetSurfaces2D)(struct _riva_hw_inst *, unsigned, unsigned);
void (*SetSurfaces3D)(struct _riva_hw_inst *, unsigned, unsigned);
int (*ShowHideCursor)(struct _riva_hw_inst *, int);
/*
* Current extended mode settings.
*/
struct _riva_hw_state *CurrentState;
/*
* FIFO registers.
*/
RivaRop *Rop;
RivaPattern *Patt;
RivaClip *Clip;
RivaPixmap *Pixmap;
RivaScreenBlt *Blt;
RivaBitmap *Bitmap;
RivaTexturedTriangle03 *Tri03;
} RIVA_HW_INST;
/*
* Extended mode state information.
*/
typedef struct _riva_hw_state {
unsigned bpp;
unsigned width;
unsigned height;
unsigned repaint0;
unsigned repaint1;
unsigned screen;
unsigned pixel;
unsigned horiz;
unsigned arbitration0;
unsigned arbitration1;
unsigned vpll;
unsigned pllsel;
unsigned general;
unsigned config;
unsigned cursor0;
unsigned cursor1;
unsigned cursor2;
unsigned offset0;
unsigned offset1;
unsigned offset2;
unsigned offset3;
unsigned pitch0;
unsigned pitch1;
unsigned pitch2;
unsigned pitch3;
} RIVA_HW_STATE;
/*
* External routines.
*/
int RivaGetConfig(RIVA_HW_INST *);
/*
* FIFO Free Count. Should attempt to yield processor if RIVA is busy.
*/
#define RIVA_FIFO_FREE(hwinst, hwptr, cnt) \
{ \
while ((hwinst).FifoFreeCount < (cnt)) { \
(hwinst).FifoFreeCount = (hwinst).hwptr->FifoFree >> 2; \
} \
(hwinst).FifoFreeCount -= (cnt); \
}
#endif /* __RIVA_HW_H__ */