cregit-Linux how code gets into the kernel

Release 4.11 drivers/video/fbdev/riva/riva_hw.h

/***************************************************************************\
|*                                                                           *|
|*       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__ */


Overall Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)71144.35%19.09%
Linus Torvalds56435.18%19.09%
James Simmons25315.78%327.27%
Antonino A. Daplas322.00%218.18%
Jeff Garzik301.87%218.18%
Guido Günther130.81%218.18%
Total1603100.00%11100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.