savage_driver.h revision 8697ee19
1ab47cfaaSmrg/* 2ab47cfaaSmrg * Copyright (C) 1994-2000 The XFree86 Project, Inc. All Rights Reserved. 3ab47cfaaSmrg * Copyright (c) 2003-2006, X.Org Foundation 4ab47cfaaSmrg * 5ab47cfaaSmrg * Permission is hereby granted, free of charge, to any person obtaining a 6ab47cfaaSmrg * copy of this software and associated documentation files (the "Software"), 7ab47cfaaSmrg * to deal in the Software without restriction, including without limitation 8ab47cfaaSmrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9ab47cfaaSmrg * and/or sell copies of the Software, and to permit persons to whom the 10ab47cfaaSmrg * Software is furnished to do so, subject to the following conditions: 11ab47cfaaSmrg * 12ab47cfaaSmrg * The above copyright notice and this permission notice shall be included in 13ab47cfaaSmrg * all copies or substantial portions of the Software. 14ab47cfaaSmrg * 15ab47cfaaSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16ab47cfaaSmrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17ab47cfaaSmrg * FITESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18ab47cfaaSmrg * COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19ab47cfaaSmrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20ab47cfaaSmrg * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21ab47cfaaSmrg * DEALINGS IN THE SOFTWARE. 22ab47cfaaSmrg * 23ab47cfaaSmrg * Except as contained in this notice, the name of the copyright holder(s) 24ab47cfaaSmrg * and author(s) shall not be used in advertising or otherwise to promote 25ab47cfaaSmrg * the sale, use or other dealings in this Software without prior written 26ab47cfaaSmrg * authorization from the copyright holder(s) and author(s). 27ab47cfaaSmrg */ 28ab47cfaaSmrg 29ab47cfaaSmrg#ifndef SAVAGE_DRIVER_H 30ab47cfaaSmrg#define SAVAGE_DRIVER_H 31ab47cfaaSmrg 32ab47cfaaSmrg#include <stdio.h> 33ab47cfaaSmrg#include <string.h> 34ab47cfaaSmrg#include <math.h> 35ab47cfaaSmrg 368697ee19Smrg#ifdef XSERVER_LIBPCIACCESS 378697ee19Smrg#include <pciaccess.h> 388697ee19Smrg#define VENDOR_ID(p) (p)->vendor_id 398697ee19Smrg#define DEVICE_ID(p) (p)->device_id 408697ee19Smrg#define SUBSYS_ID(p) (p)->subdevice_id 418697ee19Smrg#define CHIP_REVISION(p) (p)->revision 428697ee19Smrg#else 438697ee19Smrg#define VENDOR_ID(p) (p)->vendor 448697ee19Smrg#define DEVICE_ID(p) (p)->chipType 458697ee19Smrg#define SUBSYS_ID(p) (p)->subsysCard 468697ee19Smrg#define CHIP_REVISION(p) (p)->chipRev 478697ee19Smrg#endif 488697ee19Smrg 49ab47cfaaSmrg#define MODE_24 24 50ab47cfaaSmrg 51ab47cfaaSmrg#include "compiler.h" 52ab47cfaaSmrg#include "vgaHW.h" 53ab47cfaaSmrg#include "xf86.h" 54ab47cfaaSmrg#include "xf86Resources.h" 55ab47cfaaSmrg#include "xf86Pci.h" 56ab47cfaaSmrg#include "xf86PciInfo.h" 57ab47cfaaSmrg#include "xf86_OSproc.h" 58ab47cfaaSmrg#include "xf86Cursor.h" 59ab47cfaaSmrg#include "mipointer.h" 60ab47cfaaSmrg#include "micmap.h" 61ab47cfaaSmrg#include "fb.h" 62ab47cfaaSmrg#include "fboverlay.h" 63ab47cfaaSmrg#include "xf86cmap.h" 64ab47cfaaSmrg#include "vbe.h" 65ab47cfaaSmrg#include "xaa.h" 66ab47cfaaSmrg#include "exa.h" 67ab47cfaaSmrg#include "xf86xv.h" 68ab47cfaaSmrg 69ab47cfaaSmrg#include "savage_regs.h" 70ab47cfaaSmrg#include "savage_vbe.h" 71ab47cfaaSmrg 72ab47cfaaSmrg#ifdef XF86DRI 73ab47cfaaSmrg#define _XF86DRI_SERVER_ 74ab47cfaaSmrg#include "savage_dripriv.h" 75ab47cfaaSmrg#include "savage_dri.h" 76ab47cfaaSmrg#include "dri.h" 77ab47cfaaSmrg#include "GL/glxint.h" 78ab47cfaaSmrg#include "xf86drm.h" 79ab47cfaaSmrg 80ab47cfaaSmrg/* Totals 2 Mbytes which equals 2^16 32-byte vertices divided among up 81ab47cfaaSmrg * to 32 clients. */ 82ab47cfaaSmrg#define SAVAGE_NUM_BUFFERS 32 83ab47cfaaSmrg#define SAVAGE_BUFFER_SIZE (1 << 16) /* 64k */ 84ab47cfaaSmrg 85ab47cfaaSmrg#define SAVAGE_CMDDMA_SIZE 0x100000 /* 1MB */ 86ab47cfaaSmrg 87ab47cfaaSmrg#define SAVAGE_DEFAULT_AGP_MODE 1 88ab47cfaaSmrg#define SAVAGE_MAX_AGP_MODE 4 89ab47cfaaSmrg 90ab47cfaaSmrg/* Buffer are aligned on 4096 byte boundaries. 91ab47cfaaSmrg */ 92ab47cfaaSmrg/* this is used for backbuffer, depthbuffer, etc..*/ 93ab47cfaaSmrg/* alignment */ 94ab47cfaaSmrg 95ab47cfaaSmrg#define SAVAGE_BUFFER_ALIGN 0x00000fff 96ab47cfaaSmrg 97ab47cfaaSmrgtypedef struct _server{ 98ab47cfaaSmrg int reserved_map_agpstart; 99ab47cfaaSmrg int reserved_map_idx; 100ab47cfaaSmrg 101ab47cfaaSmrg int sarea_priv_offset; 102ab47cfaaSmrg 103ab47cfaaSmrg int chipset; 104ab47cfaaSmrg int sgram; /* seems no use */ 105ab47cfaaSmrg 106ab47cfaaSmrg unsigned int frontOffset; 107ab47cfaaSmrg unsigned int frontPitch; 108ab47cfaaSmrg unsigned int frontbufferSize; 109ab47cfaaSmrg unsigned int frontBitmapDesc; 110ab47cfaaSmrg 111ab47cfaaSmrg unsigned int backOffset; 112ab47cfaaSmrg unsigned int backPitch; 113ab47cfaaSmrg unsigned int backbufferSize; 114ab47cfaaSmrg unsigned int backBitmapDesc; 115ab47cfaaSmrg 116ab47cfaaSmrg unsigned int depthOffset; 117ab47cfaaSmrg unsigned int depthPitch; 118ab47cfaaSmrg unsigned int depthbufferSize; 119ab47cfaaSmrg unsigned int depthBitmapDesc; 120ab47cfaaSmrg 121ab47cfaaSmrg unsigned int textureOffset; 122ab47cfaaSmrg int textureSize; 123ab47cfaaSmrg int logTextureGranularity; 124ab47cfaaSmrg 125ab47cfaaSmrg drmRegion agp; 126ab47cfaaSmrg 127ab47cfaaSmrg /* PCI mappings */ 128ab47cfaaSmrg drmRegion aperture; 129ab47cfaaSmrg drmRegion registers; 130ab47cfaaSmrg drmRegion status; 131ab47cfaaSmrg 132ab47cfaaSmrg /* AGP mappings */ 133ab47cfaaSmrg drmRegion buffers; 134ab47cfaaSmrg drmRegion agpTextures; 135ab47cfaaSmrg int logAgpTextureGranularity; 136ab47cfaaSmrg 137ab47cfaaSmrg /* command DMA */ 138ab47cfaaSmrg drmRegion cmdDma; 139ab47cfaaSmrg} SAVAGEDRIServerPrivateRec, *SAVAGEDRIServerPrivatePtr; 140ab47cfaaSmrg 141ab47cfaaSmrg#endif 142ab47cfaaSmrg 143ab47cfaaSmrgtypedef enum { 144ab47cfaaSmrg MT_NONE, 145ab47cfaaSmrg MT_CRT, 146ab47cfaaSmrg MT_LCD, 147ab47cfaaSmrg MT_DFP, 148ab47cfaaSmrg MT_TV 149ab47cfaaSmrg} SavageMonitorType; 150ab47cfaaSmrg 151ab47cfaaSmrgtypedef struct 152ab47cfaaSmrg{ 153ab47cfaaSmrg Bool HasSecondary; 154ab47cfaaSmrg Bool TvOn; 155ab47cfaaSmrg ScrnInfoPtr pSecondaryScrn; 156ab47cfaaSmrg ScrnInfoPtr pPrimaryScrn; 157ab47cfaaSmrg 158ab47cfaaSmrg} SavageEntRec, *SavageEntPtr; 159ab47cfaaSmrg 160ab47cfaaSmrg#define VGAIN8(addr) MMIO_IN8(psav->MapBase+0x8000, addr) 161ab47cfaaSmrg#define VGAIN16(addr) MMIO_IN16(psav->MapBase+0x8000, addr) 162ab47cfaaSmrg#define VGAIN(addr) MMIO_IN32(psav->MapBase+0x8000, addr) 163ab47cfaaSmrg 164ab47cfaaSmrg#define VGAOUT8(addr,val) MMIO_OUT8(psav->MapBase+0x8000, addr, val) 165ab47cfaaSmrg#define VGAOUT16(addr,val) MMIO_OUT16(psav->MapBase+0x8000, addr, val) 166ab47cfaaSmrg#define VGAOUT(addr,val) MMIO_OUT32(psav->MapBase+0x8000, addr, val) 167ab47cfaaSmrg 168ab47cfaaSmrg#define INREG8(addr) MMIO_IN8(psav->MapBase, addr) 169ab47cfaaSmrg#define INREG16(addr) MMIO_IN16(psav->MapBase, addr) 170ab47cfaaSmrg#define INREG32(addr) MMIO_IN32(psav->MapBase, addr) 171ab47cfaaSmrg#define OUTREG8(addr,val) MMIO_OUT8(psav->MapBase, addr, val) 172ab47cfaaSmrg#define OUTREG16(addr,val) MMIO_OUT16(psav->MapBase, addr, val) 173ab47cfaaSmrg#define OUTREG32(addr,val) MMIO_OUT32(psav->MapBase, addr, val) 174ab47cfaaSmrg#define INREG(addr) INREG32(addr) 175ab47cfaaSmrg#define OUTREG(addr,val) OUTREG32(addr,val) 176ab47cfaaSmrg 177ab47cfaaSmrg#if X_BYTE_ORDER == X_LITTLE_ENDIAN 178ab47cfaaSmrg#define B_O16(x) (x) 179ab47cfaaSmrg#define B_O32(x) (x) 180ab47cfaaSmrg#else 181ab47cfaaSmrg#define B_O16(x) ((((x) & 0xff) << 8) | (((x) & 0xff) >> 8)) 182ab47cfaaSmrg#define B_O32(x) ((((x) & 0xff) << 24) | (((x) & 0xff00) << 8) \ 183ab47cfaaSmrg | (((x) & 0xff0000) >> 8) | (((x) & 0xff000000) >> 24)) 184ab47cfaaSmrg#endif 185ab47cfaaSmrg#define L_ADD(x) (B_O32(x) & 0xffff) + ((B_O32(x) >> 12) & 0xffff00) 186ab47cfaaSmrg 187ab47cfaaSmrg#define SAVAGEIOMAPSIZE 0x80000 188ab47cfaaSmrg 189ab47cfaaSmrg#define SAVAGE_CRT_ON 1 190ab47cfaaSmrg#define SAVAGE_LCD_ON 2 191ab47cfaaSmrg#define SAVAGE_TV_ON 4 192ab47cfaaSmrg 193ab47cfaaSmrg#define SAVAGE_DRIVER_NAME "savage" 194ab47cfaaSmrg#define SAVAGE_DRIVER_VERSION PACKAGE_VERSION 195ab47cfaaSmrg#define SAVAGE_VERSION_MAJOR PACKAGE_VERSION_MAJOR 196ab47cfaaSmrg#define SAVAGE_VERSION_MINOR PACKAGE_VERSION_MINOR 197ab47cfaaSmrg#define SAVAGE_PATCHLEVEL PACKAGE_VERSION_PATCHLEVEL 198ab47cfaaSmrg#define SAVAGE_VERSION ((SAVAGE_VERSION_MAJOR << 24) | \ 199ab47cfaaSmrg (SAVAGE_VERSION_MINOR << 16) | \ 200ab47cfaaSmrg SAVAGE_PATCHLEVEL) 201ab47cfaaSmrg 202ab47cfaaSmrgtypedef struct _S3VMODEENTRY { 203ab47cfaaSmrg unsigned short Width; 204ab47cfaaSmrg unsigned short Height; 205ab47cfaaSmrg unsigned short VesaMode; 206ab47cfaaSmrg unsigned char RefreshCount; 207ab47cfaaSmrg unsigned char * RefreshRate; 208ab47cfaaSmrg} SavageModeEntry, *SavageModeEntryPtr; 209ab47cfaaSmrg 210ab47cfaaSmrg 211ab47cfaaSmrgtypedef struct _S3VMODETABLE { 212ab47cfaaSmrg unsigned short NumModes; 213ab47cfaaSmrg SavageModeEntry Modes[1]; 214ab47cfaaSmrg} SavageModeTableRec, *SavageModeTablePtr; 215ab47cfaaSmrg 216ab47cfaaSmrg 217ab47cfaaSmrgtypedef struct { 218ab47cfaaSmrg unsigned int mode, refresh; 219ab47cfaaSmrg unsigned char SR08, SR0E, SR0F; 220ab47cfaaSmrg unsigned char SR10, SR11, SR12, SR13, SR15, SR18, SR1B, SR29, SR30; 221ab47cfaaSmrg unsigned char SR54[8]; 222ab47cfaaSmrg unsigned char Clock; 223ab47cfaaSmrg unsigned char CR31, CR32, CR33, CR34, CR36, CR3A, CR3B, CR3C; 224ab47cfaaSmrg unsigned char CR40, CR41, CR42, CR43, CR45; 225ab47cfaaSmrg unsigned char CR50, CR51, CR53, CR55, CR58, CR5B, CR5D, CR5E; 226ab47cfaaSmrg unsigned char CR60, CR63, CR65, CR66, CR67, CR68, CR69, CR6D, CR6F; 227ab47cfaaSmrg unsigned char CR86, CR88; 228ab47cfaaSmrg unsigned char CR90, CR91, CRB0; 229ab47cfaaSmrg unsigned int STREAMS[22]; /* yuck, streams regs */ 230ab47cfaaSmrg unsigned int MMPR0, MMPR1, MMPR2, MMPR3; 231ab47cfaaSmrg} SavageRegRec, *SavageRegPtr; 232ab47cfaaSmrg 233ab47cfaaSmrgtypedef struct { 234ab47cfaaSmrg CARD32 redMask, greenMask, blueMask; 235ab47cfaaSmrg int redShift, greenShift, blueShift; 236ab47cfaaSmrg} savageOverlayRec; 237ab47cfaaSmrg 238ab47cfaaSmrg/* Tiling defines */ 239ab47cfaaSmrg#define TILE_SIZE_BYTE 2048 /* 0x800, 2K */ 240ab47cfaaSmrg#define TILE_SIZE_BYTE_2000 4096 241ab47cfaaSmrg 242ab47cfaaSmrg#define TILEHEIGHT_16BPP 16 243ab47cfaaSmrg#define TILEHEIGHT_32BPP 16 244ab47cfaaSmrg#define TILEHEIGHT 16 /* all 16 and 32bpp tiles are 16 lines high */ 245ab47cfaaSmrg#define TILEHEIGHT_2000 32 /* 32 lines on savage 2000 */ 246ab47cfaaSmrg 247ab47cfaaSmrg#define TILEWIDTH_BYTES 128 /* 2048/TILEHEIGHT (** not for use w/8bpp tiling) */ 248ab47cfaaSmrg#define TILEWIDTH8BPP_BYTES 64 /* 2048/TILEHEIGHT_8BPP */ 249ab47cfaaSmrg#define TILEWIDTH_16BPP 64 /* TILEWIDTH_BYTES/2-BYTES-PER-PIXEL */ 250ab47cfaaSmrg#define TILEWIDTH_32BPP 32 /* TILEWIDTH_BYTES/4-BYTES-PER-PIXEL */ 251ab47cfaaSmrg 252ab47cfaaSmrg/* Bitmap descriptor structures for BCI */ 253ab47cfaaSmrgtypedef struct _HIGH { 254ab47cfaaSmrg unsigned short Stride; 255ab47cfaaSmrg unsigned char Bpp; 256ab47cfaaSmrg unsigned char ResBWTile; 257ab47cfaaSmrg} HIGH; 258ab47cfaaSmrg 259ab47cfaaSmrgtypedef struct _BMPDESC1 { 260ab47cfaaSmrg unsigned long Offset; 261ab47cfaaSmrg HIGH HighPart; 262ab47cfaaSmrg} BMPDESC1; 263ab47cfaaSmrg 264ab47cfaaSmrgtypedef struct _BMPDESC2 { 265ab47cfaaSmrg unsigned long LoPart; 266ab47cfaaSmrg unsigned long HiPart; 267ab47cfaaSmrg} BMPDESC2; 268ab47cfaaSmrg 269ab47cfaaSmrgtypedef union _BMPDESC { 270ab47cfaaSmrg BMPDESC1 bd1; 271ab47cfaaSmrg BMPDESC2 bd2; 272ab47cfaaSmrg} BMPDESC; 273ab47cfaaSmrg 274ab47cfaaSmrgtypedef struct _StatInfo { 275ab47cfaaSmrg int origMode; 276ab47cfaaSmrg int pageCnt; 277ab47cfaaSmrg pointer statBuf; 278ab47cfaaSmrg int realSeg; 279ab47cfaaSmrg int realOff; 280ab47cfaaSmrg} StatInfoRec,*StatInfoPtr; 281ab47cfaaSmrg 282ab47cfaaSmrgstruct savage_region { 2838697ee19Smrg#ifdef XSERVER_LIBPCIACCESS 2848697ee19Smrg pciaddr_t base; 2858697ee19Smrg pciaddr_t size; 2868697ee19Smrg#else 2878697ee19Smrg unsigned long base; 2888697ee19Smrg unsigned long size; 2898697ee19Smrg#endif 2908697ee19Smrg void * memory; 291ab47cfaaSmrg}; 292ab47cfaaSmrg 293ab47cfaaSmrgtypedef struct _Savage { 294ab47cfaaSmrg SavageRegRec SavedReg; 295ab47cfaaSmrg SavageRegRec ModeReg; 296ab47cfaaSmrg xf86CursorInfoPtr CursorInfoRec; 297ab47cfaaSmrg Bool ModeStructInit; 298ab47cfaaSmrg Bool NeedSTREAMS; 299ab47cfaaSmrg Bool STREAMSRunning; 300ab47cfaaSmrg int Bpp, Bpl, ScissB; 301ab47cfaaSmrg unsigned PlaneMask; 302ab47cfaaSmrg I2CBusPtr I2C; 303ab47cfaaSmrg I2CBusPtr DVI; 304ab47cfaaSmrg unsigned char DDCPort; 305ab47cfaaSmrg unsigned char I2CPort; 306ab47cfaaSmrg 307ab47cfaaSmrg int videoRambytes; 308ab47cfaaSmrg int videoRamKbytes; 309ab47cfaaSmrg int MemOffScreen; 310ab47cfaaSmrg int CursorKByte; 311ab47cfaaSmrg int endfb; 312ab47cfaaSmrg 313ab47cfaaSmrg /* These are physical addresses. */ 314ab47cfaaSmrg unsigned long ShadowPhysical; 315ab47cfaaSmrg 316ab47cfaaSmrg /* These are linear addresses. */ 317ab47cfaaSmrg struct savage_region MmioRegion; 318ab47cfaaSmrg struct savage_region FbRegion; 319ab47cfaaSmrg struct savage_region ApertureRegion; 320ab47cfaaSmrg 321ab47cfaaSmrg unsigned char* MapBase; 322ab47cfaaSmrg unsigned char* BciMem; 323ab47cfaaSmrg unsigned char* FBBase; 324ab47cfaaSmrg unsigned char* ApertureMap; 325ab47cfaaSmrg unsigned char* FBStart; 326ab47cfaaSmrg CARD32 volatile * ShadowVirtual; 327ab47cfaaSmrg 328ab47cfaaSmrg Bool PrimaryVidMapped; 329ab47cfaaSmrg int maxClock; 330ab47cfaaSmrg int HorizScaleFactor; 331ab47cfaaSmrg int MCLK, REFCLK, LCDclk; 332ab47cfaaSmrg double refclk_fact; 333ab47cfaaSmrg int GEResetCnt; 334ab47cfaaSmrg 335ab47cfaaSmrg /* Here are all the Options */ 336ab47cfaaSmrg 337ab47cfaaSmrg OptionInfoPtr Options; 3388697ee19Smrg Bool IgnoreEDID; 339ab47cfaaSmrg Bool ShowCache; 340ab47cfaaSmrg Bool pci_burst; 341ab47cfaaSmrg Bool NoPCIRetry; 342ab47cfaaSmrg Bool fifo_conservative; 343ab47cfaaSmrg Bool fifo_moderate; 344ab47cfaaSmrg Bool fifo_aggressive; 345ab47cfaaSmrg Bool hwcursor; 346ab47cfaaSmrg Bool hwc_on; 347ab47cfaaSmrg Bool NoAccel; 348ab47cfaaSmrg Bool shadowFB; 349ab47cfaaSmrg Bool UseBIOS; 350ab47cfaaSmrg int rotate; 351ab47cfaaSmrg double LCDClock; 352ab47cfaaSmrg Bool ConfigShadowStatus; /* from the config */ 353ab47cfaaSmrg Bool ShadowStatus; /* automatically enabled with DRI */ 354ab47cfaaSmrg Bool ForceShadowStatus; /* true if explicitly set in conf */ 355ab47cfaaSmrg Bool CrtOnly; 356ab47cfaaSmrg Bool TvOn; 357ab47cfaaSmrg Bool PAL; 358ab47cfaaSmrg Bool ForceInit; 359ab47cfaaSmrg int iDevInfo; 360ab47cfaaSmrg int iDevInfoPrim; 361ab47cfaaSmrg 362ab47cfaaSmrg Bool FPExpansion; 363ab47cfaaSmrg int PanelX; /* panel width */ 364ab47cfaaSmrg int PanelY; /* panel height */ 365ab47cfaaSmrg int iResX; /* crtc X display */ 366ab47cfaaSmrg int iResY; /* crtc Y display */ 367ab47cfaaSmrg int XFactor; /* overlay X factor */ 368ab47cfaaSmrg int YFactor; /* overlay Y factor */ 369ab47cfaaSmrg int displayXoffset; /* overlay X offset */ 370ab47cfaaSmrg int displayYoffset; /* overlay Y offset */ 371ab47cfaaSmrg int XExp1; /* expansion ratio in x */ 372ab47cfaaSmrg int XExp2; 373ab47cfaaSmrg int YExp1; /* expansion ratio in x */ 374ab47cfaaSmrg int YExp2; 375ab47cfaaSmrg int cxScreen; 376ab47cfaaSmrg int TVSizeX; 377ab47cfaaSmrg int TVSizeY; 378ab47cfaaSmrg 379ab47cfaaSmrg CloseScreenProcPtr CloseScreen; 3808697ee19Smrg#ifdef XSERVER_LIBPCIACCESS 3818697ee19Smrg struct pci_device * PciInfo; 3828697ee19Smrg#else 383ab47cfaaSmrg pciVideoPtr PciInfo; 384ab47cfaaSmrg PCITAG PciTag; 3858697ee19Smrg#endif 386ab47cfaaSmrg int Chipset; 387ab47cfaaSmrg int ChipId; 388ab47cfaaSmrg int ChipRev; 389ab47cfaaSmrg vbeInfoPtr pVbe; 390ab47cfaaSmrg int EntityIndex; 391ab47cfaaSmrg int ShadowCounter; 392ab47cfaaSmrg int vgaIOBase; /* 3b0 or 3d0 */ 393ab47cfaaSmrg 394ab47cfaaSmrg /* The various Savage wait handlers. */ 395ab47cfaaSmrg int (*WaitQueue)(struct _Savage *, int); 396ab47cfaaSmrg int (*WaitIdle)(struct _Savage *); 397ab47cfaaSmrg int (*WaitIdleEmpty)(struct _Savage *); 398ab47cfaaSmrg 399ab47cfaaSmrg /* Support for shadowFB and rotation */ 400ab47cfaaSmrg unsigned char * ShadowPtr; 401ab47cfaaSmrg int ShadowPitch; 402ab47cfaaSmrg void (*PointerMoved)(int index, int x, int y); 403ab47cfaaSmrg 404ab47cfaaSmrg /* support for EXA */ 405ab47cfaaSmrg ExaDriverPtr EXADriverPtr; 406ab47cfaaSmrg Bool useEXA; 407ab47cfaaSmrg unsigned long EXAendfb; 408ab47cfaaSmrg unsigned long pbd_offset; 409ab47cfaaSmrg unsigned long sbd_offset; 410ab47cfaaSmrg unsigned long pbd_high; 411ab47cfaaSmrg unsigned long sbd_high; 412ab47cfaaSmrg 413ab47cfaaSmrg /* Support for XAA acceleration */ 414ab47cfaaSmrg XAAInfoRecPtr AccelInfoRec; 415ab47cfaaSmrg xRectangle Rect; 416ab47cfaaSmrg unsigned int SavedBciCmd; 417ab47cfaaSmrg unsigned int SavedFgColor; 418ab47cfaaSmrg unsigned int SavedBgColor; 419ab47cfaaSmrg unsigned int SavedSbdOffset; 420ab47cfaaSmrg unsigned int SavedSbd; 421ab47cfaaSmrg 422ab47cfaaSmrg SavageModeTablePtr ModeTable; 423ab47cfaaSmrg 424ab47cfaaSmrg /* Support for the Savage command overflow buffer. */ 425ab47cfaaSmrg unsigned long cobIndex; /* size index */ 426ab47cfaaSmrg unsigned long cobSize; /* size in bytes */ 427ab47cfaaSmrg unsigned long cobOffset; /* offset in frame buffer */ 428ab47cfaaSmrg unsigned long bciThresholdLo; /* low and high thresholds for */ 429ab47cfaaSmrg unsigned long bciThresholdHi; /* shadow status update (32bit words) */ 430ab47cfaaSmrg unsigned long bciUsedMask; /* BCI entries used mask */ 431ab47cfaaSmrg unsigned int eventStatusReg; /* Status register index that holds 432ab47cfaaSmrg * event counter 0. */ 433ab47cfaaSmrg 434ab47cfaaSmrg /* Support for DGA */ 435ab47cfaaSmrg int numDGAModes; 436ab47cfaaSmrg DGAModePtr DGAModes; 437ab47cfaaSmrg Bool DGAactive; 438ab47cfaaSmrg int DGAViewportStatus; 439ab47cfaaSmrg 440ab47cfaaSmrg /* Support for XVideo */ 441ab47cfaaSmrg 442ab47cfaaSmrg unsigned int videoFlags; 443ab47cfaaSmrg unsigned int blendBase; 444ab47cfaaSmrg int videoFourCC; 445ab47cfaaSmrg XF86VideoAdaptorPtr adaptor; 446ab47cfaaSmrg int VideoZoomMax; 447ab47cfaaSmrg int dwBCIWait2DIdle; 448ab47cfaaSmrg XF86OffscreenImagePtr offscreenImages; 449ab47cfaaSmrg 450ab47cfaaSmrg /* Support for Overlays */ 451ab47cfaaSmrg unsigned char * FBStart2nd; 452ab47cfaaSmrg savageOverlayRec overlay; 453ab47cfaaSmrg int overlayDepth; 454ab47cfaaSmrg int primStreamBpp; 455ab47cfaaSmrg 456ab47cfaaSmrg#ifdef XF86DRI 457ab47cfaaSmrg int LockHeld; 458ab47cfaaSmrg Bool directRenderingEnabled; 459ab47cfaaSmrg DRIInfoPtr pDRIInfo; 460ab47cfaaSmrg int drmFD; 461ab47cfaaSmrg int numVisualConfigs; 462ab47cfaaSmrg __GLXvisualConfig* pVisualConfigs; 463ab47cfaaSmrg SAVAGEConfigPrivPtr pVisualConfigsPriv; 464ab47cfaaSmrg SAVAGEDRIServerPrivatePtr DRIServerInfo; 465ab47cfaaSmrg ScreenWakeupHandlerProcPtr coreWakeupHandler; 466ab47cfaaSmrg ScreenBlockHandlerProcPtr coreBlockHandler; 467ab47cfaaSmrg 468ab47cfaaSmrg#if 0 469ab47cfaaSmrg Bool haveQuiescense; 470ab47cfaaSmrg void (*GetQuiescence)(ScrnInfoPtr pScrn); 471ab47cfaaSmrg#endif 472ab47cfaaSmrg 473ab47cfaaSmrg Bool IsPCI; 474ab47cfaaSmrg Bool AgpDMA; 475ab47cfaaSmrg Bool VertexDMA; 476ab47cfaaSmrg Bool CommandDMA; 477ab47cfaaSmrg int agpMode; 478ab47cfaaSmrg drmSize agpSize; 479ab47cfaaSmrg FBLinearPtr reserved; 480ab47cfaaSmrg 481ab47cfaaSmrg unsigned int surfaceAllocation[7]; 482ab47cfaaSmrg unsigned int xvmcContext; 483ab47cfaaSmrg unsigned int DRIrunning; 484ab47cfaaSmrg unsigned int hwmcOffset; 485ab47cfaaSmrg unsigned int hwmcSize; 486ab47cfaaSmrg 487ab47cfaaSmrg Bool bDisableXvMC; 488ab47cfaaSmrg 489ab47cfaaSmrg#endif 490ab47cfaaSmrg 491ab47cfaaSmrg Bool disableCOB; 492ab47cfaaSmrg Bool BCIforXv; 493ab47cfaaSmrg 494ab47cfaaSmrg /* Bitmap Descriptors for BCI */ 495ab47cfaaSmrg BMPDESC GlobalBD; 496ab47cfaaSmrg BMPDESC PrimaryBD; 497ab47cfaaSmrg BMPDESC SecondBD; 498ab47cfaaSmrg /* do we disable tile mode by option? */ 499ab47cfaaSmrg Bool bDisableTile; 500ab47cfaaSmrg /* if we enable tile,we only support tile under 16/32bpp */ 501ab47cfaaSmrg Bool bTiled; 502ab47cfaaSmrg int lDelta; 503ab47cfaaSmrg int ulAperturePitch; /* aperture pitch */ 504ab47cfaaSmrg 505ab47cfaaSmrg /* 506ab47cfaaSmrg * cxMemory is number of pixels across screen width 507ab47cfaaSmrg * cyMemory is number of scanlines in available adapter memory. 508ab47cfaaSmrg * 509ab47cfaaSmrg * cxMemory * cyMemory is used to determine how much memory to 510ab47cfaaSmrg * allocate to our heap manager. So make sure that any space at the 511ab47cfaaSmrg * end of video memory set aside at bInitializeHardware time is kept 512ab47cfaaSmrg * out of the cyMemory calculation. 513ab47cfaaSmrg */ 514ab47cfaaSmrg int cxMemory,cyMemory; 515ab47cfaaSmrg 516ab47cfaaSmrg StatInfoRec StatInfo; /* save the SVGA state */ 517ab47cfaaSmrg 518ab47cfaaSmrg /* for dvi option */ 519ab47cfaaSmrg Bool dvi; 520ab47cfaaSmrg 521ab47cfaaSmrg SavageMonitorType DisplayType; 522ab47cfaaSmrg /* DuoView stuff */ 523ab47cfaaSmrg Bool HasCRTC2; /* MX, IX, Supersavage */ 524ab47cfaaSmrg Bool IsSecondary; /* second Screen */ 525ab47cfaaSmrg Bool IsPrimary; /* first Screen */ 526ab47cfaaSmrg EntityInfoPtr pEnt; 527ab47cfaaSmrg 528ab47cfaaSmrg} SavageRec, *SavagePtr; 529ab47cfaaSmrg 530ab47cfaaSmrg/* Video flags. */ 531ab47cfaaSmrg 532ab47cfaaSmrg#define VF_STREAMS_ON 0x0001 533ab47cfaaSmrg 534ab47cfaaSmrg#define SAVPTR(p) ((SavagePtr)((p)->driverPrivate)) 535ab47cfaaSmrg 536ab47cfaaSmrg/* Make the names of these externals driver-unique */ 537ab47cfaaSmrg#define gpScrn savagegpScrn 538ab47cfaaSmrg#define readdw savagereaddw 539ab47cfaaSmrg#define readfb savagereadfb 540ab47cfaaSmrg#define writedw savagewritedw 541ab47cfaaSmrg#define writefb savagewritefb 542ab47cfaaSmrg#define writescan savagewritescan 543ab47cfaaSmrg 544ab47cfaaSmrg/* add for support DRI */ 545ab47cfaaSmrg#ifdef XF86DRI 546ab47cfaaSmrg 547ab47cfaaSmrg#define SAVAGE_FRONT 0x1 548ab47cfaaSmrg#define SAVAGE_BACK 0x2 549ab47cfaaSmrg#define SAVAGE_DEPTH 0x4 550ab47cfaaSmrg#define SAVAGE_STENCIL 0x8 551ab47cfaaSmrg 552ab47cfaaSmrgBool SAVAGEDRIScreenInit( ScreenPtr pScreen ); 553ab47cfaaSmrgBool SAVAGEInitMC(ScreenPtr pScreen); 554ab47cfaaSmrgvoid SAVAGEDRICloseScreen( ScreenPtr pScreen ); 555ab47cfaaSmrgBool SAVAGEDRIFinishScreenInit( ScreenPtr pScreen ); 556ab47cfaaSmrg 557ab47cfaaSmrgBool SAVAGELockUpdate( ScrnInfoPtr pScrn, drmLockFlags flags ); 558ab47cfaaSmrg 559ab47cfaaSmrg#if 0 560ab47cfaaSmrgvoid SAVAGEGetQuiescence( ScrnInfoPtr pScrn ); 561ab47cfaaSmrgvoid SAVAGEGetQuiescenceShared( ScrnInfoPtr pScrn ); 562ab47cfaaSmrg#endif 563ab47cfaaSmrg 564ab47cfaaSmrgvoid SAVAGESelectBuffer(ScrnInfoPtr pScrn, int which); 565ab47cfaaSmrg 566ab47cfaaSmrg#if 0 567ab47cfaaSmrgBool SAVAGECleanupDma(ScrnInfoPtr pScrn); 568ab47cfaaSmrgBool SAVAGEInitDma(ScrnInfoPtr pScrn, int prim_size); 569ab47cfaaSmrg#endif 570ab47cfaaSmrg 571ab47cfaaSmrg#define SAVAGE_AGP_1X_MODE 0x01 572ab47cfaaSmrg#define SAVAGE_AGP_2X_MODE 0x02 573ab47cfaaSmrg#define SAVAGE_AGP_4X_MODE 0x04 574ab47cfaaSmrg#define SAVAGE_AGP_MODE_MASK 0x07 575ab47cfaaSmrg 576ab47cfaaSmrg#endif 577ab47cfaaSmrg 578ab47cfaaSmrg 579ab47cfaaSmrg/* Prototypes. */ 580ab47cfaaSmrg 581ab47cfaaSmrgextern void SavageCommonCalcClock(long freq, int min_m, int min_n1, 582ab47cfaaSmrg int max_n1, int min_n2, int max_n2, 583ab47cfaaSmrg long freq_min, long freq_max, 584ab47cfaaSmrg unsigned char *mdiv, unsigned char *ndiv); 585ab47cfaaSmrgvoid SavageAdjustFrame(int scrnIndex, int y, int x, int flags); 586ab47cfaaSmrgvoid SavageDoAdjustFrame(ScrnInfoPtr pScrn, int y, int x, int crtc2); 587ab47cfaaSmrgBool SavageSwitchMode(int scrnIndex, DisplayModePtr mode, int flags); 588ab47cfaaSmrg 589ab47cfaaSmrg/* In savage_cursor.c. */ 590ab47cfaaSmrg 591ab47cfaaSmrgBool SavageHWCursorInit(ScreenPtr pScreen); 592ab47cfaaSmrgvoid SavageShowCursor(ScrnInfoPtr); 593ab47cfaaSmrgvoid SavageHideCursor(ScrnInfoPtr); 594ab47cfaaSmrg 595ab47cfaaSmrg/* In savage_accel.c. */ 596ab47cfaaSmrg 597ab47cfaaSmrgBool SavageInitAccel(ScreenPtr); 598ab47cfaaSmrgvoid SavageInitialize2DEngine(ScrnInfoPtr); 599ab47cfaaSmrgvoid SavageSetGBD(ScrnInfoPtr); 600ab47cfaaSmrgvoid SavageAccelSync(ScrnInfoPtr); 601ab47cfaaSmrg/*int SavageHelpSolidROP(ScrnInfoPtr pScrn, int *fg, int pm, int *rop);*/ 602ab47cfaaSmrg 603ab47cfaaSmrg/* XAA and EXA */ 604ab47cfaaSmrgBool SavageXAAInit(ScreenPtr); 605ab47cfaaSmrgBool SavageEXAInit(ScreenPtr); 606ab47cfaaSmrg 607ab47cfaaSmrg/* In savage_i2c.c. */ 608ab47cfaaSmrg 609ab47cfaaSmrgBool SavageI2CInit(ScrnInfoPtr pScrn); 610ab47cfaaSmrg 611ab47cfaaSmrg/* In savage_shadow.c */ 612ab47cfaaSmrg 613ab47cfaaSmrgvoid SavagePointerMoved(int index, int x, int y); 614ab47cfaaSmrgvoid SavageRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 615ab47cfaaSmrgvoid SavageRefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 616ab47cfaaSmrgvoid SavageRefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 617ab47cfaaSmrgvoid SavageRefreshArea24(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 618ab47cfaaSmrgvoid SavageRefreshArea32(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 619ab47cfaaSmrg 620ab47cfaaSmrg/* In savage_vbe.c */ 621ab47cfaaSmrg 622ab47cfaaSmrgvoid SavageSetTextMode( SavagePtr psav ); 623ab47cfaaSmrgvoid SavageSetVESAMode( SavagePtr psav, int n, int Refresh ); 624ab47cfaaSmrgvoid SavageSetPanelEnabled( SavagePtr psav, Bool active ); 625ab47cfaaSmrgvoid SavageFreeBIOSModeTable( SavagePtr psav, SavageModeTablePtr* ppTable ); 626ab47cfaaSmrgSavageModeTablePtr SavageGetBIOSModeTable( SavagePtr psav, int iDepth ); 627ab47cfaaSmrgModeStatus SavageMatchBiosMode(ScrnInfoPtr pScrn,int width,int height,int refresh, 628ab47cfaaSmrg unsigned int *vesaMode,unsigned int *newRefresh); 629ab47cfaaSmrg 630ab47cfaaSmrgunsigned short SavageGetBIOSModes( 631ab47cfaaSmrg SavagePtr psav, 632ab47cfaaSmrg int iDepth, 633ab47cfaaSmrg SavageModeEntryPtr s3vModeTable ); 634ab47cfaaSmrg 635ab47cfaaSmrg/* In savage_video.c */ 636ab47cfaaSmrg 637ab47cfaaSmrgvoid SavageInitVideo( ScreenPtr pScreen ); 638ab47cfaaSmrg 639ab47cfaaSmrg/* In savage_streams.c */ 640ab47cfaaSmrg 641ab47cfaaSmrgvoid SavageStreamsOn(ScrnInfoPtr pScrn); 642ab47cfaaSmrgvoid SavageStreamsOff(ScrnInfoPtr pScrn); 643ab47cfaaSmrgvoid SavageInitSecondaryStream(ScrnInfoPtr pScrn); 644ab47cfaaSmrgvoid SavageInitStreamsOld(ScrnInfoPtr pScrn); 645ab47cfaaSmrgvoid SavageInitStreamsNew(ScrnInfoPtr pScrn); 646ab47cfaaSmrgvoid SavageInitStreams2000(ScrnInfoPtr pScrn); 647ab47cfaaSmrg 648ab47cfaaSmrg 649ab47cfaaSmrg#if (MODE_24 == 32) 650ab47cfaaSmrg# define BYTES_PP24 4 651ab47cfaaSmrg#else 652ab47cfaaSmrg# define BYTES_PP24 3 653ab47cfaaSmrg#endif 654ab47cfaaSmrg 655ab47cfaaSmrg 656ab47cfaaSmrg#define DEPTH_BPP(depth) (depth == 24 ? (BYTES_PP24 << 3) : (depth + 7) & ~0x7) 657ab47cfaaSmrg#define DEPTH_2ND(pScrn) (pScrn->depth > 8 ? pScrn->depth\ 658ab47cfaaSmrg : SAVPTR(pScrn)->overlayDepth) 659ab47cfaaSmrg 660ab47cfaaSmrg#endif /* SAVAGE_DRIVER_H */ 661ab47cfaaSmrg 662