diff options
Diffstat (limited to 'libre/sdl-libre/riva_mmio.patch')
-rw-r--r-- | libre/sdl-libre/riva_mmio.patch | 554 |
1 files changed, 554 insertions, 0 deletions
diff --git a/libre/sdl-libre/riva_mmio.patch b/libre/sdl-libre/riva_mmio.patch new file mode 100644 index 000000000..945d9bf9b --- /dev/null +++ b/libre/sdl-libre/riva_mmio.patch @@ -0,0 +1,554 @@ +--- src/video/fbcon/riva_mmio.h 2012-01-19 04:30:06.000000000 -0200 ++++ /dev/null 2012-04-01 13:58:27.776718756 -0300 +@@ -1,449 +0,0 @@ +-/***************************************************************************\ +-|* *| +-|* 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. *| +-|* *| +-\***************************************************************************/ +- +-#ifndef __RIVA_HW_H__ +-#define __RIVA_HW_H__ +-#define RIVA_SW_VERSION 0x00010003 +- +-/* +- * Typedefs to force certain sized values. +- */ +-typedef Uint8 U008; +-typedef Uint16 U016; +-typedef Uint32 U032; +- +-/* +- * HW access macros. +- */ +-#define NV_WR08(p,i,d) (((U008 *)(p))[i]=(d)) +-#define NV_RD08(p,i) (((U008 *)(p))[i]) +-#define NV_WR16(p,i,d) (((U016 *)(p))[(i)/2]=(d)) +-#define NV_RD16(p,i) (((U016 *)(p))[(i)/2]) +-#define NV_WR32(p,i,d) (((U032 *)(p))[(i)/4]=(d)) +-#define NV_RD32(p,i) (((U032 *)(p))[(i)/4]) +-#define VGA_WR08(p,i,d) NV_WR08(p,i,d) +-#define VGA_RD08(p,i) NV_RD08(p,i) +- +-/* +- * Define supported architectures. +- */ +-#define NV_ARCH_03 0x03 +-#define NV_ARCH_04 0x04 +-#define NV_ARCH_10 0x10 +-/***************************************************************************\ +-* * +-* FIFO registers. * +-* * +-\***************************************************************************/ +- +-/* +- * Raster OPeration. Windows style ROP3. +- */ +-typedef volatile struct +-{ +- U032 reserved00[4]; +- U016 FifoFree; +- U016 Nop; +- U032 reserved01[0x0BB]; +- U032 Rop3; +-} RivaRop; +-/* +- * 8X8 Monochrome pattern. +- */ +-typedef volatile struct +-{ +- U032 reserved00[4]; +- U016 FifoFree; +- U016 Nop; +- 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]; +- U016 FifoFree; +- U016 Nop; +- U032 reserved01[0x0BB]; +- U032 TopLeft; +- U032 WidthHeight; +-} RivaClip; +-/* +- * 2D filled rectangle. +- */ +-typedef volatile struct +-{ +- U032 reserved00[4]; +- U016 FifoFree; +- U016 Nop[1]; +- U032 reserved01[0x0BC]; +- U032 Color; +- U032 reserved03[0x03E]; +- U032 TopLeft; +- U032 WidthHeight; +-} RivaRectangle; +-/* +- * 2D screen-screen BLT. +- */ +-typedef volatile struct +-{ +- U032 reserved00[4]; +- U016 FifoFree; +- U016 Nop; +- U032 reserved01[0x0BB]; +- U032 TopLeftSrc; +- U032 TopLeftDst; +- U032 WidthHeight; +-} RivaScreenBlt; +-/* +- * 2D pixel BLT. +- */ +-typedef volatile struct +-{ +- U032 reserved00[4]; +- U016 FifoFree; +- U016 Nop[1]; +- 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]; +- U016 FifoFree; +- U016 Nop; +- 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]; +- U016 FifoFree; +- U016 Nop; +- 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]; +- U016 FifoFree; +- U016 Nop; +- 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]; +- U016 FifoFree; +- U016 Nop[1]; +- 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]; +- U016 FifoFree; +- U016 Nop; +- U032 reserved01[0x0BE]; +- U032 Offset; +-} RivaSurface; +-typedef volatile struct +-{ +- U032 reserved00[4]; +- U016 FifoFree; +- U016 Nop; +- U032 reserved01[0x0BD]; +- U032 Pitch; +- U032 RenderBufferOffset; +- U032 ZBufferOffset; +-} RivaSurface3D; +- +-/***************************************************************************\ +-* * +-* Virtualized RIVA H/W interface. * +-* * +-\***************************************************************************/ +- +-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 CrystalFreqKHz; +- U032 RamAmountKBytes; +- U032 MaxVClockFreqKHz; +- U032 RamBandwidthKBytesPerSec; +- U032 EnableIRQ; +- U032 IO; +- U032 VBlankBit; +- U032 FifoFreeCount; +- U032 FifoEmptyCount; +- /* +- * Non-FIFO registers. +- */ +- volatile U032 *PCRTC; +- volatile U032 *PRAMDAC; +- volatile U032 *PFB; +- volatile U032 *PFIFO; +- volatile U032 *PGRAPH; +- volatile U032 *PEXTDEV; +- volatile U032 *PTIMER; +- volatile U032 *PMC; +- volatile U032 *PRAMIN; +- volatile U032 *FIFO; +- volatile U032 *CURSOR; +- volatile U032 *CURSORPOS; +- volatile U032 *VBLANKENABLE; +- volatile U032 *VBLANK; +- volatile U008 *PCIO; +- volatile U008 *PVIO; +- volatile U008 *PDIO; +- /* +- * Common chip functions. +- */ +- int (*Busy)(struct _riva_hw_inst *); +- void (*CalcStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *,int,int,int,int,int,int,int,int,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 *Rop; +- RivaPattern *Patt; +- RivaClip *Clip; +- RivaPixmap *Pixmap; +- RivaScreenBlt *Blt; +- RivaBitmap *Bitmap; +- RivaLine *Line; +- RivaTexturedTriangle03 *Tri03; +- RivaTexturedTriangle05 *Tri05; +-} RIVA_HW_INST; +-/* +- * Extended mode state information. +- */ +-typedef struct _riva_hw_state +-{ +- U032 bpp; +- U032 width; +- U032 height; +- U032 repaint0; +- U032 repaint1; +- U032 screen; +- U032 pixel; +- U032 horiz; +- U032 arbitration0; +- U032 arbitration1; +- U032 vpll; +- U032 pllsel; +- U032 general; +- U032 config; +- 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; +- +-/* +- * FIFO Free Count. Should attempt to yield processor if RIVA is busy. +- */ +- +-#define RIVA_FIFO_FREE(hwptr,cnt) \ +-{ \ +- while (FifoFreeCount < (cnt)) \ +- FifoFreeCount = hwptr->FifoFree >> 2; \ +- FifoFreeCount -= (cnt); \ +-} +-#endif /* __RIVA_HW_H__ */ +- +--- src/video/fbcon/SDL_fbriva.c 2012-01-19 04:30:06.000000000 -0200 ++++ src/video/fbcon/SDL_fbriva.c 2012-04-01 15:10:10.108451467 -0300 +@@ -24,12 +24,10 @@ + #include "SDL_video.h" + #include "../SDL_blit.h" + #include "SDL_fbriva.h" +-#include "riva_mmio.h" + #include "riva_regs.h" + + + static int FifoEmptyCount = 0; +-static int FifoFreeCount = 0; + + /* Wait for vertical retrace */ + static void WaitVBL(_THIS) +@@ -41,20 +39,6 @@ + while ( !(*port & 0x08) ) + ; + } +-static void NV3WaitIdle(_THIS) +-{ +- RivaRop *Rop = (RivaRop *)(mapped_io + ROP_OFFSET); +- while ( (Rop->FifoFree < FifoEmptyCount) || +- (*(mapped_io + PGRAPH_OFFSET + 0x000006B0) & 0x01) ) +- ; +-} +-static void NV4WaitIdle(_THIS) +-{ +- RivaRop *Rop = (RivaRop *)(mapped_io + ROP_OFFSET); +- while ( (Rop->FifoFree < FifoEmptyCount) || +- (*(mapped_io + PGRAPH_OFFSET + 0x00000700) & 0x01) ) +- ; +-} + + #if 0 /* Not yet implemented? */ + /* Sets video mem colorkey and accelerated blit function */ +@@ -74,7 +58,6 @@ + { + int dstX, dstY; + int dstW, dstH; +- RivaBitmap *Bitmap = (RivaBitmap *)(mapped_io + BITMAP_OFFSET); + + /* Don't blit to the display surface when switched away */ + if ( switched_away ) { +@@ -93,13 +76,6 @@ + dstX += rect->x; + dstY += rect->y; + +- RIVA_FIFO_FREE(Bitmap, 1); +- Bitmap->Color1A = color; +- +- RIVA_FIFO_FREE(Bitmap, 2); +- Bitmap->UnclippedRectangle[0].TopLeft = (dstX << 16) | dstY; +- Bitmap->UnclippedRectangle[0].WidthHeight = (dstW << 16) | dstH; +- + FB_AddBusySurface(dst); + + if ( dst == this->screen ) { +@@ -115,7 +91,6 @@ + int srcX, srcY; + int dstX, dstY; + int dstW, dstH; +- RivaScreenBlt *Blt = (RivaScreenBlt *)(mapped_io + BLT_OFFSET); + + /* FIXME: For now, only blit to display surface */ + if ( dst->pitch != SDL_VideoSurface->pitch ) { +@@ -142,11 +117,6 @@ + dstX += dstrect->x; + dstY += dstrect->y; + +- RIVA_FIFO_FREE(Blt, 3); +- Blt->TopLeftSrc = (srcY << 16) | srcX; +- Blt->TopLeftDst = (dstY << 16) | dstX; +- Blt->WidthHeight = (dstH << 16) | dstW; +- + FB_AddBusySurface(src); + FB_AddBusySurface(dst); + +@@ -185,23 +155,15 @@ + + void FB_RivaAccel(_THIS, __u32 card) + { +- RivaRop *Rop = (RivaRop *)(mapped_io + ROP_OFFSET); + + /* We have hardware accelerated surface functions */ + this->CheckHWBlit = CheckHWBlit; + wait_vbl = WaitVBL; + switch (card) { +- case FB_ACCEL_NV3: +- wait_idle = NV3WaitIdle; +- break; +- case FB_ACCEL_NV4: +- wait_idle = NV4WaitIdle; +- break; + default: + /* Hmm... FIXME */ + break; + } +- FifoEmptyCount = Rop->FifoFree; + + /* The Riva has an accelerated color fill */ + this->info.blit_fill = 1; |