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