riva_hw.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:14k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

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