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" 545c42550eSmrg#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 6 55ab47cfaaSmrg#include "xf86Resources.h" 565c42550eSmrg#endif 57188eae84Sprlw#include "xf86Modes.h" 58ab47cfaaSmrg#include "xf86Pci.h" 59ab47cfaaSmrg#include "xf86_OSproc.h" 60ab47cfaaSmrg#include "xf86Cursor.h" 61ab47cfaaSmrg#include "mipointer.h" 62ab47cfaaSmrg#include "micmap.h" 63ab47cfaaSmrg#include "fb.h" 64ab47cfaaSmrg#include "fboverlay.h" 65ab47cfaaSmrg#include "xf86cmap.h" 66ab47cfaaSmrg#include "vbe.h" 67aa9e3350Smrg#ifdef HAVE_XAA_H 68ab47cfaaSmrg#include "xaa.h" 69aa9e3350Smrg#endif 70aa9e3350Smrg#include "xf86fbman.h" 71ab47cfaaSmrg#include "exa.h" 72ab47cfaaSmrg#include "xf86xv.h" 73ab47cfaaSmrg 74ab47cfaaSmrg#include "savage_regs.h" 75ab47cfaaSmrg#include "savage_vbe.h" 76ab47cfaaSmrg 77aa9e3350Smrg#ifndef XF86DRI 78aa9e3350Smrg#undef SAVAGEDRI 79aa9e3350Smrg#endif 80aa9e3350Smrg 81d7582bcdSmrg#include "compat-api.h" 82d7582bcdSmrg 83aa9e3350Smrg#ifdef SAVAGEDRI 84ab47cfaaSmrg#define _XF86DRI_SERVER_ 85ab47cfaaSmrg#include "savage_dripriv.h" 86ab47cfaaSmrg#include "savage_dri.h" 87ab47cfaaSmrg#include "dri.h" 88ab47cfaaSmrg#include "xf86drm.h" 89ab47cfaaSmrg 90ab47cfaaSmrg/* Totals 2 Mbytes which equals 2^16 32-byte vertices divided among up 91ab47cfaaSmrg * to 32 clients. */ 92ab47cfaaSmrg#define SAVAGE_NUM_BUFFERS 32 93ab47cfaaSmrg#define SAVAGE_BUFFER_SIZE (1 << 16) /* 64k */ 94ab47cfaaSmrg 95ab47cfaaSmrg#define SAVAGE_CMDDMA_SIZE 0x100000 /* 1MB */ 96ab47cfaaSmrg 97ab47cfaaSmrg#define SAVAGE_DEFAULT_AGP_MODE 1 98ab47cfaaSmrg#define SAVAGE_MAX_AGP_MODE 4 99ab47cfaaSmrg 100ab47cfaaSmrg/* Buffer are aligned on 4096 byte boundaries. 101ab47cfaaSmrg */ 102ab47cfaaSmrg/* this is used for backbuffer, depthbuffer, etc..*/ 103ab47cfaaSmrg/* alignment */ 104ab47cfaaSmrg 105ab47cfaaSmrg#define SAVAGE_BUFFER_ALIGN 0x00000fff 106ab47cfaaSmrg 107ab47cfaaSmrgtypedef struct _server{ 108ab47cfaaSmrg int reserved_map_agpstart; 109ab47cfaaSmrg int reserved_map_idx; 110ab47cfaaSmrg 111ab47cfaaSmrg int sarea_priv_offset; 112ab47cfaaSmrg 113ab47cfaaSmrg int chipset; 114ab47cfaaSmrg int sgram; /* seems no use */ 115ab47cfaaSmrg 116ab47cfaaSmrg unsigned int frontOffset; 117ab47cfaaSmrg unsigned int frontPitch; 118ab47cfaaSmrg unsigned int frontbufferSize; 119ab47cfaaSmrg unsigned int frontBitmapDesc; 120ab47cfaaSmrg 121ab47cfaaSmrg unsigned int backOffset; 122ab47cfaaSmrg unsigned int backPitch; 123ab47cfaaSmrg unsigned int backbufferSize; 124ab47cfaaSmrg unsigned int backBitmapDesc; 125ab47cfaaSmrg 126ab47cfaaSmrg unsigned int depthOffset; 127ab47cfaaSmrg unsigned int depthPitch; 128ab47cfaaSmrg unsigned int depthbufferSize; 129ab47cfaaSmrg unsigned int depthBitmapDesc; 130ab47cfaaSmrg 131ab47cfaaSmrg unsigned int textureOffset; 132ab47cfaaSmrg int textureSize; 133ab47cfaaSmrg int logTextureGranularity; 134ab47cfaaSmrg 135ab47cfaaSmrg drmRegion agp; 136ab47cfaaSmrg 137ab47cfaaSmrg /* PCI mappings */ 138ab47cfaaSmrg drmRegion aperture; 139ab47cfaaSmrg drmRegion registers; 140ab47cfaaSmrg drmRegion status; 141ab47cfaaSmrg 142ab47cfaaSmrg /* AGP mappings */ 143ab47cfaaSmrg drmRegion buffers; 144ab47cfaaSmrg drmRegion agpTextures; 145ab47cfaaSmrg int logAgpTextureGranularity; 146ab47cfaaSmrg 147ab47cfaaSmrg /* command DMA */ 148ab47cfaaSmrg drmRegion cmdDma; 1491473d951Smrg 1501473d951Smrg /* XVideo through AGP */ 1511473d951Smrg drmRegion agpXVideo; 152ab47cfaaSmrg} SAVAGEDRIServerPrivateRec, *SAVAGEDRIServerPrivatePtr; 153ab47cfaaSmrg 154ab47cfaaSmrg#endif 155ab47cfaaSmrg 156a0e1ef58Smrg#include "compat-api.h" 157a0e1ef58Smrg 158ab47cfaaSmrgtypedef enum { 159ab47cfaaSmrg MT_NONE, 160ab47cfaaSmrg MT_CRT, 161ab47cfaaSmrg MT_LCD, 162ab47cfaaSmrg MT_DFP, 163ab47cfaaSmrg MT_TV 164ab47cfaaSmrg} SavageMonitorType; 165ab47cfaaSmrg 166ab47cfaaSmrgtypedef struct 167ab47cfaaSmrg{ 168ab47cfaaSmrg Bool HasSecondary; 169ab47cfaaSmrg Bool TvOn; 170ab47cfaaSmrg ScrnInfoPtr pSecondaryScrn; 171ab47cfaaSmrg ScrnInfoPtr pPrimaryScrn; 172ab47cfaaSmrg 173ab47cfaaSmrg} SavageEntRec, *SavageEntPtr; 174ab47cfaaSmrg 175ab47cfaaSmrg#define VGAIN8(addr) MMIO_IN8(psav->MapBase+0x8000, addr) 176ab47cfaaSmrg#define VGAIN16(addr) MMIO_IN16(psav->MapBase+0x8000, addr) 177ab47cfaaSmrg#define VGAIN(addr) MMIO_IN32(psav->MapBase+0x8000, addr) 178ab47cfaaSmrg 179ab47cfaaSmrg#define VGAOUT8(addr,val) MMIO_OUT8(psav->MapBase+0x8000, addr, val) 180ab47cfaaSmrg#define VGAOUT16(addr,val) MMIO_OUT16(psav->MapBase+0x8000, addr, val) 181ab47cfaaSmrg#define VGAOUT(addr,val) MMIO_OUT32(psav->MapBase+0x8000, addr, val) 182ab47cfaaSmrg 183ab47cfaaSmrg#define INREG8(addr) MMIO_IN8(psav->MapBase, addr) 184ab47cfaaSmrg#define INREG16(addr) MMIO_IN16(psav->MapBase, addr) 185ab47cfaaSmrg#define INREG32(addr) MMIO_IN32(psav->MapBase, addr) 186ab47cfaaSmrg#define OUTREG8(addr,val) MMIO_OUT8(psav->MapBase, addr, val) 187ab47cfaaSmrg#define OUTREG16(addr,val) MMIO_OUT16(psav->MapBase, addr, val) 188ab47cfaaSmrg#define OUTREG32(addr,val) MMIO_OUT32(psav->MapBase, addr, val) 189ab47cfaaSmrg#define INREG(addr) INREG32(addr) 190ab47cfaaSmrg#define OUTREG(addr,val) OUTREG32(addr,val) 191ab47cfaaSmrg 192ab47cfaaSmrg#if X_BYTE_ORDER == X_LITTLE_ENDIAN 193ab47cfaaSmrg#define B_O16(x) (x) 194ab47cfaaSmrg#define B_O32(x) (x) 195ab47cfaaSmrg#else 196ab47cfaaSmrg#define B_O16(x) ((((x) & 0xff) << 8) | (((x) & 0xff) >> 8)) 197ab47cfaaSmrg#define B_O32(x) ((((x) & 0xff) << 24) | (((x) & 0xff00) << 8) \ 198ab47cfaaSmrg | (((x) & 0xff0000) >> 8) | (((x) & 0xff000000) >> 24)) 199ab47cfaaSmrg#endif 200ab47cfaaSmrg#define L_ADD(x) (B_O32(x) & 0xffff) + ((B_O32(x) >> 12) & 0xffff00) 201ab47cfaaSmrg 202ab47cfaaSmrg#define SAVAGEIOMAPSIZE 0x80000 203ab47cfaaSmrg 204ab47cfaaSmrg#define SAVAGE_CRT_ON 1 205ab47cfaaSmrg#define SAVAGE_LCD_ON 2 206ab47cfaaSmrg#define SAVAGE_TV_ON 4 207ab47cfaaSmrg 208ab47cfaaSmrg#define SAVAGE_DRIVER_NAME "savage" 209ab47cfaaSmrg#define SAVAGE_DRIVER_VERSION PACKAGE_VERSION 210ab47cfaaSmrg#define SAVAGE_VERSION_MAJOR PACKAGE_VERSION_MAJOR 211ab47cfaaSmrg#define SAVAGE_VERSION_MINOR PACKAGE_VERSION_MINOR 212ab47cfaaSmrg#define SAVAGE_PATCHLEVEL PACKAGE_VERSION_PATCHLEVEL 213ab47cfaaSmrg#define SAVAGE_VERSION ((SAVAGE_VERSION_MAJOR << 24) | \ 214ab47cfaaSmrg (SAVAGE_VERSION_MINOR << 16) | \ 215ab47cfaaSmrg SAVAGE_PATCHLEVEL) 216ab47cfaaSmrg 217ab47cfaaSmrgtypedef struct _S3VMODEENTRY { 218ab47cfaaSmrg unsigned short Width; 219ab47cfaaSmrg unsigned short Height; 220ab47cfaaSmrg unsigned short VesaMode; 221ab47cfaaSmrg unsigned char RefreshCount; 222ab47cfaaSmrg unsigned char * RefreshRate; 223ab47cfaaSmrg} SavageModeEntry, *SavageModeEntryPtr; 224ab47cfaaSmrg 225ab47cfaaSmrg 226ab47cfaaSmrgtypedef struct _S3VMODETABLE { 227ab47cfaaSmrg unsigned short NumModes; 228ab47cfaaSmrg SavageModeEntry Modes[1]; 229ab47cfaaSmrg} SavageModeTableRec, *SavageModeTablePtr; 230ab47cfaaSmrg 231ab47cfaaSmrg 232ab47cfaaSmrgtypedef struct { 233ab47cfaaSmrg unsigned int mode, refresh; 234ab47cfaaSmrg unsigned char SR08, SR0E, SR0F; 235ab47cfaaSmrg unsigned char SR10, SR11, SR12, SR13, SR15, SR18, SR1B, SR29, SR30; 236ab47cfaaSmrg unsigned char SR54[8]; 237ab47cfaaSmrg unsigned char Clock; 238ab47cfaaSmrg unsigned char CR31, CR32, CR33, CR34, CR36, CR3A, CR3B, CR3C; 239ab47cfaaSmrg unsigned char CR40, CR41, CR42, CR43, CR45; 240ab47cfaaSmrg unsigned char CR50, CR51, CR53, CR55, CR58, CR5B, CR5D, CR5E; 241ab47cfaaSmrg unsigned char CR60, CR63, CR65, CR66, CR67, CR68, CR69, CR6D, CR6F; 242ab47cfaaSmrg unsigned char CR86, CR88; 243ab47cfaaSmrg unsigned char CR90, CR91, CRB0; 244ab47cfaaSmrg unsigned int STREAMS[22]; /* yuck, streams regs */ 245ab47cfaaSmrg unsigned int MMPR0, MMPR1, MMPR2, MMPR3; 246ab47cfaaSmrg} SavageRegRec, *SavageRegPtr; 247ab47cfaaSmrg 248ab47cfaaSmrgtypedef struct { 249ab47cfaaSmrg CARD32 redMask, greenMask, blueMask; 250ab47cfaaSmrg int redShift, greenShift, blueShift; 251ab47cfaaSmrg} savageOverlayRec; 252ab47cfaaSmrg 253ab47cfaaSmrg/* Tiling defines */ 254ab47cfaaSmrg#define TILE_SIZE_BYTE 2048 /* 0x800, 2K */ 255ab47cfaaSmrg#define TILE_SIZE_BYTE_2000 4096 256ab47cfaaSmrg 257ab47cfaaSmrg#define TILEHEIGHT_16BPP 16 258ab47cfaaSmrg#define TILEHEIGHT_32BPP 16 259ab47cfaaSmrg#define TILEHEIGHT 16 /* all 16 and 32bpp tiles are 16 lines high */ 260ab47cfaaSmrg#define TILEHEIGHT_2000 32 /* 32 lines on savage 2000 */ 261ab47cfaaSmrg 262ab47cfaaSmrg#define TILEWIDTH_BYTES 128 /* 2048/TILEHEIGHT (** not for use w/8bpp tiling) */ 263ab47cfaaSmrg#define TILEWIDTH8BPP_BYTES 64 /* 2048/TILEHEIGHT_8BPP */ 264ab47cfaaSmrg#define TILEWIDTH_16BPP 64 /* TILEWIDTH_BYTES/2-BYTES-PER-PIXEL */ 265ab47cfaaSmrg#define TILEWIDTH_32BPP 32 /* TILEWIDTH_BYTES/4-BYTES-PER-PIXEL */ 266ab47cfaaSmrg 267ab47cfaaSmrg/* Bitmap descriptor structures for BCI */ 268ab47cfaaSmrgtypedef struct _HIGH { 269ab47cfaaSmrg unsigned short Stride; 270ab47cfaaSmrg unsigned char Bpp; 271ab47cfaaSmrg unsigned char ResBWTile; 272ab47cfaaSmrg} HIGH; 273ab47cfaaSmrg 274ab47cfaaSmrgtypedef struct _BMPDESC1 { 275ab47cfaaSmrg unsigned long Offset; 276ab47cfaaSmrg HIGH HighPart; 277ab47cfaaSmrg} BMPDESC1; 278ab47cfaaSmrg 279ab47cfaaSmrgtypedef struct _BMPDESC2 { 280ab47cfaaSmrg unsigned long LoPart; 281ab47cfaaSmrg unsigned long HiPart; 282ab47cfaaSmrg} BMPDESC2; 283ab47cfaaSmrg 284ab47cfaaSmrgtypedef union _BMPDESC { 285ab47cfaaSmrg BMPDESC1 bd1; 286ab47cfaaSmrg BMPDESC2 bd2; 287ab47cfaaSmrg} BMPDESC; 288ab47cfaaSmrg 289ab47cfaaSmrgtypedef struct _StatInfo { 290ab47cfaaSmrg int origMode; 291ab47cfaaSmrg int pageCnt; 292ab47cfaaSmrg pointer statBuf; 293ab47cfaaSmrg int realSeg; 294ab47cfaaSmrg int realOff; 295ab47cfaaSmrg} StatInfoRec,*StatInfoPtr; 296ab47cfaaSmrg 297ab47cfaaSmrgstruct savage_region { 2988697ee19Smrg#ifdef XSERVER_LIBPCIACCESS 2998697ee19Smrg pciaddr_t base; 3008697ee19Smrg pciaddr_t size; 3018697ee19Smrg#else 3028697ee19Smrg unsigned long base; 3038697ee19Smrg unsigned long size; 3048697ee19Smrg#endif 3058697ee19Smrg void * memory; 306ab47cfaaSmrg}; 307ab47cfaaSmrg 308ab47cfaaSmrgtypedef struct _Savage { 309ab47cfaaSmrg SavageRegRec SavedReg; 310ab47cfaaSmrg SavageRegRec ModeReg; 311ab47cfaaSmrg xf86CursorInfoPtr CursorInfoRec; 312ab47cfaaSmrg Bool ModeStructInit; 313ab47cfaaSmrg Bool NeedSTREAMS; 314ab47cfaaSmrg Bool STREAMSRunning; 315ab47cfaaSmrg int Bpp, Bpl, ScissB; 316ab47cfaaSmrg unsigned PlaneMask; 317ab47cfaaSmrg I2CBusPtr I2C; 318ab47cfaaSmrg I2CBusPtr DVI; 319ab47cfaaSmrg unsigned char DDCPort; 320ab47cfaaSmrg unsigned char I2CPort; 321ab47cfaaSmrg 322ab47cfaaSmrg int videoRambytes; 323ab47cfaaSmrg int videoRamKbytes; 324ab47cfaaSmrg int MemOffScreen; 325ab47cfaaSmrg int CursorKByte; 326ab47cfaaSmrg int endfb; 327ab47cfaaSmrg 328ab47cfaaSmrg /* These are physical addresses. */ 329ab47cfaaSmrg unsigned long ShadowPhysical; 330ab47cfaaSmrg 331ab47cfaaSmrg /* These are linear addresses. */ 332ab47cfaaSmrg struct savage_region MmioRegion; 333ab47cfaaSmrg struct savage_region FbRegion; 334ab47cfaaSmrg struct savage_region ApertureRegion; 335ab47cfaaSmrg 336ab47cfaaSmrg unsigned char* MapBase; 337ab47cfaaSmrg unsigned char* BciMem; 338ab47cfaaSmrg unsigned char* FBBase; 339ab47cfaaSmrg unsigned char* ApertureMap; 340ab47cfaaSmrg unsigned char* FBStart; 341ab47cfaaSmrg CARD32 volatile * ShadowVirtual; 342ab47cfaaSmrg 343ab47cfaaSmrg Bool PrimaryVidMapped; 344ab47cfaaSmrg int maxClock; 345ab47cfaaSmrg int HorizScaleFactor; 346ab47cfaaSmrg int MCLK, REFCLK, LCDclk; 347ab47cfaaSmrg double refclk_fact; 348ab47cfaaSmrg int GEResetCnt; 349ab47cfaaSmrg 350ab47cfaaSmrg /* Here are all the Options */ 351ab47cfaaSmrg 352ab47cfaaSmrg OptionInfoPtr Options; 3538697ee19Smrg Bool IgnoreEDID; 354ab47cfaaSmrg Bool ShowCache; 355ab47cfaaSmrg Bool pci_burst; 356ab47cfaaSmrg Bool NoPCIRetry; 357ab47cfaaSmrg Bool fifo_conservative; 358ab47cfaaSmrg Bool fifo_moderate; 359ab47cfaaSmrg Bool fifo_aggressive; 360ab47cfaaSmrg Bool hwcursor; 361ab47cfaaSmrg Bool hwc_on; 362ab47cfaaSmrg Bool NoAccel; 363ab47cfaaSmrg Bool shadowFB; 364ab47cfaaSmrg Bool UseBIOS; 365ab47cfaaSmrg int rotate; 366ab47cfaaSmrg double LCDClock; 367ab47cfaaSmrg Bool ConfigShadowStatus; /* from the config */ 368ab47cfaaSmrg Bool ShadowStatus; /* automatically enabled with DRI */ 369ab47cfaaSmrg Bool ForceShadowStatus; /* true if explicitly set in conf */ 370ab47cfaaSmrg Bool CrtOnly; 371ab47cfaaSmrg Bool TvOn; 372ab47cfaaSmrg Bool PAL; 373ab47cfaaSmrg Bool ForceInit; 374ab47cfaaSmrg int iDevInfo; 375ab47cfaaSmrg int iDevInfoPrim; 376ab47cfaaSmrg 377ab47cfaaSmrg Bool FPExpansion; 378ab47cfaaSmrg int PanelX; /* panel width */ 379ab47cfaaSmrg int PanelY; /* panel height */ 380ab47cfaaSmrg int iResX; /* crtc X display */ 381ab47cfaaSmrg int iResY; /* crtc Y display */ 382ab47cfaaSmrg int XFactor; /* overlay X factor */ 383ab47cfaaSmrg int YFactor; /* overlay Y factor */ 384ab47cfaaSmrg int displayXoffset; /* overlay X offset */ 385ab47cfaaSmrg int displayYoffset; /* overlay Y offset */ 386ab47cfaaSmrg int XExp1; /* expansion ratio in x */ 387ab47cfaaSmrg int XExp2; 388ab47cfaaSmrg int YExp1; /* expansion ratio in x */ 389ab47cfaaSmrg int YExp2; 390ab47cfaaSmrg int cxScreen; 391ab47cfaaSmrg int TVSizeX; 392ab47cfaaSmrg int TVSizeY; 393ab47cfaaSmrg 394ab47cfaaSmrg CloseScreenProcPtr CloseScreen; 3958697ee19Smrg#ifdef XSERVER_LIBPCIACCESS 3968697ee19Smrg struct pci_device * PciInfo; 3978697ee19Smrg#else 398ab47cfaaSmrg pciVideoPtr PciInfo; 399ab47cfaaSmrg PCITAG PciTag; 4008697ee19Smrg#endif 401ab47cfaaSmrg int Chipset; 402ab47cfaaSmrg int ChipId; 403ab47cfaaSmrg int ChipRev; 404ab47cfaaSmrg vbeInfoPtr pVbe; 405ab47cfaaSmrg int EntityIndex; 406ab47cfaaSmrg int ShadowCounter; 407ab47cfaaSmrg int vgaIOBase; /* 3b0 or 3d0 */ 408ab47cfaaSmrg 409ab47cfaaSmrg /* The various Savage wait handlers. */ 410ab47cfaaSmrg int (*WaitQueue)(struct _Savage *, int); 411ab47cfaaSmrg int (*WaitIdle)(struct _Savage *); 412ab47cfaaSmrg int (*WaitIdleEmpty)(struct _Savage *); 413ab47cfaaSmrg 414ab47cfaaSmrg /* Support for shadowFB and rotation */ 415ab47cfaaSmrg unsigned char * ShadowPtr; 416ab47cfaaSmrg int ShadowPitch; 417aa9e3350Smrg void (*PointerMoved)(SCRN_ARG_TYPE arg, int x, int y); 418ab47cfaaSmrg 419ab47cfaaSmrg /* support for EXA */ 420ab47cfaaSmrg ExaDriverPtr EXADriverPtr; 421ab47cfaaSmrg Bool useEXA; 422ab47cfaaSmrg unsigned long EXAendfb; 423ab47cfaaSmrg unsigned long pbd_offset; 424ab47cfaaSmrg unsigned long sbd_offset; 425ab47cfaaSmrg unsigned long pbd_high; 426ab47cfaaSmrg unsigned long sbd_high; 427ab47cfaaSmrg 428ab47cfaaSmrg /* Support for XAA acceleration */ 429aa9e3350Smrg#ifdef HAVE_XAA_H 430ab47cfaaSmrg XAAInfoRecPtr AccelInfoRec; 431aa9e3350Smrg#endif 432ab47cfaaSmrg xRectangle Rect; 433ab47cfaaSmrg unsigned int SavedBciCmd; 434ab47cfaaSmrg unsigned int SavedFgColor; 435ab47cfaaSmrg unsigned int SavedBgColor; 436ab47cfaaSmrg unsigned int SavedSbdOffset; 437ab47cfaaSmrg unsigned int SavedSbd; 438ab47cfaaSmrg 439ab47cfaaSmrg SavageModeTablePtr ModeTable; 440ab47cfaaSmrg 441ab47cfaaSmrg /* Support for the Savage command overflow buffer. */ 442ab47cfaaSmrg unsigned long cobIndex; /* size index */ 443ab47cfaaSmrg unsigned long cobSize; /* size in bytes */ 444ab47cfaaSmrg unsigned long cobOffset; /* offset in frame buffer */ 445ab47cfaaSmrg unsigned long bciThresholdLo; /* low and high thresholds for */ 446ab47cfaaSmrg unsigned long bciThresholdHi; /* shadow status update (32bit words) */ 447ab47cfaaSmrg unsigned long bciUsedMask; /* BCI entries used mask */ 448ab47cfaaSmrg unsigned int eventStatusReg; /* Status register index that holds 449ab47cfaaSmrg * event counter 0. */ 450ab47cfaaSmrg 451ab47cfaaSmrg /* Support for DGA */ 452ab47cfaaSmrg int numDGAModes; 453ab47cfaaSmrg DGAModePtr DGAModes; 454ab47cfaaSmrg Bool DGAactive; 455ab47cfaaSmrg int DGAViewportStatus; 456ab47cfaaSmrg 457ab47cfaaSmrg /* Support for XVideo */ 458ab47cfaaSmrg 459ab47cfaaSmrg unsigned int videoFlags; 460ab47cfaaSmrg unsigned int blendBase; 461ab47cfaaSmrg int videoFourCC; 462ab47cfaaSmrg XF86VideoAdaptorPtr adaptor; 463ab47cfaaSmrg int VideoZoomMax; 464ab47cfaaSmrg int dwBCIWait2DIdle; 465ab47cfaaSmrg XF86OffscreenImagePtr offscreenImages; 466ab47cfaaSmrg 467ab47cfaaSmrg /* Support for Overlays */ 468ab47cfaaSmrg unsigned char * FBStart2nd; 469ab47cfaaSmrg savageOverlayRec overlay; 470ab47cfaaSmrg int overlayDepth; 471ab47cfaaSmrg int primStreamBpp; 472ab47cfaaSmrg 473aa9e3350Smrg#ifdef SAVAGEDRI 474ab47cfaaSmrg int LockHeld; 475ab47cfaaSmrg Bool directRenderingEnabled; 476ab47cfaaSmrg DRIInfoPtr pDRIInfo; 477ab47cfaaSmrg int drmFD; 478ab47cfaaSmrg SAVAGEDRIServerPrivatePtr DRIServerInfo; 479ab47cfaaSmrg ScreenWakeupHandlerProcPtr coreWakeupHandler; 480ab47cfaaSmrg ScreenBlockHandlerProcPtr coreBlockHandler; 481ab47cfaaSmrg 482ab47cfaaSmrg#if 0 483ab47cfaaSmrg Bool haveQuiescense; 484ab47cfaaSmrg void (*GetQuiescence)(ScrnInfoPtr pScrn); 485ab47cfaaSmrg#endif 486ab47cfaaSmrg 487ab47cfaaSmrg Bool IsPCI; 488ab47cfaaSmrg Bool AgpDMA; 489ab47cfaaSmrg Bool VertexDMA; 490ab47cfaaSmrg Bool CommandDMA; 491ab47cfaaSmrg int agpMode; 492ab47cfaaSmrg drmSize agpSize; 493ab47cfaaSmrg FBLinearPtr reserved; 494ab47cfaaSmrg 495ab47cfaaSmrg unsigned int surfaceAllocation[7]; 496ab47cfaaSmrg unsigned int xvmcContext; 497ab47cfaaSmrg unsigned int DRIrunning; 498ab47cfaaSmrg unsigned int hwmcOffset; 499ab47cfaaSmrg unsigned int hwmcSize; 500ab47cfaaSmrg 501ab47cfaaSmrg Bool bDisableXvMC; 502ab47cfaaSmrg 5031473d951Smrg Bool AGPforXv; 504ab47cfaaSmrg#endif 505ab47cfaaSmrg 506ab47cfaaSmrg Bool disableCOB; 507ab47cfaaSmrg Bool BCIforXv; 508ab47cfaaSmrg 509ab47cfaaSmrg /* Bitmap Descriptors for BCI */ 510ab47cfaaSmrg BMPDESC GlobalBD; 511ab47cfaaSmrg BMPDESC PrimaryBD; 512ab47cfaaSmrg BMPDESC SecondBD; 513ab47cfaaSmrg /* do we disable tile mode by option? */ 514ab47cfaaSmrg Bool bDisableTile; 515ab47cfaaSmrg /* if we enable tile,we only support tile under 16/32bpp */ 516ab47cfaaSmrg Bool bTiled; 517ab47cfaaSmrg int lDelta; 518ab47cfaaSmrg int ulAperturePitch; /* aperture pitch */ 519ab47cfaaSmrg 520ab47cfaaSmrg /* 521ab47cfaaSmrg * cxMemory is number of pixels across screen width 522ab47cfaaSmrg * cyMemory is number of scanlines in available adapter memory. 523ab47cfaaSmrg * 524ab47cfaaSmrg * cxMemory * cyMemory is used to determine how much memory to 525ab47cfaaSmrg * allocate to our heap manager. So make sure that any space at the 526ab47cfaaSmrg * end of video memory set aside at bInitializeHardware time is kept 527ab47cfaaSmrg * out of the cyMemory calculation. 528ab47cfaaSmrg */ 529ab47cfaaSmrg int cxMemory,cyMemory; 530ab47cfaaSmrg 531ab47cfaaSmrg StatInfoRec StatInfo; /* save the SVGA state */ 532ab47cfaaSmrg 533ab47cfaaSmrg /* for dvi option */ 534ab47cfaaSmrg Bool dvi; 535ab47cfaaSmrg 536ab47cfaaSmrg SavageMonitorType DisplayType; 537ab47cfaaSmrg /* DuoView stuff */ 538ab47cfaaSmrg Bool HasCRTC2; /* MX, IX, Supersavage */ 539ab47cfaaSmrg Bool IsSecondary; /* second Screen */ 540ab47cfaaSmrg Bool IsPrimary; /* first Screen */ 541ab47cfaaSmrg EntityInfoPtr pEnt; 542ab47cfaaSmrg 543ab47cfaaSmrg} SavageRec, *SavagePtr; 544ab47cfaaSmrg 545ab47cfaaSmrg/* Video flags. */ 546ab47cfaaSmrg 547ab47cfaaSmrg#define VF_STREAMS_ON 0x0001 548ab47cfaaSmrg 549ab47cfaaSmrg#define SAVPTR(p) ((SavagePtr)((p)->driverPrivate)) 550ab47cfaaSmrg 551ab47cfaaSmrg/* Make the names of these externals driver-unique */ 552ab47cfaaSmrg#define gpScrn savagegpScrn 553ab47cfaaSmrg#define readdw savagereaddw 554ab47cfaaSmrg#define readfb savagereadfb 555ab47cfaaSmrg#define writedw savagewritedw 556ab47cfaaSmrg#define writefb savagewritefb 557ab47cfaaSmrg#define writescan savagewritescan 558ab47cfaaSmrg 559ab47cfaaSmrg/* add for support DRI */ 560aa9e3350Smrg#ifdef SAVAGEDRI 561ab47cfaaSmrg 562ab47cfaaSmrg#define SAVAGE_FRONT 0x1 563ab47cfaaSmrg#define SAVAGE_BACK 0x2 564ab47cfaaSmrg#define SAVAGE_DEPTH 0x4 565ab47cfaaSmrg#define SAVAGE_STENCIL 0x8 566ab47cfaaSmrg 567ab47cfaaSmrgBool SAVAGEDRIScreenInit( ScreenPtr pScreen ); 568ab47cfaaSmrgBool SAVAGEInitMC(ScreenPtr pScreen); 569ab47cfaaSmrgvoid SAVAGEDRICloseScreen( ScreenPtr pScreen ); 570ab47cfaaSmrgBool SAVAGEDRIFinishScreenInit( ScreenPtr pScreen ); 571aa9e3350Smrgvoid SAVAGEDRIResume( ScreenPtr pScreen ); 572ab47cfaaSmrg 573ab47cfaaSmrg#define SAVAGE_AGP_1X_MODE 0x01 574ab47cfaaSmrg#define SAVAGE_AGP_2X_MODE 0x02 575ab47cfaaSmrg#define SAVAGE_AGP_4X_MODE 0x04 576ab47cfaaSmrg#define SAVAGE_AGP_MODE_MASK 0x07 577ab47cfaaSmrg 578ab47cfaaSmrg#endif 579ab47cfaaSmrg 580ab47cfaaSmrg 581ab47cfaaSmrg/* Prototypes. */ 582ab47cfaaSmrg 583ab47cfaaSmrgextern void SavageCommonCalcClock(long freq, int min_m, int min_n1, 584ab47cfaaSmrg int max_n1, int min_n2, int max_n2, 585ab47cfaaSmrg long freq_min, long freq_max, 586ab47cfaaSmrg unsigned char *mdiv, unsigned char *ndiv); 587aa9e3350Smrgvoid SavageAdjustFrame(ADJUST_FRAME_ARGS_DECL); 588ab47cfaaSmrgvoid SavageDoAdjustFrame(ScrnInfoPtr pScrn, int y, int x, int crtc2); 589aa9e3350SmrgBool SavageSwitchMode(SWITCH_MODE_ARGS_DECL); 590ab47cfaaSmrg 591ab47cfaaSmrg/* In savage_cursor.c. */ 592ab47cfaaSmrg 593ab47cfaaSmrgBool SavageHWCursorInit(ScreenPtr pScreen); 594ab47cfaaSmrgvoid SavageShowCursor(ScrnInfoPtr); 595ab47cfaaSmrgvoid SavageHideCursor(ScrnInfoPtr); 596ab47cfaaSmrg 597ab47cfaaSmrg/* In savage_accel.c. */ 598ab47cfaaSmrg 599ab47cfaaSmrgBool SavageInitAccel(ScreenPtr); 600ab47cfaaSmrgvoid SavageInitialize2DEngine(ScrnInfoPtr); 60172320d7bSmrgint SavageGetCopyROP(int rop); 602ab47cfaaSmrgvoid SavageSetGBD(ScrnInfoPtr); 603ab47cfaaSmrgvoid SavageAccelSync(ScrnInfoPtr); 604ab47cfaaSmrg/*int SavageHelpSolidROP(ScrnInfoPtr pScrn, int *fg, int pm, int *rop);*/ 605ab47cfaaSmrg 606ab47cfaaSmrg/* XAA and EXA */ 607ab47cfaaSmrgBool SavageXAAInit(ScreenPtr); 608ab47cfaaSmrgBool SavageEXAInit(ScreenPtr); 609ab47cfaaSmrg 610ab47cfaaSmrg/* In savage_i2c.c. */ 611ab47cfaaSmrg 612ab47cfaaSmrgBool SavageI2CInit(ScrnInfoPtr pScrn); 613ab47cfaaSmrg 614ab47cfaaSmrg/* In savage_shadow.c */ 615ab47cfaaSmrg 616aa9e3350Smrgvoid SavagePointerMoved(SCRN_ARG_TYPE arg, int x, int y); 617ab47cfaaSmrgvoid SavageRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 618ab47cfaaSmrgvoid SavageRefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 619ab47cfaaSmrgvoid SavageRefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 620ab47cfaaSmrgvoid SavageRefreshArea24(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 621ab47cfaaSmrgvoid SavageRefreshArea32(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 622ab47cfaaSmrg 623ab47cfaaSmrg/* In savage_vbe.c */ 624ab47cfaaSmrg 625ab47cfaaSmrgvoid SavageSetTextMode( SavagePtr psav ); 626ab47cfaaSmrgvoid SavageSetVESAMode( SavagePtr psav, int n, int Refresh ); 627ab47cfaaSmrgvoid SavageSetPanelEnabled( SavagePtr psav, Bool active ); 628ab47cfaaSmrgvoid SavageFreeBIOSModeTable( SavagePtr psav, SavageModeTablePtr* ppTable ); 629ab47cfaaSmrgSavageModeTablePtr SavageGetBIOSModeTable( SavagePtr psav, int iDepth ); 630ab47cfaaSmrgModeStatus SavageMatchBiosMode(ScrnInfoPtr pScrn,int width,int height,int refresh, 631ab47cfaaSmrg unsigned int *vesaMode,unsigned int *newRefresh); 632ab47cfaaSmrg 633ab47cfaaSmrgunsigned short SavageGetBIOSModes( 634ab47cfaaSmrg SavagePtr psav, 635aa9e3350Smrg VbeInfoBlock *vbe, 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