diff options
Diffstat (limited to 'src/savage_driver.h')
-rw-r--r-- | src/savage_driver.h | 1234 |
1 files changed, 630 insertions, 604 deletions
diff --git a/src/savage_driver.h b/src/savage_driver.h index d571771..b99c5b5 100644 --- a/src/savage_driver.h +++ b/src/savage_driver.h @@ -1,605 +1,631 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.h,v 1.16 2003/01/18 15:22:30 eich Exp $ */ - -#ifndef SAVAGE_VGAHWMMIO_H -#define SAVAGE_VGAHWMMIO_H - -#include <stdio.h> -#include <string.h> -#include <math.h> - -#define MODE_24 24 - -#include "compiler.h" -#include "vgaHW.h" -#include "xf86.h" -#include "xf86Resources.h" -#include "xf86Pci.h" -#include "xf86PciInfo.h" -#include "xf86_OSproc.h" -#include "xf86Cursor.h" -#include "mipointer.h" -#include "micmap.h" -#include "fb.h" -#include "fboverlay.h" -#include "xf86cmap.h" -#include "vbe.h" -#include "xaa.h" -#include "exa.h" -#include "xf86xv.h" - -#include "savage_regs.h" -#include "savage_vbe.h" - -#ifdef XF86DRI -#define _XF86DRI_SERVER_ -#include "savage_dripriv.h" -#include "savage_dri.h" -#include "dri.h" -#include "GL/glxint.h" -#include "xf86drm.h" - -/* Totals 2 Mbytes which equals 2^16 32-byte vertices divided among up - * to 32 clients. */ -#define SAVAGE_NUM_BUFFERS 32 -#define SAVAGE_BUFFER_SIZE (1 << 16) /* 64k */ - -#define SAVAGE_CMDDMA_SIZE 0x100000 /* 1MB */ - -#define SAVAGE_DEFAULT_AGP_MODE 1 -#define SAVAGE_MAX_AGP_MODE 4 - -/* Buffer are aligned on 4096 byte boundaries. - */ -/* this is used for backbuffer, depthbuffer, etc..*/ -/* alignment */ - -#define SAVAGE_BUFFER_ALIGN 0x00000fff - -typedef struct _server{ - int reserved_map_agpstart; - int reserved_map_idx; - - int sarea_priv_offset; - - int chipset; - int sgram; /* seems no use */ - - unsigned int frontOffset; - unsigned int frontPitch; - unsigned int frontbufferSize; - unsigned int frontBitmapDesc; - - unsigned int backOffset; - unsigned int backPitch; - unsigned int backbufferSize; - unsigned int backBitmapDesc; - - unsigned int depthOffset; - unsigned int depthPitch; - unsigned int depthbufferSize; - unsigned int depthBitmapDesc; - - unsigned int textureOffset; - int textureSize; - int logTextureGranularity; - - drmRegion agp; - - /* PCI mappings */ - drmRegion aperture; - drmRegion registers; - drmRegion status; - - /* AGP mappings */ - drmRegion buffers; - drmRegion agpTextures; - int logAgpTextureGranularity; - - /* command DMA */ - drmRegion cmdDma; -} SAVAGEDRIServerPrivateRec, *SAVAGEDRIServerPrivatePtr; - -#endif - -typedef enum { - MT_NONE, - MT_CRT, - MT_LCD, - MT_DFP, - MT_TV -} SavageMonitorType; - -typedef struct -{ - Bool HasSecondary; - Bool TvOn; - ScrnInfoPtr pSecondaryScrn; - ScrnInfoPtr pPrimaryScrn; - -} SavageEntRec, *SavageEntPtr; - -#define VGAIN8(addr) MMIO_IN8(psav->MapBase+0x8000, addr) -#define VGAIN16(addr) MMIO_IN16(psav->MapBase+0x8000, addr) -#define VGAIN(addr) MMIO_IN32(psav->MapBase+0x8000, addr) - -#define VGAOUT8(addr,val) MMIO_OUT8(psav->MapBase+0x8000, addr, val) -#define VGAOUT16(addr,val) MMIO_OUT16(psav->MapBase+0x8000, addr, val) -#define VGAOUT(addr,val) MMIO_OUT32(psav->MapBase+0x8000, addr, val) - -#define INREG8(addr) MMIO_IN8(psav->MapBase, addr) -#define INREG16(addr) MMIO_IN16(psav->MapBase, addr) -#define INREG32(addr) MMIO_IN32(psav->MapBase, addr) -#define OUTREG8(addr,val) MMIO_OUT8(psav->MapBase, addr, val) -#define OUTREG16(addr,val) MMIO_OUT16(psav->MapBase, addr, val) -#define OUTREG32(addr,val) MMIO_OUT32(psav->MapBase, addr, val) -#define INREG(addr) INREG32(addr) -#define OUTREG(addr,val) OUTREG32(addr,val) - -#if X_BYTE_ORDER == X_LITTLE_ENDIAN -#define B_O16(x) (x) -#define B_O32(x) (x) -#else -#define B_O16(x) ((((x) & 0xff) << 8) | (((x) & 0xff) >> 8)) -#define B_O32(x) ((((x) & 0xff) << 24) | (((x) & 0xff00) << 8) \ - | (((x) & 0xff0000) >> 8) | (((x) & 0xff000000) >> 24)) -#endif -#define L_ADD(x) (B_O32(x) & 0xffff) + ((B_O32(x) >> 12) & 0xffff00) - -#define SAVAGEIOMAPSIZE 0x80000 - -#define SAVAGE_CRT_ON 1 -#define SAVAGE_LCD_ON 2 -#define SAVAGE_TV_ON 4 - -#define SAVAGE_DRIVER_NAME "savage" -#define SAVAGE_DRIVER_VERSION "2.1.1" -#define SAVAGE_VERSION_MAJOR 2 -#define SAVAGE_VERSION_MINOR 1 -#define SAVAGE_PATCHLEVEL 1 -#define SAVAGE_VERSION ((SAVAGE_VERSION_MAJOR << 24) | \ - (SAVAGE_VERSION_MINOR << 16) | \ - SAVAGE_PATCHLEVEL) - -typedef struct _S3VMODEENTRY { - unsigned short Width; - unsigned short Height; - unsigned short VesaMode; - unsigned char RefreshCount; - unsigned char * RefreshRate; -} SavageModeEntry, *SavageModeEntryPtr; - - -typedef struct _S3VMODETABLE { - unsigned short NumModes; - SavageModeEntry Modes[1]; -} SavageModeTableRec, *SavageModeTablePtr; - - -typedef struct { - unsigned int mode, refresh; - unsigned char SR08, SR0E, SR0F; - unsigned char SR10, SR11, SR12, SR13, SR15, SR18, SR1B, SR29, SR30; - unsigned char SR54[8]; - unsigned char Clock; - unsigned char CR31, CR32, CR33, CR34, CR36, CR3A, CR3B, CR3C; - unsigned char CR40, CR41, CR42, CR43, CR45; - unsigned char CR50, CR51, CR53, CR55, CR58, CR5B, CR5D, CR5E; - unsigned char CR60, CR63, CR65, CR66, CR67, CR68, CR69, CR6D, CR6F; - unsigned char CR86, CR88; - unsigned char CR90, CR91, CRB0; - unsigned int STREAMS[22]; /* yuck, streams regs */ - unsigned int MMPR0, MMPR1, MMPR2, MMPR3; -} SavageRegRec, *SavageRegPtr; - -typedef struct { - CARD32 redMask, greenMask, blueMask; - int redShift, greenShift, blueShift; -} savageOverlayRec; - -/* Tiling defines */ -#define TILE_SIZE_BYTE 2048 /* 0x800, 2K */ -#define TILE_SIZE_BYTE_2000 4096 - -#define TILEHEIGHT_16BPP 16 -#define TILEHEIGHT_32BPP 16 -#define TILEHEIGHT 16 /* all 16 and 32bpp tiles are 16 lines high */ -#define TILEHEIGHT_2000 32 /* 32 lines on savage 2000 */ - -#define TILEWIDTH_BYTES 128 /* 2048/TILEHEIGHT (** not for use w/8bpp tiling) */ -#define TILEWIDTH8BPP_BYTES 64 /* 2048/TILEHEIGHT_8BPP */ -#define TILEWIDTH_16BPP 64 /* TILEWIDTH_BYTES/2-BYTES-PER-PIXEL */ -#define TILEWIDTH_32BPP 32 /* TILEWIDTH_BYTES/4-BYTES-PER-PIXEL */ - -/* Bitmap descriptor structures for BCI */ -typedef struct _HIGH { - unsigned short Stride; - unsigned char Bpp; - unsigned char ResBWTile; -} HIGH; - -typedef struct _BMPDESC1 { - unsigned long Offset; - HIGH HighPart; -} BMPDESC1; - -typedef struct _BMPDESC2 { - unsigned long LoPart; - unsigned long HiPart; -} BMPDESC2; - -typedef union _BMPDESC { - BMPDESC1 bd1; - BMPDESC2 bd2; -} BMPDESC; - -typedef struct _StatInfo { - int origMode; - int pageCnt; - pointer statBuf; - int realSeg; - int realOff; -} StatInfoRec,*StatInfoPtr; - -typedef struct _Savage { - SavageRegRec SavedReg; - SavageRegRec ModeReg; - xf86CursorInfoPtr CursorInfoRec; - Bool ModeStructInit; - Bool NeedSTREAMS; - Bool STREAMSRunning; - int Bpp, Bpl, ScissB; - unsigned PlaneMask; - I2CBusPtr I2C; - I2CBusPtr DVI; - unsigned char DDCPort; - unsigned char I2CPort; - - int videoRambytes; - int videoRamKbytes; - int MemOffScreen; - int CursorKByte; - int endfb; - - /* These are physical addresses. */ - unsigned long FrameBufferBase; - unsigned long MmioBase; - unsigned long ApertureBase; - unsigned long ShadowPhysical; - - /* These are linear addresses. */ - unsigned char* MapBase; - unsigned char* BciMem; - unsigned char* MapBaseDense; - unsigned char* FBBase; - unsigned char* ApertureMap; - unsigned char* FBStart; - CARD32 volatile * ShadowVirtual; - - Bool PrimaryVidMapped; - int maxClock; - int HorizScaleFactor; - int MCLK, REFCLK, LCDclk; - double refclk_fact; - int GEResetCnt; - - /* Here are all the Options */ - - OptionInfoPtr Options; - Bool ShowCache; - Bool pci_burst; - Bool NoPCIRetry; - Bool fifo_conservative; - Bool fifo_moderate; - Bool fifo_aggressive; - Bool hwcursor; - Bool hwc_on; - Bool NoAccel; - Bool shadowFB; - Bool UseBIOS; - int rotate; - double LCDClock; - Bool ConfigShadowStatus; /* from the config */ - Bool ShadowStatus; /* automatically enabled with DRI */ - Bool ForceShadowStatus; /* true if explicitly set in conf */ - Bool CrtOnly; - Bool TvOn; - Bool PAL; - Bool ForceInit; - int iDevInfo; - int iDevInfoPrim; - - Bool FPExpansion; - int PanelX; /* panel width */ - int PanelY; /* panel height */ - int iResX; /* crtc X display */ - int iResY; /* crtc Y display */ - int XFactor; /* overlay X factor */ - int YFactor; /* overlay Y factor */ - int displayXoffset; /* overlay X offset */ - int displayYoffset; /* overlay Y offset */ - int XExp1; /* expansion ratio in x */ - int XExp2; - int YExp1; /* expansion ratio in x */ - int YExp2; - int cxScreen; - int TVSizeX; - int TVSizeY; - - CloseScreenProcPtr CloseScreen; - pciVideoPtr PciInfo; - PCITAG PciTag; - int Chipset; - int ChipId; - int ChipRev; - vbeInfoPtr pVbe; - int EntityIndex; - int ShadowCounter; - int vgaIOBase; /* 3b0 or 3d0 */ - - /* The various Savage wait handlers. */ - int (*WaitQueue)(struct _Savage *, int); - int (*WaitIdle)(struct _Savage *); - int (*WaitIdleEmpty)(struct _Savage *); - - /* Support for shadowFB and rotation */ - unsigned char * ShadowPtr; - int ShadowPitch; - void (*PointerMoved)(int index, int x, int y); - - /* support for EXA */ - ExaDriverPtr EXADriverPtr; - Bool useEXA; - unsigned long EXAendfb; - unsigned long pbd_offset; - unsigned long sbd_offset; - unsigned long pbd_high; - unsigned long sbd_high; - - /* Support for XAA acceleration */ - XAAInfoRecPtr AccelInfoRec; - xRectangle Rect; - unsigned int SavedBciCmd; - unsigned int SavedFgColor; - unsigned int SavedBgColor; - unsigned int SavedSbdOffset; - unsigned int SavedSbd; - - SavageModeTablePtr ModeTable; - - /* Support for the Savage command overflow buffer. */ - unsigned long cobIndex; /* size index */ - unsigned long cobSize; /* size in bytes */ - unsigned long cobOffset; /* offset in frame buffer */ - unsigned long bciThresholdLo; /* low and high thresholds for */ - unsigned long bciThresholdHi; /* shadow status update (32bit words) */ - unsigned long bciUsedMask; /* BCI entries used mask */ - unsigned int eventStatusReg; /* Status register index that holds - * event counter 0. */ - - /* Support for DGA */ - int numDGAModes; - DGAModePtr DGAModes; - Bool DGAactive; - int DGAViewportStatus; - - /* Support for XVideo */ - - unsigned int videoFlags; - unsigned int blendBase; - int videoFourCC; - XF86VideoAdaptorPtr adaptor; - int VideoZoomMax; - int dwBCIWait2DIdle; - XF86OffscreenImagePtr offscreenImages; - - /* Support for Overlays */ - unsigned char * FBStart2nd; - savageOverlayRec overlay; - int overlayDepth; - int primStreamBpp; - -#ifdef XF86DRI - int LockHeld; - Bool directRenderingEnabled; - DRIInfoPtr pDRIInfo; - int drmFD; - int numVisualConfigs; - __GLXvisualConfig* pVisualConfigs; - SAVAGEConfigPrivPtr pVisualConfigsPriv; - SAVAGEDRIServerPrivatePtr DRIServerInfo; - - -#if 0 - Bool haveQuiescense; - void (*GetQuiescence)(ScrnInfoPtr pScrn); -#endif - - Bool IsPCI; - Bool AgpDMA; - Bool VertexDMA; - Bool CommandDMA; - int agpMode; - drmSize agpSize; - FBLinearPtr reserved; - - unsigned int surfaceAllocation[7]; - unsigned int xvmcContext; - unsigned int DRIrunning; - unsigned int hwmcOffset; - unsigned int hwmcSize; - - Bool bDisableXvMC; - -#endif - - Bool disableCOB; - Bool BCIforXv; - - /* Bitmap Descriptors for BCI */ - BMPDESC GlobalBD; - BMPDESC PrimaryBD; - BMPDESC SecondBD; - /* do we disable tile mode by option? */ - Bool bDisableTile; - /* if we enable tile,we only support tile under 16/32bpp */ - Bool bTiled; - int lDelta; - int ulAperturePitch; /* aperture pitch */ - - /* - * cxMemory is number of pixels across screen width - * cyMemory is number of scanlines in available adapter memory. - * - * cxMemory * cyMemory is used to determine how much memory to - * allocate to our heap manager. So make sure that any space at the - * end of video memory set aside at bInitializeHardware time is kept - * out of the cyMemory calculation. - */ - int cxMemory,cyMemory; - - StatInfoRec StatInfo; /* save the SVGA state */ - - /* for dvi option */ - Bool dvi; - - SavageMonitorType DisplayType; - /* DuoView stuff */ - Bool HasCRTC2; /* MX, IX, Supersavage */ - Bool IsSecondary; /* second Screen */ - Bool IsPrimary; /* first Screen */ - EntityInfoPtr pEnt; - -} SavageRec, *SavagePtr; - -/* Video flags. */ - -#define VF_STREAMS_ON 0x0001 - -#define SAVPTR(p) ((SavagePtr)((p)->driverPrivate)) - -/* Make the names of these externals driver-unique */ -#define gpScrn savagegpScrn -#define readdw savagereaddw -#define readfb savagereadfb -#define writedw savagewritedw -#define writefb savagewritefb -#define writescan savagewritescan - -/* add for support DRI */ -#ifdef XF86DRI - -#define SAVAGE_FRONT 0x1 -#define SAVAGE_BACK 0x2 -#define SAVAGE_DEPTH 0x4 -#define SAVAGE_STENCIL 0x8 - -Bool SAVAGEDRIScreenInit( ScreenPtr pScreen ); -Bool SAVAGEInitMC(ScreenPtr pScreen); -void SAVAGEDRICloseScreen( ScreenPtr pScreen ); -Bool SAVAGEDRIFinishScreenInit( ScreenPtr pScreen ); - -Bool SAVAGELockUpdate( ScrnInfoPtr pScrn, drmLockFlags flags ); - -#if 0 -void SAVAGEGetQuiescence( ScrnInfoPtr pScrn ); -void SAVAGEGetQuiescenceShared( ScrnInfoPtr pScrn ); -#endif - -void SAVAGESelectBuffer(ScrnInfoPtr pScrn, int which); - -#if 0 -Bool SAVAGECleanupDma(ScrnInfoPtr pScrn); -Bool SAVAGEInitDma(ScrnInfoPtr pScrn, int prim_size); -#endif - -#define SAVAGE_AGP_1X_MODE 0x01 -#define SAVAGE_AGP_2X_MODE 0x02 -#define SAVAGE_AGP_4X_MODE 0x04 -#define SAVAGE_AGP_MODE_MASK 0x07 - -#endif - - -/* Prototypes. */ - -extern void SavageCommonCalcClock(long freq, int min_m, int min_n1, - int max_n1, int min_n2, int max_n2, - long freq_min, long freq_max, - unsigned char *mdiv, unsigned char *ndiv); -void SavageAdjustFrame(int scrnIndex, int y, int x, int flags); -void SavageDoAdjustFrame(ScrnInfoPtr pScrn, int y, int x, int crtc2); -Bool SavageSwitchMode(int scrnIndex, DisplayModePtr mode, int flags); - -/* In savage_cursor.c. */ - -Bool SavageHWCursorInit(ScreenPtr pScreen); -void SavageShowCursor(ScrnInfoPtr); -void SavageHideCursor(ScrnInfoPtr); - -/* In savage_accel.c. */ - -Bool SavageInitAccel(ScreenPtr); -void SavageInitialize2DEngine(ScrnInfoPtr); -void SavageSetGBD(ScrnInfoPtr); -void SavageAccelSync(ScrnInfoPtr); -/*int SavageHelpSolidROP(ScrnInfoPtr pScrn, int *fg, int pm, int *rop);*/ - -/* XAA and EXA */ -Bool SavageXAAInit(ScreenPtr); -Bool SavageEXAInit(ScreenPtr); - -/* In savage_i2c.c. */ - -Bool SavageI2CInit(ScrnInfoPtr pScrn); - -/* In savage_shadow.c */ - -void SavagePointerMoved(int index, int x, int y); -void SavageRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox); -void SavageRefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox); -void SavageRefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox); -void SavageRefreshArea24(ScrnInfoPtr pScrn, int num, BoxPtr pbox); -void SavageRefreshArea32(ScrnInfoPtr pScrn, int num, BoxPtr pbox); - -/* In savage_vbe.c */ - -void SavageSetTextMode( SavagePtr psav ); -void SavageSetVESAMode( SavagePtr psav, int n, int Refresh ); -void SavageSetPanelEnabled( SavagePtr psav, Bool active ); -void SavageFreeBIOSModeTable( SavagePtr psav, SavageModeTablePtr* ppTable ); -SavageModeTablePtr SavageGetBIOSModeTable( SavagePtr psav, int iDepth ); +/*
+ * Copyright (C) 1994-2000 The XFree86 Project, Inc. All Rights Reserved.
+ * Copyright (c) 2003-2006, X.Org Foundation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of the copyright holder(s)
+ * and author(s) shall not be used in advertising or otherwise to promote
+ * the sale, use or other dealings in this Software without prior written
+ * authorization from the copyright holder(s) and author(s).
+ */
+
+#ifndef SAVAGE_DRIVER_H
+#define SAVAGE_DRIVER_H
+
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+#define MODE_24 24
+
+#include "compiler.h"
+#include "vgaHW.h"
+#include "xf86.h"
+#include "xf86Resources.h"
+#include "xf86Pci.h"
+#include "xf86PciInfo.h"
+#include "xf86_OSproc.h"
+#include "xf86Cursor.h"
+#include "mipointer.h"
+#include "micmap.h"
+#include "fb.h"
+#include "fboverlay.h"
+#include "xf86cmap.h"
+#include "vbe.h"
+#include "xaa.h"
+#include "exa.h"
+#include "xf86xv.h"
+
+#include "savage_regs.h"
+#include "savage_vbe.h"
+
+#ifdef XF86DRI
+#define _XF86DRI_SERVER_
+#include "savage_dripriv.h"
+#include "savage_dri.h"
+#include "dri.h"
+#include "GL/glxint.h"
+#include "xf86drm.h"
+
+/* Totals 2 Mbytes which equals 2^16 32-byte vertices divided among up
+ * to 32 clients. */
+#define SAVAGE_NUM_BUFFERS 32
+#define SAVAGE_BUFFER_SIZE (1 << 16) /* 64k */
+
+#define SAVAGE_CMDDMA_SIZE 0x100000 /* 1MB */
+
+#define SAVAGE_DEFAULT_AGP_MODE 1
+#define SAVAGE_MAX_AGP_MODE 4
+
+/* Buffer are aligned on 4096 byte boundaries.
+ */
+/* this is used for backbuffer, depthbuffer, etc..*/
+/* alignment */
+
+#define SAVAGE_BUFFER_ALIGN 0x00000fff
+
+typedef struct _server{
+ int reserved_map_agpstart;
+ int reserved_map_idx;
+
+ int sarea_priv_offset;
+
+ int chipset;
+ int sgram; /* seems no use */
+
+ unsigned int frontOffset;
+ unsigned int frontPitch;
+ unsigned int frontbufferSize;
+ unsigned int frontBitmapDesc;
+
+ unsigned int backOffset;
+ unsigned int backPitch;
+ unsigned int backbufferSize;
+ unsigned int backBitmapDesc;
+
+ unsigned int depthOffset;
+ unsigned int depthPitch;
+ unsigned int depthbufferSize;
+ unsigned int depthBitmapDesc;
+
+ unsigned int textureOffset;
+ int textureSize;
+ int logTextureGranularity;
+
+ drmRegion agp;
+
+ /* PCI mappings */
+ drmRegion aperture;
+ drmRegion registers;
+ drmRegion status;
+
+ /* AGP mappings */
+ drmRegion buffers;
+ drmRegion agpTextures;
+ int logAgpTextureGranularity;
+
+ /* command DMA */
+ drmRegion cmdDma;
+} SAVAGEDRIServerPrivateRec, *SAVAGEDRIServerPrivatePtr;
+
+#endif
+
+typedef enum {
+ MT_NONE,
+ MT_CRT,
+ MT_LCD,
+ MT_DFP,
+ MT_TV
+} SavageMonitorType;
+
+typedef struct
+{
+ Bool HasSecondary;
+ Bool TvOn;
+ ScrnInfoPtr pSecondaryScrn;
+ ScrnInfoPtr pPrimaryScrn;
+
+} SavageEntRec, *SavageEntPtr;
+
+#define VGAIN8(addr) MMIO_IN8(psav->MapBase+0x8000, addr)
+#define VGAIN16(addr) MMIO_IN16(psav->MapBase+0x8000, addr)
+#define VGAIN(addr) MMIO_IN32(psav->MapBase+0x8000, addr)
+
+#define VGAOUT8(addr,val) MMIO_OUT8(psav->MapBase+0x8000, addr, val)
+#define VGAOUT16(addr,val) MMIO_OUT16(psav->MapBase+0x8000, addr, val)
+#define VGAOUT(addr,val) MMIO_OUT32(psav->MapBase+0x8000, addr, val)
+
+#define INREG8(addr) MMIO_IN8(psav->MapBase, addr)
+#define INREG16(addr) MMIO_IN16(psav->MapBase, addr)
+#define INREG32(addr) MMIO_IN32(psav->MapBase, addr)
+#define OUTREG8(addr,val) MMIO_OUT8(psav->MapBase, addr, val)
+#define OUTREG16(addr,val) MMIO_OUT16(psav->MapBase, addr, val)
+#define OUTREG32(addr,val) MMIO_OUT32(psav->MapBase, addr, val)
+#define INREG(addr) INREG32(addr)
+#define OUTREG(addr,val) OUTREG32(addr,val)
+
+#if X_BYTE_ORDER == X_LITTLE_ENDIAN
+#define B_O16(x) (x)
+#define B_O32(x) (x)
+#else
+#define B_O16(x) ((((x) & 0xff) << 8) | (((x) & 0xff) >> 8))
+#define B_O32(x) ((((x) & 0xff) << 24) | (((x) & 0xff00) << 8) \
+ | (((x) & 0xff0000) >> 8) | (((x) & 0xff000000) >> 24))
+#endif
+#define L_ADD(x) (B_O32(x) & 0xffff) + ((B_O32(x) >> 12) & 0xffff00)
+
+#define SAVAGEIOMAPSIZE 0x80000
+
+#define SAVAGE_CRT_ON 1
+#define SAVAGE_LCD_ON 2
+#define SAVAGE_TV_ON 4
+
+#define SAVAGE_DRIVER_NAME "savage"
+#define SAVAGE_DRIVER_VERSION "2.1.1"
+#define SAVAGE_VERSION_MAJOR 2
+#define SAVAGE_VERSION_MINOR 1
+#define SAVAGE_PATCHLEVEL 1
+#define SAVAGE_VERSION ((SAVAGE_VERSION_MAJOR << 24) | \
+ (SAVAGE_VERSION_MINOR << 16) | \
+ SAVAGE_PATCHLEVEL)
+
+typedef struct _S3VMODEENTRY {
+ unsigned short Width;
+ unsigned short Height;
+ unsigned short VesaMode;
+ unsigned char RefreshCount;
+ unsigned char * RefreshRate;
+} SavageModeEntry, *SavageModeEntryPtr;
+
+
+typedef struct _S3VMODETABLE {
+ unsigned short NumModes;
+ SavageModeEntry Modes[1];
+} SavageModeTableRec, *SavageModeTablePtr;
+
+
+typedef struct {
+ unsigned int mode, refresh;
+ unsigned char SR08, SR0E, SR0F;
+ unsigned char SR10, SR11, SR12, SR13, SR15, SR18, SR1B, SR29, SR30;
+ unsigned char SR54[8];
+ unsigned char Clock;
+ unsigned char CR31, CR32, CR33, CR34, CR36, CR3A, CR3B, CR3C;
+ unsigned char CR40, CR41, CR42, CR43, CR45;
+ unsigned char CR50, CR51, CR53, CR55, CR58, CR5B, CR5D, CR5E;
+ unsigned char CR60, CR63, CR65, CR66, CR67, CR68, CR69, CR6D, CR6F;
+ unsigned char CR86, CR88;
+ unsigned char CR90, CR91, CRB0;
+ unsigned int STREAMS[22]; /* yuck, streams regs */
+ unsigned int MMPR0, MMPR1, MMPR2, MMPR3;
+} SavageRegRec, *SavageRegPtr;
+
+typedef struct {
+ CARD32 redMask, greenMask, blueMask;
+ int redShift, greenShift, blueShift;
+} savageOverlayRec;
+
+/* Tiling defines */
+#define TILE_SIZE_BYTE 2048 /* 0x800, 2K */
+#define TILE_SIZE_BYTE_2000 4096
+
+#define TILEHEIGHT_16BPP 16
+#define TILEHEIGHT_32BPP 16
+#define TILEHEIGHT 16 /* all 16 and 32bpp tiles are 16 lines high */
+#define TILEHEIGHT_2000 32 /* 32 lines on savage 2000 */
+
+#define TILEWIDTH_BYTES 128 /* 2048/TILEHEIGHT (** not for use w/8bpp tiling) */
+#define TILEWIDTH8BPP_BYTES 64 /* 2048/TILEHEIGHT_8BPP */
+#define TILEWIDTH_16BPP 64 /* TILEWIDTH_BYTES/2-BYTES-PER-PIXEL */
+#define TILEWIDTH_32BPP 32 /* TILEWIDTH_BYTES/4-BYTES-PER-PIXEL */
+
+/* Bitmap descriptor structures for BCI */
+typedef struct _HIGH {
+ unsigned short Stride;
+ unsigned char Bpp;
+ unsigned char ResBWTile;
+} HIGH;
+
+typedef struct _BMPDESC1 {
+ unsigned long Offset;
+ HIGH HighPart;
+} BMPDESC1;
+
+typedef struct _BMPDESC2 {
+ unsigned long LoPart;
+ unsigned long HiPart;
+} BMPDESC2;
+
+typedef union _BMPDESC {
+ BMPDESC1 bd1;
+ BMPDESC2 bd2;
+} BMPDESC;
+
+typedef struct _StatInfo {
+ int origMode;
+ int pageCnt;
+ pointer statBuf;
+ int realSeg;
+ int realOff;
+} StatInfoRec,*StatInfoPtr;
+
+typedef struct _Savage {
+ SavageRegRec SavedReg;
+ SavageRegRec ModeReg;
+ xf86CursorInfoPtr CursorInfoRec;
+ Bool ModeStructInit;
+ Bool NeedSTREAMS;
+ Bool STREAMSRunning;
+ int Bpp, Bpl, ScissB;
+ unsigned PlaneMask;
+ I2CBusPtr I2C;
+ I2CBusPtr DVI;
+ unsigned char DDCPort;
+ unsigned char I2CPort;
+
+ int videoRambytes;
+ int videoRamKbytes;
+ int MemOffScreen;
+ int CursorKByte;
+ int endfb;
+
+ /* These are physical addresses. */
+ unsigned long FrameBufferBase;
+ unsigned long MmioBase;
+ unsigned long ApertureBase;
+ unsigned long ShadowPhysical;
+
+ /* These are linear addresses. */
+ unsigned char* MapBase;
+ unsigned char* BciMem;
+ unsigned char* MapBaseDense;
+ unsigned char* FBBase;
+ unsigned char* ApertureMap;
+ unsigned char* FBStart;
+ CARD32 volatile * ShadowVirtual;
+
+ Bool PrimaryVidMapped;
+ int maxClock;
+ int HorizScaleFactor;
+ int MCLK, REFCLK, LCDclk;
+ double refclk_fact;
+ int GEResetCnt;
+
+ /* Here are all the Options */
+
+ OptionInfoPtr Options;
+ Bool ShowCache;
+ Bool pci_burst;
+ Bool NoPCIRetry;
+ Bool fifo_conservative;
+ Bool fifo_moderate;
+ Bool fifo_aggressive;
+ Bool hwcursor;
+ Bool hwc_on;
+ Bool NoAccel;
+ Bool shadowFB;
+ Bool UseBIOS;
+ int rotate;
+ double LCDClock;
+ Bool ConfigShadowStatus; /* from the config */
+ Bool ShadowStatus; /* automatically enabled with DRI */
+ Bool ForceShadowStatus; /* true if explicitly set in conf */
+ Bool CrtOnly;
+ Bool TvOn;
+ Bool PAL;
+ Bool ForceInit;
+ int iDevInfo;
+ int iDevInfoPrim;
+
+ Bool FPExpansion;
+ int PanelX; /* panel width */
+ int PanelY; /* panel height */
+ int iResX; /* crtc X display */
+ int iResY; /* crtc Y display */
+ int XFactor; /* overlay X factor */
+ int YFactor; /* overlay Y factor */
+ int displayXoffset; /* overlay X offset */
+ int displayYoffset; /* overlay Y offset */
+ int XExp1; /* expansion ratio in x */
+ int XExp2;
+ int YExp1; /* expansion ratio in x */
+ int YExp2;
+ int cxScreen;
+ int TVSizeX;
+ int TVSizeY;
+
+ CloseScreenProcPtr CloseScreen;
+ pciVideoPtr PciInfo;
+ PCITAG PciTag;
+ int Chipset;
+ int ChipId;
+ int ChipRev;
+ vbeInfoPtr pVbe;
+ int EntityIndex;
+ int ShadowCounter;
+ int vgaIOBase; /* 3b0 or 3d0 */
+
+ /* The various Savage wait handlers. */
+ int (*WaitQueue)(struct _Savage *, int);
+ int (*WaitIdle)(struct _Savage *);
+ int (*WaitIdleEmpty)(struct _Savage *);
+
+ /* Support for shadowFB and rotation */
+ unsigned char * ShadowPtr;
+ int ShadowPitch;
+ void (*PointerMoved)(int index, int x, int y);
+
+ /* support for EXA */
+ ExaDriverPtr EXADriverPtr;
+ Bool useEXA;
+ unsigned long EXAendfb;
+ unsigned long pbd_offset;
+ unsigned long sbd_offset;
+ unsigned long pbd_high;
+ unsigned long sbd_high;
+
+ /* Support for XAA acceleration */
+ XAAInfoRecPtr AccelInfoRec;
+ xRectangle Rect;
+ unsigned int SavedBciCmd;
+ unsigned int SavedFgColor;
+ unsigned int SavedBgColor;
+ unsigned int SavedSbdOffset;
+ unsigned int SavedSbd;
+
+ SavageModeTablePtr ModeTable;
+
+ /* Support for the Savage command overflow buffer. */
+ unsigned long cobIndex; /* size index */
+ unsigned long cobSize; /* size in bytes */
+ unsigned long cobOffset; /* offset in frame buffer */
+ unsigned long bciThresholdLo; /* low and high thresholds for */
+ unsigned long bciThresholdHi; /* shadow status update (32bit words) */
+ unsigned long bciUsedMask; /* BCI entries used mask */
+ unsigned int eventStatusReg; /* Status register index that holds
+ * event counter 0. */
+
+ /* Support for DGA */
+ int numDGAModes;
+ DGAModePtr DGAModes;
+ Bool DGAactive;
+ int DGAViewportStatus;
+
+ /* Support for XVideo */
+
+ unsigned int videoFlags;
+ unsigned int blendBase;
+ int videoFourCC;
+ XF86VideoAdaptorPtr adaptor;
+ int VideoZoomMax;
+ int dwBCIWait2DIdle;
+ XF86OffscreenImagePtr offscreenImages;
+
+ /* Support for Overlays */
+ unsigned char * FBStart2nd;
+ savageOverlayRec overlay;
+ int overlayDepth;
+ int primStreamBpp;
+
+#ifdef XF86DRI
+ int LockHeld;
+ Bool directRenderingEnabled;
+ DRIInfoPtr pDRIInfo;
+ int drmFD;
+ int numVisualConfigs;
+ __GLXvisualConfig* pVisualConfigs;
+ SAVAGEConfigPrivPtr pVisualConfigsPriv;
+ SAVAGEDRIServerPrivatePtr DRIServerInfo;
+
+
+#if 0
+ Bool haveQuiescense;
+ void (*GetQuiescence)(ScrnInfoPtr pScrn);
+#endif
+
+ Bool IsPCI;
+ Bool AgpDMA;
+ Bool VertexDMA;
+ Bool CommandDMA;
+ int agpMode;
+ drmSize agpSize;
+ FBLinearPtr reserved;
+
+ unsigned int surfaceAllocation[7];
+ unsigned int xvmcContext;
+ unsigned int DRIrunning;
+ unsigned int hwmcOffset;
+ unsigned int hwmcSize;
+
+ Bool bDisableXvMC;
+
+#endif
+
+ Bool disableCOB;
+ Bool BCIforXv;
+
+ /* Bitmap Descriptors for BCI */
+ BMPDESC GlobalBD;
+ BMPDESC PrimaryBD;
+ BMPDESC SecondBD;
+ /* do we disable tile mode by option? */
+ Bool bDisableTile;
+ /* if we enable tile,we only support tile under 16/32bpp */
+ Bool bTiled;
+ int lDelta;
+ int ulAperturePitch; /* aperture pitch */
+
+ /*
+ * cxMemory is number of pixels across screen width
+ * cyMemory is number of scanlines in available adapter memory.
+ *
+ * cxMemory * cyMemory is used to determine how much memory to
+ * allocate to our heap manager. So make sure that any space at the
+ * end of video memory set aside at bInitializeHardware time is kept
+ * out of the cyMemory calculation.
+ */
+ int cxMemory,cyMemory;
+
+ StatInfoRec StatInfo; /* save the SVGA state */
+
+ /* for dvi option */
+ Bool dvi;
+
+ SavageMonitorType DisplayType;
+ /* DuoView stuff */
+ Bool HasCRTC2; /* MX, IX, Supersavage */
+ Bool IsSecondary; /* second Screen */
+ Bool IsPrimary; /* first Screen */
+ EntityInfoPtr pEnt;
+
+} SavageRec, *SavagePtr;
+
+/* Video flags. */
+
+#define VF_STREAMS_ON 0x0001
+
+#define SAVPTR(p) ((SavagePtr)((p)->driverPrivate))
+
+/* Make the names of these externals driver-unique */
+#define gpScrn savagegpScrn
+#define readdw savagereaddw
+#define readfb savagereadfb
+#define writedw savagewritedw
+#define writefb savagewritefb
+#define writescan savagewritescan
+
+/* add for support DRI */
+#ifdef XF86DRI
+
+#define SAVAGE_FRONT 0x1
+#define SAVAGE_BACK 0x2
+#define SAVAGE_DEPTH 0x4
+#define SAVAGE_STENCIL 0x8
+
+Bool SAVAGEDRIScreenInit( ScreenPtr pScreen );
+Bool SAVAGEInitMC(ScreenPtr pScreen);
+void SAVAGEDRICloseScreen( ScreenPtr pScreen );
+Bool SAVAGEDRIFinishScreenInit( ScreenPtr pScreen );
+
+Bool SAVAGELockUpdate( ScrnInfoPtr pScrn, drmLockFlags flags );
+
+#if 0
+void SAVAGEGetQuiescence( ScrnInfoPtr pScrn );
+void SAVAGEGetQuiescenceShared( ScrnInfoPtr pScrn );
+#endif
+
+void SAVAGESelectBuffer(ScrnInfoPtr pScrn, int which);
+
+#if 0
+Bool SAVAGECleanupDma(ScrnInfoPtr pScrn);
+Bool SAVAGEInitDma(ScrnInfoPtr pScrn, int prim_size);
+#endif
+
+#define SAVAGE_AGP_1X_MODE 0x01
+#define SAVAGE_AGP_2X_MODE 0x02
+#define SAVAGE_AGP_4X_MODE 0x04
+#define SAVAGE_AGP_MODE_MASK 0x07
+
+#endif
+
+
+/* Prototypes. */
+
+extern void SavageCommonCalcClock(long freq, int min_m, int min_n1,
+ int max_n1, int min_n2, int max_n2,
+ long freq_min, long freq_max,
+ unsigned char *mdiv, unsigned char *ndiv);
+void SavageAdjustFrame(int scrnIndex, int y, int x, int flags);
+void SavageDoAdjustFrame(ScrnInfoPtr pScrn, int y, int x, int crtc2);
+Bool SavageSwitchMode(int scrnIndex, DisplayModePtr mode, int flags);
+
+/* In savage_cursor.c. */
+
+Bool SavageHWCursorInit(ScreenPtr pScreen);
+void SavageShowCursor(ScrnInfoPtr);
+void SavageHideCursor(ScrnInfoPtr);
+
+/* In savage_accel.c. */
+
+Bool SavageInitAccel(ScreenPtr);
+void SavageInitialize2DEngine(ScrnInfoPtr);
+void SavageSetGBD(ScrnInfoPtr);
+void SavageAccelSync(ScrnInfoPtr);
+/*int SavageHelpSolidROP(ScrnInfoPtr pScrn, int *fg, int pm, int *rop);*/
+
+/* XAA and EXA */
+Bool SavageXAAInit(ScreenPtr);
+Bool SavageEXAInit(ScreenPtr);
+
+/* In savage_i2c.c. */
+
+Bool SavageI2CInit(ScrnInfoPtr pScrn);
+
+/* In savage_shadow.c */
+
+void SavagePointerMoved(int index, int x, int y);
+void SavageRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
+void SavageRefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
+void SavageRefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
+void SavageRefreshArea24(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
+void SavageRefreshArea32(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
+
+/* In savage_vbe.c */
+
+void SavageSetTextMode( SavagePtr psav );
+void SavageSetVESAMode( SavagePtr psav, int n, int Refresh );
+void SavageSetPanelEnabled( SavagePtr psav, Bool active );
+void SavageFreeBIOSModeTable( SavagePtr psav, SavageModeTablePtr* ppTable );
+SavageModeTablePtr SavageGetBIOSModeTable( SavagePtr psav, int iDepth );
ModeStatus SavageMatchBiosMode(ScrnInfoPtr pScrn,int width,int height,int refresh,
- unsigned int *vesaMode,unsigned int *newRefresh); - -unsigned short SavageGetBIOSModes( - SavagePtr psav, - int iDepth, - SavageModeEntryPtr s3vModeTable ); - -/* In savage_video.c */ - -void SavageInitVideo( ScreenPtr pScreen ); - -/* In savage_streams.c */ - -void SavageStreamsOn(ScrnInfoPtr pScrn); -void SavageStreamsOff(ScrnInfoPtr pScrn); -void SavageInitSecondaryStream(ScrnInfoPtr pScrn); -void SavageInitStreamsOld(ScrnInfoPtr pScrn); -void SavageInitStreamsNew(ScrnInfoPtr pScrn); -void SavageInitStreams2000(ScrnInfoPtr pScrn); - - -#if (MODE_24 == 32) -# define BYTES_PP24 4 -#else -# define BYTES_PP24 3 -#endif - - -#define DEPTH_BPP(depth) (depth == 24 ? (BYTES_PP24 << 3) : (depth + 7) & ~0x7) -#define DEPTH_2ND(pScrn) (pScrn->depth > 8 ? pScrn->depth\ - : SAVPTR(pScrn)->overlayDepth) - -#endif /* SAVAGE_VGAHWMMIO_H */ - + unsigned int *vesaMode,unsigned int *newRefresh);
+
+unsigned short SavageGetBIOSModes(
+ SavagePtr psav,
+ int iDepth,
+ SavageModeEntryPtr s3vModeTable );
+
+/* In savage_video.c */
+
+void SavageInitVideo( ScreenPtr pScreen );
+
+/* In savage_streams.c */
+
+void SavageStreamsOn(ScrnInfoPtr pScrn);
+void SavageStreamsOff(ScrnInfoPtr pScrn);
+void SavageInitSecondaryStream(ScrnInfoPtr pScrn);
+void SavageInitStreamsOld(ScrnInfoPtr pScrn);
+void SavageInitStreamsNew(ScrnInfoPtr pScrn);
+void SavageInitStreams2000(ScrnInfoPtr pScrn);
+
+
+#if (MODE_24 == 32)
+# define BYTES_PP24 4
+#else
+# define BYTES_PP24 3
+#endif
+
+
+#define DEPTH_BPP(depth) (depth == 24 ? (BYTES_PP24 << 3) : (depth + 7) & ~0x7)
+#define DEPTH_2ND(pScrn) (pScrn->depth > 8 ? pScrn->depth\
+ : SAVPTR(pScrn)->overlayDepth)
+
+#endif /* SAVAGE_DRIVER_H */
+
|