summaryrefslogtreecommitdiff
path: root/src/savage_driver.h
diff options
context:
space:
mode:
authorIan Romanick <idr@umwelt.(none)>2006-08-04 15:10:40 -0700
committerIan Romanick <idr@umwelt.(none)>2006-08-04 15:10:40 -0700
commit6f9abbb972834561cd8494a1d4fb47402b285d7d (patch)
tree382c2e0225fb0496df5d7f818059ddef7d2975bc /src/savage_driver.h
parent3e2980251570a304057579e97ec26bc3fd19f8d7 (diff)
Fix line endings (at least, I assume that's why git-diff thinks every
line in the file is chaged). Add missing license statement. Change SAVAGE_VGAHWMMIO_H to SAVAGE_DRIVER_H.
Diffstat (limited to 'src/savage_driver.h')
-rw-r--r--src/savage_driver.h1234
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 */
+