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