riva_mmio.h
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:14k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  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. #ifndef __RIVA_HW_H__
  40. #define __RIVA_HW_H__
  41. #define RIVA_SW_VERSION 0x00010003
  42. /*
  43.  * Typedefs to force certain sized values.
  44.  */
  45. typedef Uint8  U008;
  46. typedef Uint16 U016;
  47. typedef Uint32 U032;
  48. /*
  49.  * HW access macros.
  50.  */
  51. #define NV_WR08(p,i,d)  (((U008 *)(p))[i]=(d))
  52. #define NV_RD08(p,i)    (((U008 *)(p))[i])
  53. #define NV_WR16(p,i,d)  (((U016 *)(p))[(i)/2]=(d))
  54. #define NV_RD16(p,i)    (((U016 *)(p))[(i)/2])
  55. #define NV_WR32(p,i,d)  (((U032 *)(p))[(i)/4]=(d))
  56. #define NV_RD32(p,i)    (((U032 *)(p))[(i)/4])
  57. #define VGA_WR08(p,i,d) NV_WR08(p,i,d)
  58. #define VGA_RD08(p,i)   NV_RD08(p,i)
  59. /*
  60.  * Define supported architectures.
  61.  */
  62. #define NV_ARCH_03  0x03
  63. #define NV_ARCH_04  0x04
  64. #define NV_ARCH_10  0x10
  65. /***************************************************************************
  66. *                                                                           *
  67. *                             FIFO registers.                               *
  68. *                                                                           *
  69. ***************************************************************************/
  70. /*
  71.  * Raster OPeration. Windows style ROP3.
  72.  */
  73. typedef volatile struct
  74. {
  75.     U032 reserved00[4];
  76.     U016 FifoFree;
  77.     U016 Nop;
  78.     U032 reserved01[0x0BB];
  79.     U032 Rop3;
  80. } RivaRop;
  81. /*
  82.  * 8X8 Monochrome pattern.
  83.  */
  84. typedef volatile struct
  85. {
  86.     U032 reserved00[4];
  87.     U016 FifoFree;
  88.     U016 Nop;
  89.     U032 reserved01[0x0BD];
  90.     U032 Shape;
  91.     U032 reserved03[0x001];
  92.     U032 Color0;
  93.     U032 Color1;
  94.     U032 Monochrome[2];
  95. } RivaPattern;
  96. /*
  97.  * Scissor clip rectangle.
  98.  */
  99. typedef volatile struct
  100. {
  101.     U032 reserved00[4];
  102.     U016 FifoFree;
  103.     U016 Nop;
  104.     U032 reserved01[0x0BB];
  105.     U032 TopLeft;
  106.     U032 WidthHeight;
  107. } RivaClip;
  108. /*
  109.  * 2D filled rectangle.
  110.  */
  111. typedef volatile struct
  112. {
  113.     U032 reserved00[4];
  114.     U016 FifoFree;
  115.     U016 Nop[1];
  116.     U032 reserved01[0x0BC];
  117.     U032 Color;
  118.     U032 reserved03[0x03E];
  119.     U032 TopLeft;
  120.     U032 WidthHeight;
  121. } RivaRectangle;
  122. /*
  123.  * 2D screen-screen BLT.
  124.  */
  125. typedef volatile struct
  126. {
  127.     U032 reserved00[4];
  128.     U016 FifoFree;
  129.     U016 Nop;
  130.     U032 reserved01[0x0BB];
  131.     U032 TopLeftSrc;
  132.     U032 TopLeftDst;
  133.     U032 WidthHeight;
  134. } RivaScreenBlt;
  135. /*
  136.  * 2D pixel BLT.
  137.  */
  138. typedef volatile struct
  139. {
  140.     U032 reserved00[4];
  141.     U016 FifoFree;
  142.     U016 Nop[1];
  143.     U032 reserved01[0x0BC];
  144.     U032 TopLeft;
  145.     U032 WidthHeight;
  146.     U032 WidthHeightIn;
  147.     U032 reserved02[0x03C];
  148.     U032 Pixels;
  149. } RivaPixmap;
  150. /*
  151.  * Filled rectangle combined with monochrome expand.  Useful for glyphs.
  152.  */
  153. typedef volatile struct
  154. {
  155.     U032 reserved00[4];
  156.     U016 FifoFree;
  157.     U016 Nop;
  158.     U032 reserved01[0x0BB];
  159.     U032 reserved03[(0x040)-1];
  160.     U032 Color1A;
  161.     struct
  162.     {
  163.         U032 TopLeft;
  164.         U032 WidthHeight;
  165.     } UnclippedRectangle[64];
  166.     U032 reserved04[(0x080)-3];
  167.     struct
  168.     {
  169.         U032 TopLeft;
  170.         U032 BottomRight;
  171.     } ClipB;
  172.     U032 Color1B;
  173.     struct
  174.     {
  175.         U032 TopLeft;
  176.         U032 BottomRight;
  177.     } ClippedRectangle[64];
  178.     U032 reserved05[(0x080)-5];
  179.     struct
  180.     {
  181.         U032 TopLeft;
  182.         U032 BottomRight;
  183.     } ClipC;
  184.     U032 Color1C;
  185.     U032 WidthHeightC;
  186.     U032 PointC;
  187.     U032 MonochromeData1C;
  188.     U032 reserved06[(0x080)+121];
  189.     struct
  190.     {
  191.         U032 TopLeft;
  192.         U032 BottomRight;
  193.     } ClipD;
  194.     U032 Color1D;
  195.     U032 WidthHeightInD;
  196.     U032 WidthHeightOutD;
  197.     U032 PointD;
  198.     U032 MonochromeData1D;
  199.     U032 reserved07[(0x080)+120];
  200.     struct
  201.     {
  202.         U032 TopLeft;
  203.         U032 BottomRight;
  204.     } ClipE;
  205.     U032 Color0E;
  206.     U032 Color1E;
  207.     U032 WidthHeightInE;
  208.     U032 WidthHeightOutE;
  209.     U032 PointE;
  210.     U032 MonochromeData01E;
  211. } RivaBitmap;
  212. /*
  213.  * 3D textured, Z buffered triangle.
  214.  */
  215. typedef volatile struct
  216. {
  217.     U032 reserved00[4];
  218.     U016 FifoFree;
  219.     U016 Nop;
  220.     U032 reserved01[0x0BC];
  221.     U032 TextureOffset;
  222.     U032 TextureFormat;
  223.     U032 TextureFilter;
  224.     U032 FogColor;
  225. /* This is a problem on LynxOS */
  226. #ifdef Control
  227. #undef Control
  228. #endif
  229.     U032 Control;
  230.     U032 AlphaTest;
  231.     U032 reserved02[0x339];
  232.     U032 FogAndIndex;
  233.     U032 Color;
  234.     float ScreenX;
  235.     float ScreenY;
  236.     float ScreenZ;
  237.     float EyeM;
  238.     float TextureS;
  239.     float TextureT;
  240. } RivaTexturedTriangle03;
  241. typedef volatile struct
  242. {
  243.     U032 reserved00[4];
  244.     U016 FifoFree;
  245.     U016 Nop;
  246.     U032 reserved01[0x0BB];
  247.     U032 ColorKey;
  248.     U032 TextureOffset;
  249.     U032 TextureFormat;
  250.     U032 TextureFilter;
  251.     U032 Blend;
  252. /* This is a problem on LynxOS */
  253. #ifdef Control
  254. #undef Control
  255. #endif
  256.     U032 Control;
  257.     U032 FogColor;
  258.     U032 reserved02[0x39];
  259.     struct
  260.     {
  261.         float ScreenX;
  262.         float ScreenY;
  263.         float ScreenZ;
  264.         float EyeM;
  265.         U032 Color;
  266.         U032 Specular;
  267.         float TextureS;
  268.         float TextureT;
  269.     } Vertex[16];
  270.     U032 DrawTriangle3D;
  271. } RivaTexturedTriangle05;
  272. /*
  273.  * 2D line.
  274.  */
  275. typedef volatile struct
  276. {
  277.     U032 reserved00[4];
  278.     U016 FifoFree;
  279.     U016 Nop[1];
  280.     U032 reserved01[0x0BC];
  281.     U032 Color;             /* source color               0304-0307*/
  282.     U032 Reserved02[0x03e];
  283.     struct {                /* start aliased methods in array   0400-    */
  284.         U032 point0;        /* y_x S16_S16 in pixels            0-   3*/
  285.         U032 point1;        /* y_x S16_S16 in pixels            4-   7*/
  286.     } Lin[16];              /* end of aliased methods in array      -047f*/
  287.     struct {                /* start aliased methods in array   0480-    */
  288.         U032 point0X;       /* in pixels, 0 at left                0-   3*/
  289.         U032 point0Y;       /* in pixels, 0 at top                 4-   7*/
  290.         U032 point1X;       /* in pixels, 0 at left                8-   b*/
  291.         U032 point1Y;       /* in pixels, 0 at top                 c-   f*/
  292.     } Lin32[8];             /* end of aliased methods in array      -04ff*/
  293.     U032 PolyLin[32];       /* y_x S16_S16 in pixels         0500-057f*/
  294.     struct {                /* start aliased methods in array   0580-    */
  295.         U032 x;             /* in pixels, 0 at left                0-   3*/
  296.         U032 y;             /* in pixels, 0 at top                 4-   7*/
  297.     } PolyLin32[16];        /* end of aliased methods in array      -05ff*/
  298.     struct {                /* start aliased methods in array   0600-    */
  299.         U032 color;         /* source color                     0-   3*/
  300.         U032 point;         /* y_x S16_S16 in pixels            4-   7*/
  301.     } ColorPolyLin[16];     /* end of aliased methods in array      -067f*/
  302. } RivaLine;
  303. /*
  304.  * 2D/3D surfaces
  305.  */
  306. typedef volatile struct
  307. {
  308.     U032 reserved00[4];
  309.     U016 FifoFree;
  310.     U016 Nop;
  311.     U032 reserved01[0x0BE];
  312.     U032 Offset;
  313. } RivaSurface;
  314. typedef volatile struct
  315. {
  316.     U032 reserved00[4];
  317.     U016 FifoFree;
  318.     U016 Nop;
  319.     U032 reserved01[0x0BD];
  320.     U032 Pitch;
  321.     U032 RenderBufferOffset;
  322.     U032 ZBufferOffset;
  323. } RivaSurface3D;
  324.     
  325. /***************************************************************************
  326. *                                                                           *
  327. *                        Virtualized RIVA H/W interface.                    *
  328. *                                                                           *
  329. ***************************************************************************/
  330. struct _riva_hw_inst;
  331. struct _riva_hw_state;
  332. /*
  333.  * Virtialized chip interface. Makes RIVA 128 and TNT look alike.
  334.  */
  335. typedef struct _riva_hw_inst
  336. {
  337.     /*
  338.      * Chip specific settings.
  339.      */
  340.     U032 Architecture;
  341.     U032 Version;
  342.     U032 CrystalFreqKHz;
  343.     U032 RamAmountKBytes;
  344.     U032 MaxVClockFreqKHz;
  345.     U032 RamBandwidthKBytesPerSec;
  346.     U032 EnableIRQ;
  347.     U032 IO;
  348.     U032 VBlankBit;
  349.     U032 FifoFreeCount;
  350.     U032 FifoEmptyCount;
  351.     /*
  352.      * Non-FIFO registers.
  353.      */
  354.     volatile U032 *PCRTC;
  355.     volatile U032 *PRAMDAC;
  356.     volatile U032 *PFB;
  357.     volatile U032 *PFIFO;
  358.     volatile U032 *PGRAPH;
  359.     volatile U032 *PEXTDEV;
  360.     volatile U032 *PTIMER;
  361.     volatile U032 *PMC;
  362.     volatile U032 *PRAMIN;
  363.     volatile U032 *FIFO;
  364.     volatile U032 *CURSOR;
  365.     volatile U032 *CURSORPOS;
  366.     volatile U032 *VBLANKENABLE;
  367.     volatile U032 *VBLANK;
  368.     volatile U008 *PCIO;
  369.     volatile U008 *PVIO;
  370.     volatile U008 *PDIO;
  371.     /*
  372.      * Common chip functions.
  373.      */
  374.     int  (*Busy)(struct _riva_hw_inst *);
  375.     void (*CalcStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *,int,int,int,int,int,int,int,int,int,int,int,int,int);
  376.     void (*LoadStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *);
  377.     void (*UnloadStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *);
  378.     void (*SetStartAddress)(struct _riva_hw_inst *,U032);
  379.     void (*SetSurfaces2D)(struct _riva_hw_inst *,U032,U032);
  380.     void (*SetSurfaces3D)(struct _riva_hw_inst *,U032,U032);
  381.     int  (*ShowHideCursor)(struct _riva_hw_inst *,int);
  382.     void (*LockUnlock)(struct _riva_hw_inst *, int);
  383.     /*
  384.      * Current extended mode settings.
  385.      */
  386.     struct _riva_hw_state *CurrentState;
  387.     /*
  388.      * FIFO registers.
  389.      */
  390.     RivaRop                 *Rop;
  391.     RivaPattern             *Patt;
  392.     RivaClip                *Clip;
  393.     RivaPixmap              *Pixmap;
  394.     RivaScreenBlt           *Blt;
  395.     RivaBitmap              *Bitmap;
  396.     RivaLine                *Line;
  397.     RivaTexturedTriangle03  *Tri03;
  398.     RivaTexturedTriangle05  *Tri05;
  399. } RIVA_HW_INST;
  400. /*
  401.  * Extended mode state information.
  402.  */
  403. typedef struct _riva_hw_state
  404. {
  405.     U032 bpp;
  406.     U032 width;
  407.     U032 height;
  408.     U032 repaint0;
  409.     U032 repaint1;
  410.     U032 screen;
  411.     U032 pixel;
  412.     U032 horiz;
  413.     U032 arbitration0;
  414.     U032 arbitration1;
  415.     U032 vpll;
  416.     U032 pllsel;
  417.     U032 general;
  418.     U032 config;
  419.     U032 cursor0;
  420.     U032 cursor1;
  421.     U032 cursor2;
  422.     U032 offset0;
  423.     U032 offset1;
  424.     U032 offset2;
  425.     U032 offset3;
  426.     U032 pitch0;
  427.     U032 pitch1;
  428.     U032 pitch2;
  429.     U032 pitch3;
  430. } RIVA_HW_STATE;
  431. /*
  432.  * FIFO Free Count. Should attempt to yield processor if RIVA is busy.
  433.  */
  434. #define RIVA_FIFO_FREE(hwptr,cnt)                                  
  435. {                                                                  
  436.    while (FifoFreeCount < (cnt))                                   
  437. FifoFreeCount = hwptr->FifoFree >> 2;                      
  438.    FifoFreeCount -= (cnt);                                         
  439. }
  440. #endif /* __RIVA_HW_H__ */