savage_driver.h revision 1473d951
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; 1391473d951Smrg 1401473d951Smrg /* XVideo through AGP */ 1411473d951Smrg drmRegion agpXVideo; 142ab47cfaaSmrg} SAVAGEDRIServerPrivateRec, *SAVAGEDRIServerPrivatePtr; 143ab47cfaaSmrg 144ab47cfaaSmrg#endif 145ab47cfaaSmrg 146ab47cfaaSmrgtypedef enum { 147ab47cfaaSmrg MT_NONE, 148ab47cfaaSmrg MT_CRT, 149ab47cfaaSmrg MT_LCD, 150ab47cfaaSmrg MT_DFP, 151ab47cfaaSmrg MT_TV 152ab47cfaaSmrg} SavageMonitorType; 153ab47cfaaSmrg 154ab47cfaaSmrgtypedef struct 155ab47cfaaSmrg{ 156ab47cfaaSmrg Bool HasSecondary; 157ab47cfaaSmrg Bool TvOn; 158ab47cfaaSmrg ScrnInfoPtr pSecondaryScrn; 159ab47cfaaSmrg ScrnInfoPtr pPrimaryScrn; 160ab47cfaaSmrg 161ab47cfaaSmrg} SavageEntRec, *SavageEntPtr; 162ab47cfaaSmrg 163ab47cfaaSmrg#define VGAIN8(addr) MMIO_IN8(psav->MapBase+0x8000, addr) 164ab47cfaaSmrg#define VGAIN16(addr) MMIO_IN16(psav->MapBase+0x8000, addr) 165ab47cfaaSmrg#define VGAIN(addr) MMIO_IN32(psav->MapBase+0x8000, addr) 166ab47cfaaSmrg 167ab47cfaaSmrg#define VGAOUT8(addr,val) MMIO_OUT8(psav->MapBase+0x8000, addr, val) 168ab47cfaaSmrg#define VGAOUT16(addr,val) MMIO_OUT16(psav->MapBase+0x8000, addr, val) 169ab47cfaaSmrg#define VGAOUT(addr,val) MMIO_OUT32(psav->MapBase+0x8000, addr, val) 170ab47cfaaSmrg 171ab47cfaaSmrg#define INREG8(addr) MMIO_IN8(psav->MapBase, addr) 172ab47cfaaSmrg#define INREG16(addr) MMIO_IN16(psav->MapBase, addr) 173ab47cfaaSmrg#define INREG32(addr) MMIO_IN32(psav->MapBase, addr) 174ab47cfaaSmrg#define OUTREG8(addr,val) MMIO_OUT8(psav->MapBase, addr, val) 175ab47cfaaSmrg#define OUTREG16(addr,val) MMIO_OUT16(psav->MapBase, addr, val) 176ab47cfaaSmrg#define OUTREG32(addr,val) MMIO_OUT32(psav->MapBase, addr, val) 177ab47cfaaSmrg#define INREG(addr) INREG32(addr) 178ab47cfaaSmrg#define OUTREG(addr,val) OUTREG32(addr,val) 179ab47cfaaSmrg 180ab47cfaaSmrg#if X_BYTE_ORDER == X_LITTLE_ENDIAN 181ab47cfaaSmrg#define B_O16(x) (x) 182ab47cfaaSmrg#define B_O32(x) (x) 183ab47cfaaSmrg#else 184ab47cfaaSmrg#define B_O16(x) ((((x) & 0xff) << 8) | (((x) & 0xff) >> 8)) 185ab47cfaaSmrg#define B_O32(x) ((((x) & 0xff) << 24) | (((x) & 0xff00) << 8) \ 186ab47cfaaSmrg | (((x) & 0xff0000) >> 8) | (((x) & 0xff000000) >> 24)) 187ab47cfaaSmrg#endif 188ab47cfaaSmrg#define L_ADD(x) (B_O32(x) & 0xffff) + ((B_O32(x) >> 12) & 0xffff00) 189ab47cfaaSmrg 190ab47cfaaSmrg#define SAVAGEIOMAPSIZE 0x80000 191ab47cfaaSmrg 192ab47cfaaSmrg#define SAVAGE_CRT_ON 1 193ab47cfaaSmrg#define SAVAGE_LCD_ON 2 194ab47cfaaSmrg#define SAVAGE_TV_ON 4 195ab47cfaaSmrg 196ab47cfaaSmrg#define SAVAGE_DRIVER_NAME "savage" 197ab47cfaaSmrg#define SAVAGE_DRIVER_VERSION PACKAGE_VERSION 198ab47cfaaSmrg#define SAVAGE_VERSION_MAJOR PACKAGE_VERSION_MAJOR 199ab47cfaaSmrg#define SAVAGE_VERSION_MINOR PACKAGE_VERSION_MINOR 200ab47cfaaSmrg#define SAVAGE_PATCHLEVEL PACKAGE_VERSION_PATCHLEVEL 201ab47cfaaSmrg#define SAVAGE_VERSION ((SAVAGE_VERSION_MAJOR << 24) | \ 202ab47cfaaSmrg (SAVAGE_VERSION_MINOR << 16) | \ 203ab47cfaaSmrg SAVAGE_PATCHLEVEL) 204ab47cfaaSmrg 205ab47cfaaSmrgtypedef struct _S3VMODEENTRY { 206ab47cfaaSmrg unsigned short Width; 207ab47cfaaSmrg unsigned short Height; 208ab47cfaaSmrg unsigned short VesaMode; 209ab47cfaaSmrg unsigned char RefreshCount; 210ab47cfaaSmrg unsigned char * RefreshRate; 211ab47cfaaSmrg} SavageModeEntry, *SavageModeEntryPtr; 212ab47cfaaSmrg 213ab47cfaaSmrg 214ab47cfaaSmrgtypedef struct _S3VMODETABLE { 215ab47cfaaSmrg unsigned short NumModes; 216ab47cfaaSmrg SavageModeEntry Modes[1]; 217ab47cfaaSmrg} SavageModeTableRec, *SavageModeTablePtr; 218ab47cfaaSmrg 219ab47cfaaSmrg 220ab47cfaaSmrgtypedef struct { 221ab47cfaaSmrg unsigned int mode, refresh; 222ab47cfaaSmrg unsigned char SR08, SR0E, SR0F; 223ab47cfaaSmrg unsigned char SR10, SR11, SR12, SR13, SR15, SR18, SR1B, SR29, SR30; 224ab47cfaaSmrg unsigned char SR54[8]; 225ab47cfaaSmrg unsigned char Clock; 226ab47cfaaSmrg unsigned char CR31, CR32, CR33, CR34, CR36, CR3A, CR3B, CR3C; 227ab47cfaaSmrg unsigned char CR40, CR41, CR42, CR43, CR45; 228ab47cfaaSmrg unsigned char CR50, CR51, CR53, CR55, CR58, CR5B, CR5D, CR5E; 229ab47cfaaSmrg unsigned char CR60, CR63, CR65, CR66, CR67, CR68, CR69, CR6D, CR6F; 230ab47cfaaSmrg unsigned char CR86, CR88; 231ab47cfaaSmrg unsigned char CR90, CR91, CRB0; 232ab47cfaaSmrg unsigned int STREAMS[22]; /* yuck, streams regs */ 233ab47cfaaSmrg unsigned int MMPR0, MMPR1, MMPR2, MMPR3; 234ab47cfaaSmrg} SavageRegRec, *SavageRegPtr; 235ab47cfaaSmrg 236ab47cfaaSmrgtypedef struct { 237ab47cfaaSmrg CARD32 redMask, greenMask, blueMask; 238ab47cfaaSmrg int redShift, greenShift, blueShift; 239ab47cfaaSmrg} savageOverlayRec; 240ab47cfaaSmrg 241ab47cfaaSmrg/* Tiling defines */ 242ab47cfaaSmrg#define TILE_SIZE_BYTE 2048 /* 0x800, 2K */ 243ab47cfaaSmrg#define TILE_SIZE_BYTE_2000 4096 244ab47cfaaSmrg 245ab47cfaaSmrg#define TILEHEIGHT_16BPP 16 246ab47cfaaSmrg#define TILEHEIGHT_32BPP 16 247ab47cfaaSmrg#define TILEHEIGHT 16 /* all 16 and 32bpp tiles are 16 lines high */ 248ab47cfaaSmrg#define TILEHEIGHT_2000 32 /* 32 lines on savage 2000 */ 249ab47cfaaSmrg 250ab47cfaaSmrg#define TILEWIDTH_BYTES 128 /* 2048/TILEHEIGHT (** not for use w/8bpp tiling) */ 251ab47cfaaSmrg#define TILEWIDTH8BPP_BYTES 64 /* 2048/TILEHEIGHT_8BPP */ 252ab47cfaaSmrg#define TILEWIDTH_16BPP 64 /* TILEWIDTH_BYTES/2-BYTES-PER-PIXEL */ 253ab47cfaaSmrg#define TILEWIDTH_32BPP 32 /* TILEWIDTH_BYTES/4-BYTES-PER-PIXEL */ 254ab47cfaaSmrg 255ab47cfaaSmrg/* Bitmap descriptor structures for BCI */ 256ab47cfaaSmrgtypedef struct _HIGH { 257ab47cfaaSmrg unsigned short Stride; 258ab47cfaaSmrg unsigned char Bpp; 259ab47cfaaSmrg unsigned char ResBWTile; 260ab47cfaaSmrg} HIGH; 261ab47cfaaSmrg 262ab47cfaaSmrgtypedef struct _BMPDESC1 { 263ab47cfaaSmrg unsigned long Offset; 264ab47cfaaSmrg HIGH HighPart; 265ab47cfaaSmrg} BMPDESC1; 266ab47cfaaSmrg 267ab47cfaaSmrgtypedef struct _BMPDESC2 { 268ab47cfaaSmrg unsigned long LoPart; 269ab47cfaaSmrg unsigned long HiPart; 270ab47cfaaSmrg} BMPDESC2; 271ab47cfaaSmrg 272ab47cfaaSmrgtypedef union _BMPDESC { 273ab47cfaaSmrg BMPDESC1 bd1; 274ab47cfaaSmrg BMPDESC2 bd2; 275ab47cfaaSmrg} BMPDESC; 276ab47cfaaSmrg 277ab47cfaaSmrgtypedef struct _StatInfo { 278ab47cfaaSmrg int origMode; 279ab47cfaaSmrg int pageCnt; 280ab47cfaaSmrg pointer statBuf; 281ab47cfaaSmrg int realSeg; 282ab47cfaaSmrg int realOff; 283ab47cfaaSmrg} StatInfoRec,*StatInfoPtr; 284ab47cfaaSmrg 285ab47cfaaSmrgstruct savage_region { 2868697ee19Smrg#ifdef XSERVER_LIBPCIACCESS 2878697ee19Smrg pciaddr_t base; 2888697ee19Smrg pciaddr_t size; 2898697ee19Smrg#else 2908697ee19Smrg unsigned long base; 2918697ee19Smrg unsigned long size; 2928697ee19Smrg#endif 2938697ee19Smrg void * memory; 294ab47cfaaSmrg}; 295ab47cfaaSmrg 296ab47cfaaSmrgtypedef struct _Savage { 297ab47cfaaSmrg SavageRegRec SavedReg; 298ab47cfaaSmrg SavageRegRec ModeReg; 299ab47cfaaSmrg xf86CursorInfoPtr CursorInfoRec; 300ab47cfaaSmrg Bool ModeStructInit; 301ab47cfaaSmrg Bool NeedSTREAMS; 302ab47cfaaSmrg Bool STREAMSRunning; 303ab47cfaaSmrg int Bpp, Bpl, ScissB; 304ab47cfaaSmrg unsigned PlaneMask; 305ab47cfaaSmrg I2CBusPtr I2C; 306ab47cfaaSmrg I2CBusPtr DVI; 307ab47cfaaSmrg unsigned char DDCPort; 308ab47cfaaSmrg unsigned char I2CPort; 309ab47cfaaSmrg 310ab47cfaaSmrg int videoRambytes; 311ab47cfaaSmrg int videoRamKbytes; 312ab47cfaaSmrg int MemOffScreen; 313ab47cfaaSmrg int CursorKByte; 314ab47cfaaSmrg int endfb; 315ab47cfaaSmrg 316ab47cfaaSmrg /* These are physical addresses. */ 317ab47cfaaSmrg unsigned long ShadowPhysical; 318ab47cfaaSmrg 319ab47cfaaSmrg /* These are linear addresses. */ 320ab47cfaaSmrg struct savage_region MmioRegion; 321ab47cfaaSmrg struct savage_region FbRegion; 322ab47cfaaSmrg struct savage_region ApertureRegion; 323ab47cfaaSmrg 324ab47cfaaSmrg unsigned char* MapBase; 325ab47cfaaSmrg unsigned char* BciMem; 326ab47cfaaSmrg unsigned char* FBBase; 327ab47cfaaSmrg unsigned char* ApertureMap; 328ab47cfaaSmrg unsigned char* FBStart; 329ab47cfaaSmrg CARD32 volatile * ShadowVirtual; 330ab47cfaaSmrg 331ab47cfaaSmrg Bool PrimaryVidMapped; 332ab47cfaaSmrg int maxClock; 333ab47cfaaSmrg int HorizScaleFactor; 334ab47cfaaSmrg int MCLK, REFCLK, LCDclk; 335ab47cfaaSmrg double refclk_fact; 336ab47cfaaSmrg int GEResetCnt; 337ab47cfaaSmrg 338ab47cfaaSmrg /* Here are all the Options */ 339ab47cfaaSmrg 340ab47cfaaSmrg OptionInfoPtr Options; 3418697ee19Smrg Bool IgnoreEDID; 342ab47cfaaSmrg Bool ShowCache; 343ab47cfaaSmrg Bool pci_burst; 344ab47cfaaSmrg Bool NoPCIRetry; 345ab47cfaaSmrg Bool fifo_conservative; 346ab47cfaaSmrg Bool fifo_moderate; 347ab47cfaaSmrg Bool fifo_aggressive; 348ab47cfaaSmrg Bool hwcursor; 349ab47cfaaSmrg Bool hwc_on; 350ab47cfaaSmrg Bool NoAccel; 351ab47cfaaSmrg Bool shadowFB; 352ab47cfaaSmrg Bool UseBIOS; 353ab47cfaaSmrg int rotate; 354ab47cfaaSmrg double LCDClock; 355ab47cfaaSmrg Bool ConfigShadowStatus; /* from the config */ 356ab47cfaaSmrg Bool ShadowStatus; /* automatically enabled with DRI */ 357ab47cfaaSmrg Bool ForceShadowStatus; /* true if explicitly set in conf */ 358ab47cfaaSmrg Bool CrtOnly; 359ab47cfaaSmrg Bool TvOn; 360ab47cfaaSmrg Bool PAL; 361ab47cfaaSmrg Bool ForceInit; 362ab47cfaaSmrg int iDevInfo; 363ab47cfaaSmrg int iDevInfoPrim; 364ab47cfaaSmrg 365ab47cfaaSmrg Bool FPExpansion; 366ab47cfaaSmrg int PanelX; /* panel width */ 367ab47cfaaSmrg int PanelY; /* panel height */ 368ab47cfaaSmrg int iResX; /* crtc X display */ 369ab47cfaaSmrg int iResY; /* crtc Y display */ 370ab47cfaaSmrg int XFactor; /* overlay X factor */ 371ab47cfaaSmrg int YFactor; /* overlay Y factor */ 372ab47cfaaSmrg int displayXoffset; /* overlay X offset */ 373ab47cfaaSmrg int displayYoffset; /* overlay Y offset */ 374ab47cfaaSmrg int XExp1; /* expansion ratio in x */ 375ab47cfaaSmrg int XExp2; 376ab47cfaaSmrg int YExp1; /* expansion ratio in x */ 377ab47cfaaSmrg int YExp2; 378ab47cfaaSmrg int cxScreen; 379ab47cfaaSmrg int TVSizeX; 380ab47cfaaSmrg int TVSizeY; 381ab47cfaaSmrg 382ab47cfaaSmrg CloseScreenProcPtr CloseScreen; 3838697ee19Smrg#ifdef XSERVER_LIBPCIACCESS 3848697ee19Smrg struct pci_device * PciInfo; 3858697ee19Smrg#else 386ab47cfaaSmrg pciVideoPtr PciInfo; 387ab47cfaaSmrg PCITAG PciTag; 3888697ee19Smrg#endif 389ab47cfaaSmrg int Chipset; 390ab47cfaaSmrg int ChipId; 391ab47cfaaSmrg int ChipRev; 392ab47cfaaSmrg vbeInfoPtr pVbe; 393ab47cfaaSmrg int EntityIndex; 394ab47cfaaSmrg int ShadowCounter; 395ab47cfaaSmrg int vgaIOBase; /* 3b0 or 3d0 */ 396ab47cfaaSmrg 397ab47cfaaSmrg /* The various Savage wait handlers. */ 398ab47cfaaSmrg int (*WaitQueue)(struct _Savage *, int); 399ab47cfaaSmrg int (*WaitIdle)(struct _Savage *); 400ab47cfaaSmrg int (*WaitIdleEmpty)(struct _Savage *); 401ab47cfaaSmrg 402ab47cfaaSmrg /* Support for shadowFB and rotation */ 403ab47cfaaSmrg unsigned char * ShadowPtr; 404ab47cfaaSmrg int ShadowPitch; 405ab47cfaaSmrg void (*PointerMoved)(int index, int x, int y); 406ab47cfaaSmrg 407ab47cfaaSmrg /* support for EXA */ 408ab47cfaaSmrg ExaDriverPtr EXADriverPtr; 409ab47cfaaSmrg Bool useEXA; 410ab47cfaaSmrg unsigned long EXAendfb; 411ab47cfaaSmrg unsigned long pbd_offset; 412ab47cfaaSmrg unsigned long sbd_offset; 413ab47cfaaSmrg unsigned long pbd_high; 414ab47cfaaSmrg unsigned long sbd_high; 415ab47cfaaSmrg 416ab47cfaaSmrg /* Support for XAA acceleration */ 417ab47cfaaSmrg XAAInfoRecPtr AccelInfoRec; 418ab47cfaaSmrg xRectangle Rect; 419ab47cfaaSmrg unsigned int SavedBciCmd; 420ab47cfaaSmrg unsigned int SavedFgColor; 421ab47cfaaSmrg unsigned int SavedBgColor; 422ab47cfaaSmrg unsigned int SavedSbdOffset; 423ab47cfaaSmrg unsigned int SavedSbd; 424ab47cfaaSmrg 425ab47cfaaSmrg SavageModeTablePtr ModeTable; 426ab47cfaaSmrg 427ab47cfaaSmrg /* Support for the Savage command overflow buffer. */ 428ab47cfaaSmrg unsigned long cobIndex; /* size index */ 429ab47cfaaSmrg unsigned long cobSize; /* size in bytes */ 430ab47cfaaSmrg unsigned long cobOffset; /* offset in frame buffer */ 431ab47cfaaSmrg unsigned long bciThresholdLo; /* low and high thresholds for */ 432ab47cfaaSmrg unsigned long bciThresholdHi; /* shadow status update (32bit words) */ 433ab47cfaaSmrg unsigned long bciUsedMask; /* BCI entries used mask */ 434ab47cfaaSmrg unsigned int eventStatusReg; /* Status register index that holds 435ab47cfaaSmrg * event counter 0. */ 436ab47cfaaSmrg 437ab47cfaaSmrg /* Support for DGA */ 438ab47cfaaSmrg int numDGAModes; 439ab47cfaaSmrg DGAModePtr DGAModes; 440ab47cfaaSmrg Bool DGAactive; 441ab47cfaaSmrg int DGAViewportStatus; 442ab47cfaaSmrg 443ab47cfaaSmrg /* Support for XVideo */ 444ab47cfaaSmrg 445ab47cfaaSmrg unsigned int videoFlags; 446ab47cfaaSmrg unsigned int blendBase; 447ab47cfaaSmrg int videoFourCC; 448ab47cfaaSmrg XF86VideoAdaptorPtr adaptor; 449ab47cfaaSmrg int VideoZoomMax; 450ab47cfaaSmrg int dwBCIWait2DIdle; 451ab47cfaaSmrg XF86OffscreenImagePtr offscreenImages; 452ab47cfaaSmrg 453ab47cfaaSmrg /* Support for Overlays */ 454ab47cfaaSmrg unsigned char * FBStart2nd; 455ab47cfaaSmrg savageOverlayRec overlay; 456ab47cfaaSmrg int overlayDepth; 457ab47cfaaSmrg int primStreamBpp; 458ab47cfaaSmrg 459ab47cfaaSmrg#ifdef XF86DRI 460ab47cfaaSmrg int LockHeld; 461ab47cfaaSmrg Bool directRenderingEnabled; 462ab47cfaaSmrg DRIInfoPtr pDRIInfo; 463ab47cfaaSmrg int drmFD; 464ab47cfaaSmrg int numVisualConfigs; 465ab47cfaaSmrg __GLXvisualConfig* pVisualConfigs; 466ab47cfaaSmrg SAVAGEConfigPrivPtr pVisualConfigsPriv; 467ab47cfaaSmrg SAVAGEDRIServerPrivatePtr DRIServerInfo; 468ab47cfaaSmrg ScreenWakeupHandlerProcPtr coreWakeupHandler; 469ab47cfaaSmrg ScreenBlockHandlerProcPtr coreBlockHandler; 470ab47cfaaSmrg 471ab47cfaaSmrg#if 0 472ab47cfaaSmrg Bool haveQuiescense; 473ab47cfaaSmrg void (*GetQuiescence)(ScrnInfoPtr pScrn); 474ab47cfaaSmrg#endif 475ab47cfaaSmrg 476ab47cfaaSmrg Bool IsPCI; 477ab47cfaaSmrg Bool AgpDMA; 478ab47cfaaSmrg Bool VertexDMA; 479ab47cfaaSmrg Bool CommandDMA; 480ab47cfaaSmrg int agpMode; 481ab47cfaaSmrg drmSize agpSize; 482ab47cfaaSmrg FBLinearPtr reserved; 483ab47cfaaSmrg 484ab47cfaaSmrg unsigned int surfaceAllocation[7]; 485ab47cfaaSmrg unsigned int xvmcContext; 486ab47cfaaSmrg unsigned int DRIrunning; 487ab47cfaaSmrg unsigned int hwmcOffset; 488ab47cfaaSmrg unsigned int hwmcSize; 489ab47cfaaSmrg 490ab47cfaaSmrg Bool bDisableXvMC; 491ab47cfaaSmrg 4921473d951Smrg Bool AGPforXv; 493ab47cfaaSmrg#endif 494ab47cfaaSmrg 495ab47cfaaSmrg Bool disableCOB; 496ab47cfaaSmrg Bool BCIforXv; 497ab47cfaaSmrg 498ab47cfaaSmrg /* Bitmap Descriptors for BCI */ 499ab47cfaaSmrg BMPDESC GlobalBD; 500ab47cfaaSmrg BMPDESC PrimaryBD; 501ab47cfaaSmrg BMPDESC SecondBD; 502ab47cfaaSmrg /* do we disable tile mode by option? */ 503ab47cfaaSmrg Bool bDisableTile; 504ab47cfaaSmrg /* if we enable tile,we only support tile under 16/32bpp */ 505ab47cfaaSmrg Bool bTiled; 506ab47cfaaSmrg int lDelta; 507ab47cfaaSmrg int ulAperturePitch; /* aperture pitch */ 508ab47cfaaSmrg 509ab47cfaaSmrg /* 510ab47cfaaSmrg * cxMemory is number of pixels across screen width 511ab47cfaaSmrg * cyMemory is number of scanlines in available adapter memory. 512ab47cfaaSmrg * 513ab47cfaaSmrg * cxMemory * cyMemory is used to determine how much memory to 514ab47cfaaSmrg * allocate to our heap manager. So make sure that any space at the 515ab47cfaaSmrg * end of video memory set aside at bInitializeHardware time is kept 516ab47cfaaSmrg * out of the cyMemory calculation. 517ab47cfaaSmrg */ 518ab47cfaaSmrg int cxMemory,cyMemory; 519ab47cfaaSmrg 520ab47cfaaSmrg StatInfoRec StatInfo; /* save the SVGA state */ 521ab47cfaaSmrg 522ab47cfaaSmrg /* for dvi option */ 523ab47cfaaSmrg Bool dvi; 524ab47cfaaSmrg 525ab47cfaaSmrg SavageMonitorType DisplayType; 526ab47cfaaSmrg /* DuoView stuff */ 527ab47cfaaSmrg Bool HasCRTC2; /* MX, IX, Supersavage */ 528ab47cfaaSmrg Bool IsSecondary; /* second Screen */ 529ab47cfaaSmrg Bool IsPrimary; /* first Screen */ 530ab47cfaaSmrg EntityInfoPtr pEnt; 531ab47cfaaSmrg 532ab47cfaaSmrg} SavageRec, *SavagePtr; 533ab47cfaaSmrg 534ab47cfaaSmrg/* Video flags. */ 535ab47cfaaSmrg 536ab47cfaaSmrg#define VF_STREAMS_ON 0x0001 537ab47cfaaSmrg 538ab47cfaaSmrg#define SAVPTR(p) ((SavagePtr)((p)->driverPrivate)) 539ab47cfaaSmrg 540ab47cfaaSmrg/* Make the names of these externals driver-unique */ 541ab47cfaaSmrg#define gpScrn savagegpScrn 542ab47cfaaSmrg#define readdw savagereaddw 543ab47cfaaSmrg#define readfb savagereadfb 544ab47cfaaSmrg#define writedw savagewritedw 545ab47cfaaSmrg#define writefb savagewritefb 546ab47cfaaSmrg#define writescan savagewritescan 547ab47cfaaSmrg 548ab47cfaaSmrg/* add for support DRI */ 549ab47cfaaSmrg#ifdef XF86DRI 550ab47cfaaSmrg 551ab47cfaaSmrg#define SAVAGE_FRONT 0x1 552ab47cfaaSmrg#define SAVAGE_BACK 0x2 553ab47cfaaSmrg#define SAVAGE_DEPTH 0x4 554ab47cfaaSmrg#define SAVAGE_STENCIL 0x8 555ab47cfaaSmrg 556ab47cfaaSmrgBool SAVAGEDRIScreenInit( ScreenPtr pScreen ); 557ab47cfaaSmrgBool SAVAGEInitMC(ScreenPtr pScreen); 558ab47cfaaSmrgvoid SAVAGEDRICloseScreen( ScreenPtr pScreen ); 559ab47cfaaSmrgBool SAVAGEDRIFinishScreenInit( ScreenPtr pScreen ); 560ab47cfaaSmrg 561ab47cfaaSmrgBool SAVAGELockUpdate( ScrnInfoPtr pScrn, drmLockFlags flags ); 562ab47cfaaSmrg 563ab47cfaaSmrg#if 0 564ab47cfaaSmrgvoid SAVAGEGetQuiescence( ScrnInfoPtr pScrn ); 565ab47cfaaSmrgvoid SAVAGEGetQuiescenceShared( ScrnInfoPtr pScrn ); 566ab47cfaaSmrg#endif 567ab47cfaaSmrg 568ab47cfaaSmrgvoid SAVAGESelectBuffer(ScrnInfoPtr pScrn, int which); 569ab47cfaaSmrg 570ab47cfaaSmrg#if 0 571ab47cfaaSmrgBool SAVAGECleanupDma(ScrnInfoPtr pScrn); 572ab47cfaaSmrgBool SAVAGEInitDma(ScrnInfoPtr pScrn, int prim_size); 573ab47cfaaSmrg#endif 574ab47cfaaSmrg 575ab47cfaaSmrg#define SAVAGE_AGP_1X_MODE 0x01 576ab47cfaaSmrg#define SAVAGE_AGP_2X_MODE 0x02 577ab47cfaaSmrg#define SAVAGE_AGP_4X_MODE 0x04 578ab47cfaaSmrg#define SAVAGE_AGP_MODE_MASK 0x07 579ab47cfaaSmrg 580ab47cfaaSmrg#endif 581ab47cfaaSmrg 582ab47cfaaSmrg 583ab47cfaaSmrg/* Prototypes. */ 584ab47cfaaSmrg 585ab47cfaaSmrgextern void SavageCommonCalcClock(long freq, int min_m, int min_n1, 586ab47cfaaSmrg int max_n1, int min_n2, int max_n2, 587ab47cfaaSmrg long freq_min, long freq_max, 588ab47cfaaSmrg unsigned char *mdiv, unsigned char *ndiv); 589ab47cfaaSmrgvoid SavageAdjustFrame(int scrnIndex, int y, int x, int flags); 590ab47cfaaSmrgvoid SavageDoAdjustFrame(ScrnInfoPtr pScrn, int y, int x, int crtc2); 591ab47cfaaSmrgBool SavageSwitchMode(int scrnIndex, DisplayModePtr mode, int flags); 592ab47cfaaSmrg 593ab47cfaaSmrg/* In savage_cursor.c. */ 594ab47cfaaSmrg 595ab47cfaaSmrgBool SavageHWCursorInit(ScreenPtr pScreen); 596ab47cfaaSmrgvoid SavageShowCursor(ScrnInfoPtr); 597ab47cfaaSmrgvoid SavageHideCursor(ScrnInfoPtr); 598ab47cfaaSmrg 599ab47cfaaSmrg/* In savage_accel.c. */ 600ab47cfaaSmrg 601ab47cfaaSmrgBool SavageInitAccel(ScreenPtr); 602ab47cfaaSmrgvoid SavageInitialize2DEngine(ScrnInfoPtr); 603ab47cfaaSmrgvoid SavageSetGBD(ScrnInfoPtr); 604ab47cfaaSmrgvoid SavageAccelSync(ScrnInfoPtr); 605ab47cfaaSmrg/*int SavageHelpSolidROP(ScrnInfoPtr pScrn, int *fg, int pm, int *rop);*/ 606ab47cfaaSmrg 607ab47cfaaSmrg/* XAA and EXA */ 608ab47cfaaSmrgBool SavageXAAInit(ScreenPtr); 609ab47cfaaSmrgBool SavageEXAInit(ScreenPtr); 610ab47cfaaSmrg 611ab47cfaaSmrg/* In savage_i2c.c. */ 612ab47cfaaSmrg 613ab47cfaaSmrgBool SavageI2CInit(ScrnInfoPtr pScrn); 614ab47cfaaSmrg 615ab47cfaaSmrg/* In savage_shadow.c */ 616ab47cfaaSmrg 617ab47cfaaSmrgvoid SavagePointerMoved(int index, int x, int y); 618ab47cfaaSmrgvoid SavageRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 619ab47cfaaSmrgvoid SavageRefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 620ab47cfaaSmrgvoid SavageRefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 621ab47cfaaSmrgvoid SavageRefreshArea24(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 622ab47cfaaSmrgvoid SavageRefreshArea32(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 623ab47cfaaSmrg 624ab47cfaaSmrg/* In savage_vbe.c */ 625ab47cfaaSmrg 626ab47cfaaSmrgvoid SavageSetTextMode( SavagePtr psav ); 627ab47cfaaSmrgvoid SavageSetVESAMode( SavagePtr psav, int n, int Refresh ); 628ab47cfaaSmrgvoid SavageSetPanelEnabled( SavagePtr psav, Bool active ); 629ab47cfaaSmrgvoid SavageFreeBIOSModeTable( SavagePtr psav, SavageModeTablePtr* ppTable ); 630ab47cfaaSmrgSavageModeTablePtr SavageGetBIOSModeTable( SavagePtr psav, int iDepth ); 631ab47cfaaSmrgModeStatus SavageMatchBiosMode(ScrnInfoPtr pScrn,int width,int height,int refresh, 632ab47cfaaSmrg unsigned int *vesaMode,unsigned int *newRefresh); 633ab47cfaaSmrg 634ab47cfaaSmrgunsigned short SavageGetBIOSModes( 635ab47cfaaSmrg SavagePtr psav, 636ab47cfaaSmrg int iDepth, 637ab47cfaaSmrg SavageModeEntryPtr s3vModeTable ); 638ab47cfaaSmrg 639ab47cfaaSmrg/* In savage_video.c */ 640ab47cfaaSmrg 641ab47cfaaSmrgvoid SavageInitVideo( ScreenPtr pScreen ); 642ab47cfaaSmrg 643ab47cfaaSmrg/* In savage_streams.c */ 644ab47cfaaSmrg 645ab47cfaaSmrgvoid SavageStreamsOn(ScrnInfoPtr pScrn); 646ab47cfaaSmrgvoid SavageStreamsOff(ScrnInfoPtr pScrn); 647ab47cfaaSmrgvoid SavageInitSecondaryStream(ScrnInfoPtr pScrn); 648ab47cfaaSmrgvoid SavageInitStreamsOld(ScrnInfoPtr pScrn); 649ab47cfaaSmrgvoid SavageInitStreamsNew(ScrnInfoPtr pScrn); 650ab47cfaaSmrgvoid SavageInitStreams2000(ScrnInfoPtr pScrn); 651ab47cfaaSmrg 652ab47cfaaSmrg 653ab47cfaaSmrg#if (MODE_24 == 32) 654ab47cfaaSmrg# define BYTES_PP24 4 655ab47cfaaSmrg#else 656ab47cfaaSmrg# define BYTES_PP24 3 657ab47cfaaSmrg#endif 658ab47cfaaSmrg 659ab47cfaaSmrg 660ab47cfaaSmrg#define DEPTH_BPP(depth) (depth == 24 ? (BYTES_PP24 << 3) : (depth + 7) & ~0x7) 661ab47cfaaSmrg#define DEPTH_2ND(pScrn) (pScrn->depth > 8 ? pScrn->depth\ 662ab47cfaaSmrg : SAVPTR(pScrn)->overlayDepth) 663ab47cfaaSmrg 664ab47cfaaSmrg#endif /* SAVAGE_DRIVER_H */ 665ab47cfaaSmrg 666