cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

riva_hw.h (15705B)


      1/***************************************************************************\
      2|*                                                                           *|
      3|*       Copyright 1993-1999 NVIDIA, Corporation.  All rights reserved.      *|
      4|*                                                                           *|
      5|*     NOTICE TO USER:   The source code  is copyrighted under  U.S. and     *|
      6|*     international laws.  Users and possessors of this source code are     *|
      7|*     hereby granted a nonexclusive,  royalty-free copyright license to     *|
      8|*     use this code in individual and commercial software.                  *|
      9|*                                                                           *|
     10|*     Any use of this source code must include,  in the user documenta-     *|
     11|*     tion and  internal comments to the code,  notices to the end user     *|
     12|*     as follows:                                                           *|
     13|*                                                                           *|
     14|*       Copyright 1993-1999 NVIDIA, Corporation.  All rights reserved.      *|
     15|*                                                                           *|
     16|*     NVIDIA, CORPORATION MAKES NO REPRESENTATION ABOUT THE SUITABILITY     *|
     17|*     OF  THIS SOURCE  CODE  FOR ANY PURPOSE.  IT IS  PROVIDED  "AS IS"     *|
     18|*     WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.  NVIDIA, CORPOR-     *|
     19|*     ATION DISCLAIMS ALL WARRANTIES  WITH REGARD  TO THIS SOURCE CODE,     *|
     20|*     INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGE-     *|
     21|*     MENT,  AND FITNESS  FOR A PARTICULAR PURPOSE.   IN NO EVENT SHALL     *|
     22|*     NVIDIA, CORPORATION  BE LIABLE FOR ANY SPECIAL,  INDIRECT,  INCI-     *|
     23|*     DENTAL, OR CONSEQUENTIAL DAMAGES,  OR ANY DAMAGES  WHATSOEVER RE-     *|
     24|*     SULTING FROM LOSS OF USE,  DATA OR PROFITS,  WHETHER IN AN ACTION     *|
     25|*     OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,  ARISING OUT OF     *|
     26|*     OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOURCE CODE.     *|
     27|*                                                                           *|
     28|*     U.S. Government  End  Users.   This source code  is a "commercial     *|
     29|*     item,"  as that  term is  defined at  48 C.F.R. 2.101 (OCT 1995),     *|
     30|*     consisting  of "commercial  computer  software"  and  "commercial     *|
     31|*     computer  software  documentation,"  as such  terms  are  used in     *|
     32|*     48 C.F.R. 12.212 (SEPT 1995)  and is provided to the U.S. Govern-     *|
     33|*     ment only as  a commercial end item.   Consistent with  48 C.F.R.     *|
     34|*     12.212 and  48 C.F.R. 227.7202-1 through  227.7202-4 (JUNE 1995),     *|
     35|*     all U.S. Government End Users  acquire the source code  with only     *|
     36|*     those rights set forth herein.                                        *|
     37|*                                                                           *|
     38\***************************************************************************/
     39
     40/*
     41 * GPL licensing note -- nVidia is allowing a liberal interpretation of
     42 * the documentation restriction above, to merely say that this nVidia's
     43 * copyright and disclaimer should be included with all code derived
     44 * from this source.  -- Jeff Garzik <jgarzik@pobox.com>, 01/Nov/99 
     45 */
     46
     47/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/riva_hw.h,v 1.21 2002/10/14 18:22:46 mvojkovi Exp $ */
     48#ifndef __RIVA_HW_H__
     49#define __RIVA_HW_H__
     50#define RIVA_SW_VERSION 0x00010003
     51
     52#ifndef Bool
     53typedef int Bool;
     54#endif
     55
     56#ifndef TRUE
     57#define TRUE 1
     58#endif
     59#ifndef FALSE
     60#define FALSE 0
     61#endif
     62#ifndef NULL
     63#define NULL 0
     64#endif
     65
     66/*
     67 * Typedefs to force certain sized values.
     68 */
     69typedef unsigned char  U008;
     70typedef unsigned short U016;
     71typedef unsigned int   U032;
     72
     73/*
     74 * HW access macros.
     75 */
     76#include <asm/io.h>
     77
     78#define NV_WR08(p,i,d)  (__raw_writeb((d), (void __iomem *)(p) + (i)))
     79#define NV_RD08(p,i)    (__raw_readb((void __iomem *)(p) + (i)))
     80#define NV_WR16(p,i,d)  (__raw_writew((d), (void __iomem *)(p) + (i)))
     81#define NV_RD16(p,i)    (__raw_readw((void __iomem *)(p) + (i)))
     82#define NV_WR32(p,i,d)  (__raw_writel((d), (void __iomem *)(p) + (i)))
     83#define NV_RD32(p,i)    (__raw_readl((void __iomem *)(p) + (i)))
     84
     85#define VGA_WR08(p,i,d) (writeb((d), (void __iomem *)(p) + (i)))
     86#define VGA_RD08(p,i)   (readb((void __iomem *)(p) + (i)))
     87
     88/*
     89 * Define different architectures.
     90 */
     91#define NV_ARCH_03  0x03
     92#define NV_ARCH_04  0x04
     93#define NV_ARCH_10  0x10
     94#define NV_ARCH_20  0x20
     95#define NV_ARCH_30  0x30
     96#define NV_ARCH_40  0x40
     97
     98/***************************************************************************\
     99*                                                                           *
    100*                             FIFO registers.                               *
    101*                                                                           *
    102\***************************************************************************/
    103
    104/*
    105 * Raster OPeration. Windows style ROP3.
    106 */
    107typedef volatile struct
    108{
    109    U032 reserved00[4];
    110#ifdef __BIG_ENDIAN
    111    U032 FifoFree;
    112#else
    113    U016 FifoFree;
    114    U016 Nop;
    115#endif
    116    U032 reserved01[0x0BB];
    117    U032 Rop3;
    118} RivaRop;
    119/*
    120 * 8X8 Monochrome pattern.
    121 */
    122typedef volatile struct
    123{
    124    U032 reserved00[4];
    125#ifdef __BIG_ENDIAN
    126    U032 FifoFree;
    127#else
    128    U016 FifoFree;
    129    U016 Nop;
    130#endif
    131    U032 reserved01[0x0BD];
    132    U032 Shape;
    133    U032 reserved03[0x001];
    134    U032 Color0;
    135    U032 Color1;
    136    U032 Monochrome[2];
    137} RivaPattern;
    138/*
    139 * Scissor clip rectangle.
    140 */
    141typedef volatile struct
    142{
    143    U032 reserved00[4];
    144#ifdef __BIG_ENDIAN
    145    U032 FifoFree;
    146#else
    147    U016 FifoFree;
    148    U016 Nop;
    149#endif
    150    U032 reserved01[0x0BB];
    151    U032 TopLeft;
    152    U032 WidthHeight;
    153} RivaClip;
    154/*
    155 * 2D filled rectangle.
    156 */
    157typedef volatile struct
    158{
    159    U032 reserved00[4];
    160#ifdef __BIG_ENDIAN
    161    U032 FifoFree;
    162#else
    163    U016 FifoFree;
    164    U016 Nop[1];
    165#endif
    166    U032 reserved01[0x0BC];
    167    U032 Color;
    168    U032 reserved03[0x03E];
    169    U032 TopLeft;
    170    U032 WidthHeight;
    171} RivaRectangle;
    172/*
    173 * 2D screen-screen BLT.
    174 */
    175typedef volatile struct
    176{
    177    U032 reserved00[4];
    178#ifdef __BIG_ENDIAN
    179    U032 FifoFree;
    180#else
    181    U016 FifoFree;
    182    U016 Nop;
    183#endif
    184    U032 reserved01[0x0BB];
    185    U032 TopLeftSrc;
    186    U032 TopLeftDst;
    187    U032 WidthHeight;
    188} RivaScreenBlt;
    189/*
    190 * 2D pixel BLT.
    191 */
    192typedef volatile struct
    193{
    194    U032 reserved00[4];
    195#ifdef __BIG_ENDIAN
    196    U032 FifoFree;
    197#else
    198    U016 FifoFree;
    199    U016 Nop[1];
    200#endif
    201    U032 reserved01[0x0BC];
    202    U032 TopLeft;
    203    U032 WidthHeight;
    204    U032 WidthHeightIn;
    205    U032 reserved02[0x03C];
    206    U032 Pixels;
    207} RivaPixmap;
    208/*
    209 * Filled rectangle combined with monochrome expand.  Useful for glyphs.
    210 */
    211typedef volatile struct
    212{
    213    U032 reserved00[4];
    214#ifdef __BIG_ENDIAN
    215    U032 FifoFree;
    216#else
    217    U016 FifoFree;
    218    U016 Nop;
    219#endif
    220    U032 reserved01[0x0BB];
    221    U032 reserved03[(0x040)-1];
    222    U032 Color1A;
    223    struct
    224    {
    225        U032 TopLeft;
    226        U032 WidthHeight;
    227    } UnclippedRectangle[64];
    228    U032 reserved04[(0x080)-3];
    229    struct
    230    {
    231        U032 TopLeft;
    232        U032 BottomRight;
    233    } ClipB;
    234    U032 Color1B;
    235    struct
    236    {
    237        U032 TopLeft;
    238        U032 BottomRight;
    239    } ClippedRectangle[64];
    240    U032 reserved05[(0x080)-5];
    241    struct
    242    {
    243        U032 TopLeft;
    244        U032 BottomRight;
    245    } ClipC;
    246    U032 Color1C;
    247    U032 WidthHeightC;
    248    U032 PointC;
    249    U032 MonochromeData1C;
    250    U032 reserved06[(0x080)+121];
    251    struct
    252    {
    253        U032 TopLeft;
    254        U032 BottomRight;
    255    } ClipD;
    256    U032 Color1D;
    257    U032 WidthHeightInD;
    258    U032 WidthHeightOutD;
    259    U032 PointD;
    260    U032 MonochromeData1D;
    261    U032 reserved07[(0x080)+120];
    262    struct
    263    {
    264        U032 TopLeft;
    265        U032 BottomRight;
    266    } ClipE;
    267    U032 Color0E;
    268    U032 Color1E;
    269    U032 WidthHeightInE;
    270    U032 WidthHeightOutE;
    271    U032 PointE;
    272    U032 MonochromeData01E;
    273} RivaBitmap;
    274/*
    275 * 3D textured, Z buffered triangle.
    276 */
    277typedef volatile struct
    278{
    279    U032 reserved00[4];
    280#ifdef __BIG_ENDIAN
    281    U032 FifoFree;
    282#else
    283    U016 FifoFree;
    284    U016 Nop;
    285#endif
    286    U032 reserved01[0x0BC];
    287    U032 TextureOffset;
    288    U032 TextureFormat;
    289    U032 TextureFilter;
    290    U032 FogColor;
    291/* This is a problem on LynxOS */
    292#ifdef Control
    293#undef Control
    294#endif
    295    U032 Control;
    296    U032 AlphaTest;
    297    U032 reserved02[0x339];
    298    U032 FogAndIndex;
    299    U032 Color;
    300    float ScreenX;
    301    float ScreenY;
    302    float ScreenZ;
    303    float EyeM;
    304    float TextureS;
    305    float TextureT;
    306} RivaTexturedTriangle03;
    307typedef volatile struct
    308{
    309    U032 reserved00[4];
    310#ifdef __BIG_ENDIAN
    311    U032 FifoFree;
    312#else
    313    U016 FifoFree;
    314    U016 Nop;
    315#endif
    316    U032 reserved01[0x0BB];
    317    U032 ColorKey;
    318    U032 TextureOffset;
    319    U032 TextureFormat;
    320    U032 TextureFilter;
    321    U032 Blend;
    322/* This is a problem on LynxOS */
    323#ifdef Control
    324#undef Control
    325#endif
    326    U032 Control;
    327    U032 FogColor;
    328    U032 reserved02[0x39];
    329    struct
    330    {
    331        float ScreenX;
    332        float ScreenY;
    333        float ScreenZ;
    334        float EyeM;
    335        U032 Color;
    336        U032 Specular;
    337        float TextureS;
    338        float TextureT;
    339    } Vertex[16];
    340    U032 DrawTriangle3D;
    341} RivaTexturedTriangle05;
    342/*
    343 * 2D line.
    344 */
    345typedef volatile struct
    346{
    347    U032 reserved00[4];
    348#ifdef __BIG_ENDIAN
    349    U032 FifoFree;
    350#else
    351    U016 FifoFree;
    352    U016 Nop[1];
    353#endif
    354    U032 reserved01[0x0BC];
    355    U032 Color;             /* source color               0304-0307*/
    356    U032 Reserved02[0x03e];
    357    struct {                /* start aliased methods in array   0400-    */
    358        U032 point0;        /* y_x S16_S16 in pixels            0-   3*/
    359        U032 point1;        /* y_x S16_S16 in pixels            4-   7*/
    360    } Lin[16];              /* end of aliased methods in array      -047f*/
    361    struct {                /* start aliased methods in array   0480-    */
    362        U032 point0X;       /* in pixels, 0 at left                0-   3*/
    363        U032 point0Y;       /* in pixels, 0 at top                 4-   7*/
    364        U032 point1X;       /* in pixels, 0 at left                8-   b*/
    365        U032 point1Y;       /* in pixels, 0 at top                 c-   f*/
    366    } Lin32[8];             /* end of aliased methods in array      -04ff*/
    367    U032 PolyLin[32];       /* y_x S16_S16 in pixels         0500-057f*/
    368    struct {                /* start aliased methods in array   0580-    */
    369        U032 x;             /* in pixels, 0 at left                0-   3*/
    370        U032 y;             /* in pixels, 0 at top                 4-   7*/
    371    } PolyLin32[16];        /* end of aliased methods in array      -05ff*/
    372    struct {                /* start aliased methods in array   0600-    */
    373        U032 color;         /* source color                     0-   3*/
    374        U032 point;         /* y_x S16_S16 in pixels            4-   7*/
    375    } ColorPolyLin[16];     /* end of aliased methods in array      -067f*/
    376} RivaLine;
    377/*
    378 * 2D/3D surfaces
    379 */
    380typedef volatile struct
    381{
    382    U032 reserved00[4];
    383#ifdef __BIG_ENDIAN
    384    U032 FifoFree;
    385#else
    386    U016 FifoFree;
    387    U016 Nop;
    388#endif
    389    U032 reserved01[0x0BE];
    390    U032 Offset;
    391} RivaSurface;
    392typedef volatile struct
    393{
    394    U032 reserved00[4];
    395#ifdef __BIG_ENDIAN
    396    U032 FifoFree;
    397#else
    398    U016 FifoFree;
    399    U016 Nop;
    400#endif
    401    U032 reserved01[0x0BD];
    402    U032 Pitch;
    403    U032 RenderBufferOffset;
    404    U032 ZBufferOffset;
    405} RivaSurface3D;
    406    
    407/***************************************************************************\
    408*                                                                           *
    409*                        Virtualized RIVA H/W interface.                    *
    410*                                                                           *
    411\***************************************************************************/
    412
    413#define FP_ENABLE  1
    414#define FP_DITHER  2
    415
    416struct _riva_hw_inst;
    417struct _riva_hw_state;
    418/*
    419 * Virtialized chip interface. Makes RIVA 128 and TNT look alike.
    420 */
    421typedef struct _riva_hw_inst
    422{
    423    /*
    424     * Chip specific settings.
    425     */
    426    U032 Architecture;
    427    U032 Version;
    428    U032 Chipset;
    429    U032 CrystalFreqKHz;
    430    U032 RamAmountKBytes;
    431    U032 MaxVClockFreqKHz;
    432    U032 RamBandwidthKBytesPerSec;
    433    U032 EnableIRQ;
    434    U032 IO;
    435    U032 VBlankBit;
    436    U032 FifoFreeCount;
    437    U032 FifoEmptyCount;
    438    U032 CursorStart;
    439    U032 flatPanel;
    440    Bool twoHeads;
    441    /*
    442     * Non-FIFO registers.
    443     */
    444    volatile U032 __iomem *PCRTC0;
    445    volatile U032 __iomem *PCRTC;
    446    volatile U032 __iomem *PRAMDAC0;
    447    volatile U032 __iomem *PFB;
    448    volatile U032 __iomem *PFIFO;
    449    volatile U032 __iomem *PGRAPH;
    450    volatile U032 __iomem *PEXTDEV;
    451    volatile U032 __iomem *PTIMER;
    452    volatile U032 __iomem *PMC;
    453    volatile U032 __iomem *PRAMIN;
    454    volatile U032 __iomem *FIFO;
    455    volatile U032 __iomem *CURSOR;
    456    volatile U008 __iomem *PCIO0;
    457    volatile U008 __iomem *PCIO;
    458    volatile U008 __iomem *PVIO;
    459    volatile U008 __iomem *PDIO0;
    460    volatile U008 __iomem *PDIO;
    461    volatile U032 __iomem *PRAMDAC;
    462    /*
    463     * Common chip functions.
    464     */
    465    int  (*Busy)(struct _riva_hw_inst *);
    466    void (*LoadStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *);
    467    void (*UnloadStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *);
    468    void (*SetStartAddress)(struct _riva_hw_inst *,U032);
    469    void (*SetSurfaces2D)(struct _riva_hw_inst *,U032,U032);
    470    void (*SetSurfaces3D)(struct _riva_hw_inst *,U032,U032);
    471    int  (*ShowHideCursor)(struct _riva_hw_inst *,int);
    472    void (*LockUnlock)(struct _riva_hw_inst *, int);
    473    /*
    474     * Current extended mode settings.
    475     */
    476    struct _riva_hw_state *CurrentState;
    477    /*
    478     * FIFO registers.
    479     */
    480    RivaRop                 __iomem *Rop;
    481    RivaPattern             __iomem *Patt;
    482    RivaClip                __iomem *Clip;
    483    RivaPixmap              __iomem *Pixmap;
    484    RivaScreenBlt           __iomem *Blt;
    485    RivaBitmap              __iomem *Bitmap;
    486    RivaLine                __iomem *Line;
    487    RivaTexturedTriangle03  __iomem *Tri03;
    488    RivaTexturedTriangle05  __iomem *Tri05;
    489} RIVA_HW_INST;
    490/*
    491 * Extended mode state information.
    492 */
    493typedef struct _riva_hw_state
    494{
    495    U032 bpp;
    496    U032 width;
    497    U032 height;
    498    U032 interlace;
    499    U032 repaint0;
    500    U032 repaint1;
    501    U032 screen;
    502    U032 scale;
    503    U032 dither;
    504    U032 extra;
    505    U032 pixel;
    506    U032 horiz;
    507    U032 arbitration0;
    508    U032 arbitration1;
    509    U032 vpll;
    510    U032 vpll2;
    511    U032 pllsel;
    512    U032 general;
    513    U032 crtcOwner;
    514    U032 head; 
    515    U032 head2; 
    516    U032 config;
    517    U032 cursorConfig;	
    518    U032 cursor0;
    519    U032 cursor1;
    520    U032 cursor2;
    521    U032 offset0;
    522    U032 offset1;
    523    U032 offset2;
    524    U032 offset3;
    525    U032 pitch0;
    526    U032 pitch1;
    527    U032 pitch2;
    528    U032 pitch3;
    529} RIVA_HW_STATE;
    530
    531/*
    532 * function prototypes
    533 */
    534
    535extern int CalcStateExt
    536(
    537    RIVA_HW_INST  *chip,
    538    RIVA_HW_STATE *state,
    539    struct pci_dev *pdev,
    540    int            bpp,
    541    int            width,
    542    int            hDisplaySize,
    543    int            height,
    544    int            dotClock
    545);
    546
    547/*
    548 * External routines.
    549 */
    550int RivaGetConfig(RIVA_HW_INST *chip, struct pci_dev *pdev, unsigned int c);
    551/*
    552 * FIFO Free Count. Should attempt to yield processor if RIVA is busy.
    553 */
    554
    555#define RIVA_FIFO_FREE(hwinst,hwptr,cnt)                            \
    556{                                                                   \
    557    while ((hwinst).FifoFreeCount < (cnt)) {                        \
    558	mb();mb();						    \
    559        (hwinst).FifoFreeCount = NV_RD32(&(hwinst).hwptr->FifoFree, 0) >> 2;     \
    560    }								    \
    561    (hwinst).FifoFreeCount -= (cnt);                                \
    562}
    563#endif /* __RIVA_HW_H__ */
    564