📄 riva_hw.h
字号:
*/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 2struct _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 (*CalcStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *,int,int,int,int,int); 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;/* * 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__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -