123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564 |
- /***************************************************************************\
- |* *|
- |* Copyright 1993-1999 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-1999 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. *|
- |* *|
- \***************************************************************************/
- /*
- * GPL licensing note -- nVidia is allowing a liberal interpretation of
- * the documentation restriction above, to merely say that this nVidia's
- * copyright and disclaimer should be included with all code derived
- * from this source. -- Jeff Garzik <jgarzik@pobox.com>, 01/Nov/99
- */
- /* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/riva_hw.h,v 1.21 2002/10/14 18:22:46 mvojkovi Exp $ */
- #ifndef __RIVA_HW_H__
- #define __RIVA_HW_H__
- #define RIVA_SW_VERSION 0x00010003
- #ifndef Bool
- typedef int Bool;
- #endif
- #ifndef TRUE
- #define TRUE 1
- #endif
- #ifndef FALSE
- #define FALSE 0
- #endif
- #ifndef NULL
- #define NULL 0
- #endif
- /*
- * Typedefs to force certain sized values.
- */
- typedef unsigned char U008;
- typedef unsigned short U016;
- typedef unsigned int U032;
- /*
- * HW access macros.
- */
- #include <asm/io.h>
- #define NV_WR08(p,i,d) (__raw_writeb((d), (void __iomem *)(p) + (i)))
- #define NV_RD08(p,i) (__raw_readb((void __iomem *)(p) + (i)))
- #define NV_WR16(p,i,d) (__raw_writew((d), (void __iomem *)(p) + (i)))
- #define NV_RD16(p,i) (__raw_readw((void __iomem *)(p) + (i)))
- #define NV_WR32(p,i,d) (__raw_writel((d), (void __iomem *)(p) + (i)))
- #define NV_RD32(p,i) (__raw_readl((void __iomem *)(p) + (i)))
- #define VGA_WR08(p,i,d) (writeb((d), (void __iomem *)(p) + (i)))
- #define VGA_RD08(p,i) (readb((void __iomem *)(p) + (i)))
- /*
- * Define different architectures.
- */
- #define NV_ARCH_03 0x03
- #define NV_ARCH_04 0x04
- #define NV_ARCH_10 0x10
- #define NV_ARCH_20 0x20
- #define NV_ARCH_30 0x30
- #define NV_ARCH_40 0x40
- /***************************************************************************\
- * *
- * FIFO registers. *
- * *
- \***************************************************************************/
- /*
- * Raster OPeration. Windows style ROP3.
- */
- typedef volatile struct
- {
- U032 reserved00[4];
- #ifdef __BIG_ENDIAN
- U032 FifoFree;
- #else
- U016 FifoFree;
- U016 Nop;
- #endif
- U032 reserved01[0x0BB];
- U032 Rop3;
- } RivaRop;
- /*
- * 8X8 Monochrome pattern.
- */
- typedef volatile struct
- {
- U032 reserved00[4];
- #ifdef __BIG_ENDIAN
- U032 FifoFree;
- #else
- U016 FifoFree;
- U016 Nop;
- #endif
- U032 reserved01[0x0BD];
- U032 Shape;
- U032 reserved03[0x001];
- U032 Color0;
- U032 Color1;
- U032 Monochrome[2];
- } RivaPattern;
- /*
- * Scissor clip rectangle.
- */
- typedef volatile struct
- {
- U032 reserved00[4];
- #ifdef __BIG_ENDIAN
- U032 FifoFree;
- #else
- U016 FifoFree;
- U016 Nop;
- #endif
- U032 reserved01[0x0BB];
- U032 TopLeft;
- U032 WidthHeight;
- } RivaClip;
- /*
- * 2D filled rectangle.
- */
- typedef volatile struct
- {
- U032 reserved00[4];
- #ifdef __BIG_ENDIAN
- U032 FifoFree;
- #else
- U016 FifoFree;
- U016 Nop[1];
- #endif
- U032 reserved01[0x0BC];
- U032 Color;
- U032 reserved03[0x03E];
- U032 TopLeft;
- U032 WidthHeight;
- } RivaRectangle;
- /*
- * 2D screen-screen BLT.
- */
- typedef volatile struct
- {
- U032 reserved00[4];
- #ifdef __BIG_ENDIAN
- U032 FifoFree;
- #else
- U016 FifoFree;
- U016 Nop;
- #endif
- U032 reserved01[0x0BB];
- U032 TopLeftSrc;
- U032 TopLeftDst;
- U032 WidthHeight;
- } RivaScreenBlt;
- /*
- * 2D pixel BLT.
- */
- typedef volatile struct
- {
- U032 reserved00[4];
- #ifdef __BIG_ENDIAN
- U032 FifoFree;
- #else
- U016 FifoFree;
- U016 Nop[1];
- #endif
- U032 reserved01[0x0BC];
- U032 TopLeft;
- U032 WidthHeight;
- U032 WidthHeightIn;
- U032 reserved02[0x03C];
- U032 Pixels;
- } RivaPixmap;
- /*
- * Filled rectangle combined with monochrome expand. Useful for glyphs.
- */
- typedef volatile struct
- {
- U032 reserved00[4];
- #ifdef __BIG_ENDIAN
- U032 FifoFree;
- #else
- U016 FifoFree;
- U016 Nop;
- #endif
- U032 reserved01[0x0BB];
- U032 reserved03[(0x040)-1];
- U032 Color1A;
- struct
- {
- U032 TopLeft;
- U032 WidthHeight;
- } UnclippedRectangle[64];
- U032 reserved04[(0x080)-3];
- struct
- {
- U032 TopLeft;
- U032 BottomRight;
- } ClipB;
- U032 Color1B;
- struct
- {
- U032 TopLeft;
- U032 BottomRight;
- } ClippedRectangle[64];
- U032 reserved05[(0x080)-5];
- struct
- {
- U032 TopLeft;
- U032 BottomRight;
- } ClipC;
- U032 Color1C;
- U032 WidthHeightC;
- U032 PointC;
- U032 MonochromeData1C;
- U032 reserved06[(0x080)+121];
- struct
- {
- U032 TopLeft;
- U032 BottomRight;
- } ClipD;
- U032 Color1D;
- U032 WidthHeightInD;
- U032 WidthHeightOutD;
- U032 PointD;
- U032 MonochromeData1D;
- U032 reserved07[(0x080)+120];
- struct
- {
- U032 TopLeft;
- U032 BottomRight;
- } ClipE;
- U032 Color0E;
- U032 Color1E;
- U032 WidthHeightInE;
- U032 WidthHeightOutE;
- U032 PointE;
- U032 MonochromeData01E;
- } RivaBitmap;
- /*
- * 3D textured, Z buffered triangle.
- */
- typedef volatile struct
- {
- U032 reserved00[4];
- #ifdef __BIG_ENDIAN
- U032 FifoFree;
- #else
- U016 FifoFree;
- U016 Nop;
- #endif
- U032 reserved01[0x0BC];
- U032 TextureOffset;
- U032 TextureFormat;
- U032 TextureFilter;
- U032 FogColor;
- /* This is a problem on LynxOS */
- #ifdef Control
- #undef Control
- #endif
- U032 Control;
- U032 AlphaTest;
- U032 reserved02[0x339];
- U032 FogAndIndex;
- U032 Color;
- float ScreenX;
- float ScreenY;
- float ScreenZ;
- float EyeM;
- float TextureS;
- float TextureT;
- } RivaTexturedTriangle03;
- typedef volatile struct
- {
- U032 reserved00[4];
- #ifdef __BIG_ENDIAN
- U032 FifoFree;
- #else
- U016 FifoFree;
- U016 Nop;
- #endif
- U032 reserved01[0x0BB];
- U032 ColorKey;
- U032 TextureOffset;
- U032 TextureFormat;
- U032 TextureFilter;
- U032 Blend;
- /* This is a problem on LynxOS */
- #ifdef Control
- #undef Control
- #endif
- U032 Control;
- U032 FogColor;
- U032 reserved02[0x39];
- struct
- {
- float ScreenX;
- float ScreenY;
- float ScreenZ;
- float EyeM;
- U032 Color;
- U032 Specular;
- float TextureS;
- float TextureT;
- } Vertex[16];
- U032 DrawTriangle3D;
- } RivaTexturedTriangle05;
- /*
- * 2D line.
- */
- typedef volatile struct
- {
- U032 reserved00[4];
- #ifdef __BIG_ENDIAN
- U032 FifoFree;
- #else
- U016 FifoFree;
- U016 Nop[1];
- #endif
- U032 reserved01[0x0BC];
- U032 Color; /* source color 0304-0307*/
- U032 Reserved02[0x03e];
- struct { /* start aliased methods in array 0400- */
- U032 point0; /* y_x S16_S16 in pixels 0- 3*/
- U032 point1; /* y_x S16_S16 in pixels 4- 7*/
- } Lin[16]; /* end of aliased methods in array -047f*/
- struct { /* start aliased methods in array 0480- */
- U032 point0X; /* in pixels, 0 at left 0- 3*/
- U032 point0Y; /* in pixels, 0 at top 4- 7*/
- U032 point1X; /* in pixels, 0 at left 8- b*/
- U032 point1Y; /* in pixels, 0 at top c- f*/
- } Lin32[8]; /* end of aliased methods in array -04ff*/
- U032 PolyLin[32]; /* y_x S16_S16 in pixels 0500-057f*/
- struct { /* start aliased methods in array 0580- */
- U032 x; /* in pixels, 0 at left 0- 3*/
- U032 y; /* in pixels, 0 at top 4- 7*/
- } PolyLin32[16]; /* end of aliased methods in array -05ff*/
- struct { /* start aliased methods in array 0600- */
- U032 color; /* source color 0- 3*/
- U032 point; /* y_x S16_S16 in pixels 4- 7*/
- } ColorPolyLin[16]; /* end of aliased methods in array -067f*/
- } RivaLine;
- /*
- * 2D/3D surfaces
- */
- typedef volatile struct
- {
- U032 reserved00[4];
- #ifdef __BIG_ENDIAN
- U032 FifoFree;
- #else
- U016 FifoFree;
- U016 Nop;
- #endif
- U032 reserved01[0x0BE];
- U032 Offset;
- } RivaSurface;
- typedef volatile struct
- {
- U032 reserved00[4];
- #ifdef __BIG_ENDIAN
- U032 FifoFree;
- #else
- U016 FifoFree;
- U016 Nop;
- #endif
- U032 reserved01[0x0BD];
- U032 Pitch;
- U032 RenderBufferOffset;
- U032 ZBufferOffset;
- } RivaSurface3D;
-
- /***************************************************************************\
- * *
- * Virtualized RIVA H/W interface. *
- * *
- \***************************************************************************/
- #define FP_ENABLE 1
- #define FP_DITHER 2
- 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.
- */
- U032 Architecture;
- U032 Version;
- U032 Chipset;
- U032 CrystalFreqKHz;
- U032 RamAmountKBytes;
- U032 MaxVClockFreqKHz;
- U032 RamBandwidthKBytesPerSec;
- U032 EnableIRQ;
- U032 IO;
- U032 VBlankBit;
- U032 FifoFreeCount;
- U032 FifoEmptyCount;
- U032 CursorStart;
- U032 flatPanel;
- Bool twoHeads;
- /*
- * Non-FIFO registers.
- */
- volatile U032 __iomem *PCRTC0;
- volatile U032 __iomem *PCRTC;
- volatile U032 __iomem *PRAMDAC0;
- volatile U032 __iomem *PFB;
- volatile U032 __iomem *PFIFO;
- volatile U032 __iomem *PGRAPH;
- volatile U032 __iomem *PEXTDEV;
- volatile U032 __iomem *PTIMER;
- volatile U032 __iomem *PMC;
- volatile U032 __iomem *PRAMIN;
- volatile U032 __iomem *FIFO;
- volatile U032 __iomem *CURSOR;
- volatile U008 __iomem *PCIO0;
- volatile U008 __iomem *PCIO;
- volatile U008 __iomem *PVIO;
- volatile U008 __iomem *PDIO0;
- volatile U008 __iomem *PDIO;
- volatile U032 __iomem *PRAMDAC;
- /*
- * Common chip functions.
- */
- int (*Busy)(struct _riva_hw_inst *);
- void (*LoadStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *);
- void (*UnloadStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *);
- void (*SetStartAddress)(struct _riva_hw_inst *,U032);
- void (*SetSurfaces2D)(struct _riva_hw_inst *,U032,U032);
- void (*SetSurfaces3D)(struct _riva_hw_inst *,U032,U032);
- int (*ShowHideCursor)(struct _riva_hw_inst *,int);
- void (*LockUnlock)(struct _riva_hw_inst *, int);
- /*
- * Current extended mode settings.
- */
- struct _riva_hw_state *CurrentState;
- /*
- * FIFO registers.
- */
- RivaRop __iomem *Rop;
- RivaPattern __iomem *Patt;
- RivaClip __iomem *Clip;
- RivaPixmap __iomem *Pixmap;
- RivaScreenBlt __iomem *Blt;
- RivaBitmap __iomem *Bitmap;
- RivaLine __iomem *Line;
- RivaTexturedTriangle03 __iomem *Tri03;
- RivaTexturedTriangle05 __iomem *Tri05;
- } RIVA_HW_INST;
- /*
- * Extended mode state information.
- */
- typedef struct _riva_hw_state
- {
- U032 bpp;
- U032 width;
- U032 height;
- U032 interlace;
- U032 repaint0;
- U032 repaint1;
- U032 screen;
- U032 scale;
- U032 dither;
- U032 extra;
- U032 pixel;
- U032 horiz;
- U032 arbitration0;
- U032 arbitration1;
- U032 vpll;
- U032 vpll2;
- U032 pllsel;
- U032 general;
- U032 crtcOwner;
- U032 head;
- U032 head2;
- U032 config;
- U032 cursorConfig;
- U032 cursor0;
- U032 cursor1;
- U032 cursor2;
- U032 offset0;
- U032 offset1;
- U032 offset2;
- U032 offset3;
- U032 pitch0;
- U032 pitch1;
- U032 pitch2;
- U032 pitch3;
- } RIVA_HW_STATE;
- /*
- * function prototypes
- */
- extern int CalcStateExt
- (
- RIVA_HW_INST *chip,
- RIVA_HW_STATE *state,
- int bpp,
- int width,
- int hDisplaySize,
- int height,
- int dotClock
- );
- /*
- * External routines.
- */
- int RivaGetConfig(RIVA_HW_INST *, unsigned int);
- /*
- * FIFO Free Count. Should attempt to yield processor if RIVA is busy.
- */
- #define RIVA_FIFO_FREE(hwinst,hwptr,cnt) \
- { \
- while ((hwinst).FifoFreeCount < (cnt)) { \
- mb();mb(); \
- (hwinst).FifoFreeCount = NV_RD32(&(hwinst).hwptr->FifoFree, 0) >> 2; \
- } \
- (hwinst).FifoFreeCount -= (cnt); \
- }
- #endif /* __RIVA_HW_H__ */
|