xgi.h revision dfe64dd3
1dfe64dd3Smacallan/*
2dfe64dd3Smacallan * Main global data and definitions
3dfe64dd3Smacallan *
4dfe64dd3Smacallan * Copyright (C) 2001-2004 by Thomas Winischhofer, Vienna, Austria
5dfe64dd3Smacallan *
6dfe64dd3Smacallan * Redistribution and use in source and binary forms, with or without
7dfe64dd3Smacallan * modification, are permitted provided that the following conditions
8dfe64dd3Smacallan * are met:
9dfe64dd3Smacallan * 1) Redistributions of source code must retain the above copyright
10dfe64dd3Smacallan *    notice, this list of conditions and the following disclaimer.
11dfe64dd3Smacallan * 2) Redistributions in binary form must reproduce the above copyright
12dfe64dd3Smacallan *    notice, this list of conditions and the following disclaimer in the
13dfe64dd3Smacallan *    documentation and/or other materials provided with the distribution.
14dfe64dd3Smacallan * 3) The name of the author may not be used to endorse or promote products
15dfe64dd3Smacallan *    derived from this software without specific prior written permission.
16dfe64dd3Smacallan *
17dfe64dd3Smacallan * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESSED OR
18dfe64dd3Smacallan * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19dfe64dd3Smacallan * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20dfe64dd3Smacallan * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21dfe64dd3Smacallan * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22dfe64dd3Smacallan * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23dfe64dd3Smacallan * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24dfe64dd3Smacallan * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25dfe64dd3Smacallan * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26dfe64dd3Smacallan * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27dfe64dd3Smacallan *
28dfe64dd3Smacallan * Authors:   Thomas Winischhofer <thomas@winischhofer.net>
29dfe64dd3Smacallan *            others (old code base)
30dfe64dd3Smacallan *
31dfe64dd3Smacallan */
32dfe64dd3Smacallan#ifndef _XGI_H_
33dfe64dd3Smacallan#define _XGI_H_
34dfe64dd3Smacallan
35dfe64dd3Smacallan#define DEBUG
36dfe64dd3Smacallan#define DEBUG1
37dfe64dd3Smacallan#define DEBUG2
38dfe64dd3Smacallan#define DEBUG3
39dfe64dd3Smacallan#define DEBUG4
40dfe64dd3Smacallan#define DEBUG5
41dfe64dd3Smacallan
42dfe64dd3Smacallan/***************
43dfe64dd3Smacallan#define DEBUG
44dfe64dd3Smacallan#define DEBUG1
45dfe64dd3Smacallan#define DEBUG2
46dfe64dd3Smacallan#define DEBUG3
47dfe64dd3Smacallan#define DEBUG4
48dfe64dd3Smacallan#define DEBUG5
49dfe64dd3Smacallan#define DEBUGI2C
50dfe64dd3Smacallan*****************/
51dfe64dd3Smacallan
52dfe64dd3Smacallan#ifndef XGI_VIDEO_HW /* avoid compile error in xgi_videohw.c; weird!  */
53dfe64dd3Smacallan/* Jong 07/27/2009; use run-time debug instead except for HW acceleration routines */
54dfe64dd3Smacallanextern BOOL g_bRunTimeDebug;
55dfe64dd3Smacallan#define RUNTIMEDEBUG(p)		if(g_bRunTimeDebug)p;
56dfe64dd3Smacallan
57dfe64dd3Smacallan/* Jong@08052009 */
58dfe64dd3Smacallan#ifdef  DEBUGI2C
59dfe64dd3Smacallan#define PDEBUGI2C(p)       p
60dfe64dd3Smacallan#else
61dfe64dd3Smacallan#define PDEBUGI2C(p)
62dfe64dd3Smacallan#endif
63dfe64dd3Smacallan
64dfe64dd3Smacallan#ifdef  DEBUG
65dfe64dd3Smacallan#define PDEBUG(p)       RUNTIMEDEBUG(p)
66dfe64dd3Smacallan#else
67dfe64dd3Smacallan#define PDEBUG(p)
68dfe64dd3Smacallan#endif
69dfe64dd3Smacallan
70dfe64dd3Smacallan#ifdef DEBUG1
71dfe64dd3Smacallan#define PDEBUG1(p)		RUNTIMEDEBUG(p)
72dfe64dd3Smacallan#else
73dfe64dd3Smacallan#define PDEBUG1(p)
74dfe64dd3Smacallan#endif
75dfe64dd3Smacallan
76dfe64dd3Smacallan#ifdef DEBUG2
77dfe64dd3Smacallan#define PDEBUG2(p)		RUNTIMEDEBUG(p)
78dfe64dd3Smacallan#else
79dfe64dd3Smacallan#define PDEBUG2(p)
80dfe64dd3Smacallan#endif
81dfe64dd3Smacallan
82dfe64dd3Smacallan#ifdef DEBUG3
83dfe64dd3Smacallan#define PDEBUG3(p)		RUNTIMEDEBUG(p)
84dfe64dd3Smacallan#else
85dfe64dd3Smacallan#define PDEBUG3(p)
86dfe64dd3Smacallan#endif
87dfe64dd3Smacallan
88dfe64dd3Smacallan#ifdef DEBUG4
89dfe64dd3Smacallan#define PDEBUG4(p)		RUNTIMEDEBUG(p)
90dfe64dd3Smacallan#else
91dfe64dd3Smacallan#define PDEBUG4(p)
92dfe64dd3Smacallan#endif
93dfe64dd3Smacallan
94dfe64dd3Smacallan#ifdef  DEBUG5
95dfe64dd3Smacallan#define PDEBUG5(p)		RUNTIMEDEBUG(p)
96dfe64dd3Smacallan#else
97dfe64dd3Smacallan#define PDEBUG5(p)
98dfe64dd3Smacallan#endif
99dfe64dd3Smacallan
100dfe64dd3Smacallan#ifdef  CDEBUG
101dfe64dd3Smacallan#define CPDEBUG(p)       p
102dfe64dd3Smacallan#else
103dfe64dd3Smacallan#define CPDEBUG(p)
104dfe64dd3Smacallan#endif
105dfe64dd3Smacallan
106dfe64dd3Smacallan#ifdef CDEBUG1
107dfe64dd3Smacallan#define CPDEBUG1(p) p
108dfe64dd3Smacallan#else
109dfe64dd3Smacallan#define CPDEBUG1(p)
110dfe64dd3Smacallan#endif
111dfe64dd3Smacallan
112dfe64dd3Smacallan#ifdef CDEBUG2
113dfe64dd3Smacallan#define CPDEBUG2(p) p
114dfe64dd3Smacallan#else
115dfe64dd3Smacallan#define CPDEBUG2(p)
116dfe64dd3Smacallan#endif
117dfe64dd3Smacallan
118dfe64dd3Smacallan#ifdef CDEBUG3
119dfe64dd3Smacallan#define CPDEBUG3(p) p
120dfe64dd3Smacallan#else
121dfe64dd3Smacallan#define CPDEBUG3(p)
122dfe64dd3Smacallan#endif
123dfe64dd3Smacallan
124dfe64dd3Smacallan#ifdef CDEBUG4
125dfe64dd3Smacallan#define CPDEBUG4(p) p
126dfe64dd3Smacallan#else
127dfe64dd3Smacallan#define CPDEBUG4(p)
128dfe64dd3Smacallan#endif
129dfe64dd3Smacallan
130dfe64dd3Smacallan#ifdef  CDEBUG5
131dfe64dd3Smacallan#define CPDEBUG5(p)       p
132dfe64dd3Smacallan#else
133dfe64dd3Smacallan#define CPDEBUG5(p)
134dfe64dd3Smacallan#endif
135dfe64dd3Smacallan
136dfe64dd3Smacallan#ifdef  ACCELDEBUG
137dfe64dd3Smacallan#define PACCELDEBUG(p)       p
138dfe64dd3Smacallan#else
139dfe64dd3Smacallan#define PACCELDEBUG(p)
140dfe64dd3Smacallan#endif
141dfe64dd3Smacallan#endif
142dfe64dd3Smacallan
143dfe64dd3Smacallan/* Always unlock the registers (should be set!) */
144dfe64dd3Smacallan#define UNLOCK_ALWAYS
145dfe64dd3Smacallan
146dfe64dd3Smacallan#undef XGI_CP
147dfe64dd3Smacallan
148dfe64dd3Smacallan#ifdef XSERVER_LIBPCIACCESS
149dfe64dd3Smacallan#include <pciaccess.h>
150dfe64dd3Smacallan#else
151dfe64dd3Smacallan#include "xf86Pci.h"
152dfe64dd3Smacallan#endif
153dfe64dd3Smacallan#include "xf86Cursor.h"
154dfe64dd3Smacallan#include "xf86xv.h"
155dfe64dd3Smacallan#include "compiler.h"
156dfe64dd3Smacallan
157dfe64dd3Smacallan#ifdef XORG_VERSION_CURRENT
158dfe64dd3Smacallan#include "xorgVersion.h"
159dfe64dd3Smacallan
160dfe64dd3Smacallan/* #if XORG_VERSION_CURRENT > XORG_VERSION_NUMERIC(7,0,0,0,0) */
161dfe64dd3Smacallan#if ((XORG_VERSION_CURRENT > XORG_VERSION_NUMERIC(7,0,0,0,0)) || (XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(2,0,0,0,0)) )
162dfe64dd3Smacallan#define XGIISXORGPOST70
163dfe64dd3Smacallan#endif
164dfe64dd3Smacallan
165dfe64dd3Smacallan#if (XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(6,9,0,0,0) )
166dfe64dd3Smacallan#define XGI_USE_EXA
167dfe64dd3Smacallan#endif
168dfe64dd3Smacallan
169dfe64dd3Smacallan#endif
170dfe64dd3Smacallan
171dfe64dd3Smacallan/* Jong 01/13/2009; support EXA */
172dfe64dd3Smacallan#define XGI_USE_XAA
173dfe64dd3Smacallan/* #define XGI_USE_EXA */
174dfe64dd3Smacallan
175dfe64dd3Smacallan#ifdef XGI_USE_XAA
176dfe64dd3Smacallan#include "xaa.h"
177dfe64dd3Smacallan#endif
178dfe64dd3Smacallan#ifdef XGI_USE_EXA
179dfe64dd3Smacallan#include "exa.h"
180dfe64dd3Smacallan#endif
181dfe64dd3Smacallan
182dfe64dd3Smacallan#include "vgaHW.h"
183dfe64dd3Smacallan#include "vbe.h"
184dfe64dd3Smacallan
185dfe64dd3Smacallan/*
186dfe64dd3Smacallan#ifdef XORG_VERSION_CURRENT
187dfe64dd3Smacallan#include "xorgVersion.h"
188dfe64dd3Smacallan#endif */
189dfe64dd3Smacallan
190dfe64dd3Smacallan/* #define XGIISXORGPOST70 */
191dfe64dd3Smacallan
192dfe64dd3Smacallan#include "xgi_pci.h"
193dfe64dd3Smacallan#include "osdef.h"
194dfe64dd3Smacallan#include "vgatypes.h"
195dfe64dd3Smacallan#include "vb_struct.h"
196dfe64dd3Smacallan
197dfe64dd3Smacallan#ifdef XF86DRI
198dfe64dd3Smacallan#define XGINEWDRI
199dfe64dd3Smacallan#undef XGINEWDRI2
200dfe64dd3Smacallan
201dfe64dd3Smacallan#ifdef XF86_VERSION_CURRENT
202dfe64dd3Smacallan#if XF86_VERSION_CURRENT >= XF86_VERSION_NUMERIC(4,4,99,99,0)	/* Adapt this when the time has come */
203dfe64dd3Smacallan#define XGINEWDRI2
204dfe64dd3Smacallan#endif
205dfe64dd3Smacallan#endif /* XF86_VERSION_CURRENT */
206dfe64dd3Smacallan
207dfe64dd3Smacallan#include "xf86drm.h"
208dfe64dd3Smacallan#include "sarea.h"
209dfe64dd3Smacallan#define _XF86DRI_SERVER_
210dfe64dd3Smacallan
211dfe64dd3Smacallan/* Jong@09032009 */
212dfe64dd3Smacallan#ifdef XORG_VERSION_CURRENT
213dfe64dd3Smacallan#if ( (XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(6,9,0,0,0)) || (XORG_VERSION_CURRENT <= XORG_VERSION_NUMERIC(2,0,0,0,0)) )
214dfe64dd3Smacallan#include "X11/dri/xf86dri.h"
215dfe64dd3Smacallan#else
216dfe64dd3Smacallan#include "xf86dri.h"
217dfe64dd3Smacallan#endif
218dfe64dd3Smacallan#endif
219dfe64dd3Smacallan
220dfe64dd3Smacallan#include "dri.h"
221dfe64dd3Smacallan#include "GL/glxint.h"
222dfe64dd3Smacallan#include "xgi_dri.h"
223dfe64dd3Smacallan#endif
224dfe64dd3Smacallan
225dfe64dd3Smacallan#ifdef XSERVER_LIBPCIACCESS
226dfe64dd3Smacallan#define VENDOR_ID(p)      (p)->vendor_id
227dfe64dd3Smacallan#define DEVICE_ID(p)      (p)->device_id
228dfe64dd3Smacallan#define SUBSYS_ID(p)      (p)->subdevice_id
229dfe64dd3Smacallan#define CHIP_REVISION(p)  (p)->revision
230dfe64dd3Smacallan#else
231dfe64dd3Smacallan#define VENDOR_ID(p)      (p)->vendor
232dfe64dd3Smacallan#define DEVICE_ID(p)      (p)->chipType
233dfe64dd3Smacallan#define SUBSYS_ID(p)      (p)->subsysCard
234dfe64dd3Smacallan#define CHIP_REVISION(p)  (p)->chipRev
235dfe64dd3Smacallan#endif
236dfe64dd3Smacallan
237dfe64dd3Smacallan#if 1
238dfe64dd3Smacallan#define XGIDUALHEAD  		/* Include Dual Head code  */
239dfe64dd3Smacallan#endif
240dfe64dd3Smacallan
241dfe64dd3Smacallan#if 1
242dfe64dd3Smacallan#define XGIMERGED		/* Include Merged-FB mode */
243dfe64dd3Smacallan#endif
244dfe64dd3Smacallan
245dfe64dd3Smacallan#ifdef XGIMERGED
246dfe64dd3Smacallan#if 1
247dfe64dd3Smacallan#define XGIXINERAMA		/* Include Pseudo-Xinerama for MergedFB mode */
248dfe64dd3Smacallan#define XGI_XINERAMA_MAJOR_VERSION  1
249dfe64dd3Smacallan#define XGI_XINERAMA_MINOR_VERSION  1
250dfe64dd3Smacallan#endif
251dfe64dd3Smacallan#endif
252dfe64dd3Smacallan
253dfe64dd3Smacallan#if 1
254dfe64dd3Smacallan#define XGIGAMMA		/* Include code for gamma correction */
255dfe64dd3Smacallan#endif
256dfe64dd3Smacallan
257dfe64dd3Smacallan/* Jong 09/28/2007; disable this because it causes cursor drawing incorrectly */
258dfe64dd3Smacallan#if 0				/* Include code for color hardware cursors */
259dfe64dd3Smacallan#define XGI_ARGB_CURSOR
260dfe64dd3Smacallan#endif
261dfe64dd3Smacallan
262dfe64dd3Smacallan#if 0				/* Include YPbPr support on VB  */
263dfe64dd3Smacallan#define ENABLE_YPBPR
264dfe64dd3Smacallan#endif
265dfe64dd3Smacallan
266dfe64dd3Smacallan#ifdef XGIMERGED
267dfe64dd3Smacallan#ifdef XGIXINERAMA
268dfe64dd3Smacallan#define EXTENSION_PROC_ARGS void *
269dfe64dd3Smacallan#include "extnsionst.h"  	/* required */
270dfe64dd3Smacallan#include <X11/extensions/panoramiXproto.h>  	/* required */
271dfe64dd3Smacallan#endif
272dfe64dd3Smacallan#endif
273dfe64dd3Smacallan
274dfe64dd3Smacallan#if 1
275dfe64dd3Smacallan#define XGIVRAMQ		/* Use VRAM queue mode on 315 series */
276dfe64dd3Smacallan#endif
277dfe64dd3Smacallan
278dfe64dd3Smacallan#undef XGI315DRI		/* define this if dri is adapted for 315/330 series */
279dfe64dd3Smacallan
280dfe64dd3Smacallan#ifndef PCI_VENDOR_XGI
281dfe64dd3Smacallan#define PCI_VENDOR_XGI 		    0x18CA
282dfe64dd3Smacallan#endif
283dfe64dd3Smacallan#ifndef PCI_CHIP_XGIXG40
284dfe64dd3Smacallan#define PCI_CHIP_XGIXG40 		0x0040
285dfe64dd3Smacallan#endif
286dfe64dd3Smacallan#ifndef PCI_CHIP_XGIXG20
287dfe64dd3Smacallan#define PCI_CHIP_XGIXG20 		0x0020
288dfe64dd3Smacallan#endif
289dfe64dd3Smacallan
290dfe64dd3Smacallan/* Jong 09/18/2007; patch to GIT */
291dfe64dd3Smacallan#ifndef PCI_CHIP_XGIXG27
292dfe64dd3Smacallan#define PCI_CHIP_XGIXG27 		0x0027
293dfe64dd3Smacallan#endif
294dfe64dd3Smacallan
295dfe64dd3Smacallan/* Jong 01/07/2008; support New XG21 */
296dfe64dd3Smacallan#ifndef PCI_CHIP_XGIXG21
297dfe64dd3Smacallan#define PCI_CHIP_XGIXG21 		0x0021
298dfe64dd3Smacallan#endif
299dfe64dd3Smacallan
300dfe64dd3Smacallan#define CONFIG_DRM_XGI
301dfe64dd3Smacallan
302dfe64dd3Smacallan#define XGI_NAME                "XGI"
303dfe64dd3Smacallan#define XGI_DRIVER_NAME         "xgi"
304dfe64dd3Smacallan#define XGI_CURRENT_VERSION     ((PACKAGE_VERSION_MAJOR << 16) | \
305dfe64dd3Smacallan                                 (PACKAGE_VERSION_MINOR << 8) | \
306dfe64dd3Smacallan				 PACKAGE_VERSION_PATCHLEVEL)
307dfe64dd3Smacallan
308dfe64dd3Smacallan/* pXGI->Flags (old series only) */
309dfe64dd3Smacallan#define SYNCDRAM                0x00000001
310dfe64dd3Smacallan#define RAMFLAG                 0x00000002
311dfe64dd3Smacallan#define ESS137xPRESENT          0x00000004
312dfe64dd3Smacallan#define SECRETFLAG              0x00000008
313dfe64dd3Smacallan#define A6326REVAB              0x00000010
314dfe64dd3Smacallan#define MMIOMODE                0x00010000
315dfe64dd3Smacallan#define LFBQMODE                0x00020000
316dfe64dd3Smacallan#define AGPQMODE                0x00040000
317dfe64dd3Smacallan#define UMA                     0x80000000
318dfe64dd3Smacallan
319dfe64dd3Smacallan#define BIOS_BASE               0xC0000
320dfe64dd3Smacallan#define BIOS_SIZE               0x10000
321dfe64dd3Smacallan
322dfe64dd3Smacallan#define SR_BUFFER_SIZE          5
323dfe64dd3Smacallan#define CR_BUFFER_SIZE          5
324dfe64dd3Smacallan
325dfe64dd3Smacallan#define XGI_VBFlagsVersion	1
326dfe64dd3Smacallan
327dfe64dd3Smacallan/* VBFlags - if anything is changed here, increase VBFlagsVersion! */
328dfe64dd3Smacallan#define CRT2_DEFAULT            0x00000001
329dfe64dd3Smacallan#define CRT2_LCD                0x00000002  /* Never change the order of the CRT2_XXX entries */
330dfe64dd3Smacallan#define CRT2_TV                 0x00000004
331dfe64dd3Smacallan#define CRT2_VGA                0x00000008
332dfe64dd3Smacallan#define TV_NTSC                 0x00000010
333dfe64dd3Smacallan#define TV_PAL                  0x00000020
334dfe64dd3Smacallan#define TV_HIVISION             0x00000040
335dfe64dd3Smacallan#define TV_YPBPR                0x00000080
336dfe64dd3Smacallan#define TV_AVIDEO               0x00000100
337dfe64dd3Smacallan#define TV_SVIDEO               0x00000200
338dfe64dd3Smacallan#define TV_SCART                0x00000400
339dfe64dd3Smacallan#define VB_CONEXANT		0x00000800   /* 661 series only */
340dfe64dd3Smacallan#define VB_TRUMPION		VB_CONEXANT  /* 300 series only */
341dfe64dd3Smacallan#define TV_PALM                 0x00001000
342dfe64dd3Smacallan#define TV_PALN                 0x00002000
343dfe64dd3Smacallan#define TV_NTSCJ		0x00001000
344dfe64dd3Smacallan#define VB_302ELV		0x00004000
345dfe64dd3Smacallan#define TV_CHSCART              0x00008000
346dfe64dd3Smacallan#define TV_CHYPBPR525I          0x00010000
347dfe64dd3Smacallan#define CRT1_VGA		0x00000000
348dfe64dd3Smacallan#define CRT1_LCDA		0x00020000
349dfe64dd3Smacallan#define VGA2_CONNECTED          0x00040000
350dfe64dd3Smacallan#define DISPTYPE_CRT1		0x00080000  	/* CRT1 connected and used */
351dfe64dd3Smacallan
352dfe64dd3Smacallan#define SINGLE_MODE             0x20000000   	/* CRT1 or CRT2; determined by DISPTYPE_CRTx */
353dfe64dd3Smacallan#define MIRROR_MODE		0x40000000   	/* CRT1 + CRT2 identical (mirror mode) */
354dfe64dd3Smacallan#define DUALVIEW_MODE		0x80000000   	/* CRT1 + CRT2 independent (dual head mode) */
355dfe64dd3Smacallan
356dfe64dd3Smacallan/* Aliases: */
357dfe64dd3Smacallan#define CRT2_ENABLE		(CRT2_LCD | CRT2_TV | CRT2_VGA)
358dfe64dd3Smacallan#define TV_STANDARD             (TV_NTSC | TV_PAL | TV_PALM | TV_PALN | TV_NTSCJ)
359dfe64dd3Smacallan#define TV_INTERFACE            (TV_AVIDEO|TV_SVIDEO|TV_SCART|TV_HIVISION|TV_YPBPR)
360dfe64dd3Smacallan
361dfe64dd3Smacallan/* Only if TV_YPBPR is set: */
362dfe64dd3Smacallan#define TV_YPBPR525I		TV_NTSC
363dfe64dd3Smacallan#define TV_YPBPR525P		TV_PAL
364dfe64dd3Smacallan#define TV_YPBPR750P		TV_PALM
365dfe64dd3Smacallan#define TV_YPBPR1080I	        TV_PALN
366dfe64dd3Smacallan#define TV_YPBPRALL 		(TV_YPBPR525I | TV_YPBPR525P | TV_YPBPR750P | TV_YPBPR1080I)
367dfe64dd3Smacallan
368dfe64dd3Smacallan#define TV_YPBPR43LB		TV_CHSCART
369dfe64dd3Smacallan#define TV_YPBPR43		TV_CHYPBPR525I
370dfe64dd3Smacallan#define TV_YPBPR169 		(TV_CHSCART | TV_CHYPBPR525I)
371dfe64dd3Smacallan#define TV_YPBPRAR              (TV_CHSCART | TV_CHYPBPR525I)
372dfe64dd3Smacallan
373dfe64dd3Smacallan
374dfe64dd3Smacallan#define DISPTYPE_DISP2		CRT2_ENABLE
375dfe64dd3Smacallan#define DISPTYPE_DISP1		DISPTYPE_CRT1
376dfe64dd3Smacallan#define VB_DISPMODE_SINGLE	SINGLE_MODE  	/* alias */
377dfe64dd3Smacallan#define VB_DISPMODE_MIRROR	MIRROR_MODE  	/* alias */
378dfe64dd3Smacallan#define VB_DISPMODE_DUAL	DUALVIEW_MODE 	/* alias */
379dfe64dd3Smacallan#define DISPLAY_MODE            (SINGLE_MODE | MIRROR_MODE | DUALVIEW_MODE)
380dfe64dd3Smacallan
381dfe64dd3Smacallan/* PresetMode argument */
382dfe64dd3Smacallan#define XGI_MODE_SIMU 		0
383dfe64dd3Smacallan#define XGI_MODE_CRT1 		1
384dfe64dd3Smacallan#define XGI_MODE_CRT2 		2
385dfe64dd3Smacallan
386dfe64dd3Smacallan/* pXGI->MiscFlags */
387dfe64dd3Smacallan#define MISC_CRT1OVERLAY	0x00000001  /* Current display mode supports overlay */
388dfe64dd3Smacallan#define MISC_PANELLINKSCALER    0x00000002  /* Panel link is currently scaling */
389dfe64dd3Smacallan#define MISC_CRT1OVERLAYGAMMA	0x00000004  /* Current display mode supports overlay gamma corr on CRT1 */
390dfe64dd3Smacallan#define MISC_TVNTSC1024		0x00000008  /* Current display mode is TV NTSC/PALM/YPBPR525I 1024x768  */
391dfe64dd3Smacallan
392dfe64dd3Smacallan
393dfe64dd3Smacallan#define HW_DEVICE_EXTENSION	XGI_HW_DEVICE_INFO
394dfe64dd3Smacallan
395dfe64dd3Smacallan#define BITMASK(h,l)             (((unsigned)(1U << ((h)-(l)+1))-1)<<(l))
396dfe64dd3Smacallan#define GENMASK(mask)            BITMASK(1?mask,0?mask)
397dfe64dd3Smacallan
398dfe64dd3Smacallantypedef unsigned long ULong;
399dfe64dd3Smacallantypedef unsigned short UShort;
400dfe64dd3Smacallantypedef unsigned char UChar;
401dfe64dd3Smacallan
402dfe64dd3Smacallan
403dfe64dd3Smacallan/* ChipFlags */
404dfe64dd3Smacallan/* Use only lower 16 bit for chip id! (xgictrl) */
405dfe64dd3Smacallan#define XGICF_LARGEOVERLAY  0x00000001
406dfe64dd3Smacallan#define XGICF_Is651         0x00000002
407dfe64dd3Smacallan#define XGICF_IsM650        0x00000004
408dfe64dd3Smacallan#define XGICF_IsM652        0x00000008
409dfe64dd3Smacallan#define XGICF_IsM653        0x00000010
410dfe64dd3Smacallan#define XGICF_Is652         0x00000020
411dfe64dd3Smacallan#define XGICF_Is65x         (XGICF_Is651|XGICF_IsM650|XGICF_IsM652|XGICF_IsM653|XGICF_Is652)
412dfe64dd3Smacallan#define XGICF_IsM661        0x00000100  /* M661FX */
413dfe64dd3Smacallan#define XGICF_IsM741        0x00000200
414dfe64dd3Smacallan#define XGICF_IsM760        0x00000400
415dfe64dd3Smacallan#define XGICF_IsM661M       0x00000800  /* M661MX */
416dfe64dd3Smacallan#define XGICF_IsM66x        (XGICF_IsM661 | XGICF_IsM741 | XGICF_IsM760 | XGICF_IsM661M)
417dfe64dd3Smacallan#define XGICF_315Core       0x00010000  /* 3D: Real 315 */
418dfe64dd3Smacallan#define XGICF_Real256ECore  0x00020000  /* 3D: Similar to 315 core, no T&L? (65x, 661, 740, 741) */
419dfe64dd3Smacallan#define XGICF_XabreCore     0x00040000  /* 3D: Real Xabre */
420dfe64dd3Smacallan#define XGICF_Ultra256Core  0x00080000  /* 3D: Similar to Xabre, no T&L?, no P:Shader? (660, 760) */
421dfe64dd3Smacallan#define XGICF_UseLCDA       0x01000000
422dfe64dd3Smacallan#define XGICF_760UMA        0x10000000  /* 760: UMA active */
423dfe64dd3Smacallan#define XGICF_CRT2HWCKaputt 0x20000000  /* CRT2 Mono HWCursor engine buggy */
424dfe64dd3Smacallan#define XGICF_Glamour3      0x40000000
425dfe64dd3Smacallan#define XGICF_Integrated    0x80000000
426dfe64dd3Smacallan
427dfe64dd3Smacallan/* Direct Xv-API */
428dfe64dd3Smacallan#define XGI_SD_IS300SERIES     0x00000001
429dfe64dd3Smacallan#define XGI_SD_IS315SERIES     0x00000002
430dfe64dd3Smacallan#define XGI_SD_IS330SERIES     0x00000004
431dfe64dd3Smacallan#define XGI_SD_SUPPORTPALMN    0x00000008   /* tv chip supports pal-m, pal-n */
432dfe64dd3Smacallan#define XGI_SD_SUPPORT2OVL     0x00000010   /* set = 2 overlays, clear = support SWITCHCRT xv prop */
433dfe64dd3Smacallan#define XGI_SD_SUPPORTTVPOS    0x00000020   /* supports changing tv position */
434dfe64dd3Smacallan#define XGI_SD_ISDUALHEAD      0x00000040   /* Driver is in dual head mode */
435dfe64dd3Smacallan#define XGI_SD_ISMERGEDFB      0x00000080   /* Driver is in merged fb mode */
436dfe64dd3Smacallan#define XGI_SD_ISDHSECONDHEAD  0x00000100   /* Dual head: This is CRT1 (=second head) */
437dfe64dd3Smacallan#define XGI_SD_ISDHXINERAMA    0x00000200   /* Dual head: We are running Xinerama */
438dfe64dd3Smacallan#define XGI_SD_VBHASSCART      0x00000400   /* videobridge has SCART instead of VGA2 */
439dfe64dd3Smacallan#define XGI_SD_ISDEPTH8        0x00000800   /* Depth is 8, no independent gamma correction */
440dfe64dd3Smacallan#define XGI_SD_ENABLED         0x00002000   /* xgictrl is enabled (by option) */
441dfe64dd3Smacallan#define XGI_SD_PSEUDOXINERAMA  0x00004000   /* pseudo xinerama is active */
442dfe64dd3Smacallan#define XGI_SD_SUPPORTLCDA     0x00008000   /* Support LCD Channel A */
443dfe64dd3Smacallan#define XGI_SD_SUPPORTNTSCJ    0x00010000   /* tv chip supports ntsc-j */
444dfe64dd3Smacallan#define XGI_SD_ADDLSUPFLAG     0x00020000   /* 1 = the following flags are valid */
445dfe64dd3Smacallan#define XGI_SD_SUPPORTVGA2     0x00040000   /* CRT2=VGA supported */
446dfe64dd3Smacallan#define XGI_SD_SUPPORTSCART    0x00080000   /* CRT2=SCART supported */
447dfe64dd3Smacallan#define XGI_SD_SUPPORTOVERSCAN 0x00100000   /* Overscan flag supported */
448dfe64dd3Smacallan#define XGI_SD_SUPPORTXVGAMMA1 0x00200000   /* Xv Gamma correction for CRT1 supported */
449dfe64dd3Smacallan#define XGI_SD_SUPPORTTV       0x00400000   /* CRT2=TV supported */
450dfe64dd3Smacallan#define XGI_SD_SUPPORTYPBPR    0x00800000   /* CRT2=YPbPr (525i, 525p, 750p, 1080i) is supported */
451dfe64dd3Smacallan#define XGI_SD_SUPPORTHIVISION 0x01000000   /* CRT2=HiVision is supported */
452dfe64dd3Smacallan#define XGI_SD_SUPPORTYPBPRAR  0x02000000   /* YPbPr aspect ratio is supported */
453dfe64dd3Smacallan#define XGI_SD_SUPPORTSCALE    0x04000000   /* Scaling of LCD panel supported */
454dfe64dd3Smacallan#define XGI_SD_SUPPORTCENTER   0x08000000   /* If scaling supported: Centering of screen [NOT] supported (TMDS only) */
455dfe64dd3Smacallan
456dfe64dd3Smacallan#define XGI_DIRECTKEY         0x03145792
457dfe64dd3Smacallan
458dfe64dd3Smacallan/* XGICtrl: Check mode for CRT2 */
459dfe64dd3Smacallan#define XGI_CF2_LCD          0x01
460dfe64dd3Smacallan#define XGI_CF2_TV           0x02
461dfe64dd3Smacallan#define XGI_CF2_VGA2         0x04
462dfe64dd3Smacallan#define XGI_CF2_TVPAL        0x08
463dfe64dd3Smacallan#define XGI_CF2_TVNTSC       0x10  /* + NTSC-J */
464dfe64dd3Smacallan#define XGI_CF2_TVPALM       0x20
465dfe64dd3Smacallan#define XGI_CF2_TVPALN       0x40
466dfe64dd3Smacallan#define XGI_CF2_CRT1LCDA     0x80
467dfe64dd3Smacallan#define XGI_CF2_TYPEMASK     (XGI_CF2_LCD | XGI_CF2_TV | XGI_CF2_VGA2 | XGI_CF2_CRT1LCDA)
468dfe64dd3Smacallan#define XGI_CF2_TVSPECIAL    (XGI_CF2_LCD | XGI_CF2_TV)
469dfe64dd3Smacallan#define XGI_CF2_TVSPECMASK   (XGI_CF2_TVPAL | XGI_CF2_TVNTSC | XGI_CF2_TVPALM | XGI_CF2_TVPALN)
470dfe64dd3Smacallan#define XGI_CF2_TVHIVISION   XGI_CF2_TVPAL
471dfe64dd3Smacallan#define XGI_CF2_TVYPBPR525I  XGI_CF2_TVNTSC
472dfe64dd3Smacallan#define XGI_CF2_TVYPBPR525P  (XGI_CF2_TVPAL | XGI_CF2_TVNTSC)
473dfe64dd3Smacallan#define XGI_CF2_TVYPBPR750P  XGI_CF2_TVPALM
474dfe64dd3Smacallan#define XGI_CF2_TVYPBPR1080I (XGI_CF2_TVPALM | XGI_CF2_TVPAL)
475dfe64dd3Smacallan
476dfe64dd3Smacallan/* AGP stuff for DRI */
477dfe64dd3Smacallan#define AGP_PAGE_SIZE 4096
478dfe64dd3Smacallan#define AGP_PAGES     2048	 /* Default: 2048 pages @ 4096 = 8MB */
479dfe64dd3Smacallan/* 300 */
480dfe64dd3Smacallan#define AGP_CMDBUF_PAGES 256
481dfe64dd3Smacallan#define AGP_CMDBUF_SIZE (AGP_PAGE_SIZE * AGP_CMDBUF_PAGES)
482dfe64dd3Smacallan/* 315/330 */
483dfe64dd3Smacallan#define AGP_VTXBUF_PAGES 512
484dfe64dd3Smacallan#define AGP_VTXBUF_SIZE (AGP_PAGE_SIZE * AGP_VTXBUF_PAGES)
485dfe64dd3Smacallan
486dfe64dd3Smacallan#define VOLARI_CQSIZE   (1024*1024)
487dfe64dd3Smacallan#define VOLARI_CQSIZEXG20   (128*1024)
488dfe64dd3Smacallan#define VOLARI_CURSOR_SHAPE_SIZE   (64*64*4)
489dfe64dd3Smacallan
490dfe64dd3Smacallan/* For backup of register contents */
491dfe64dd3Smacallantypedef struct {
492dfe64dd3Smacallan    unsigned char xgiRegs3C4[0x50];
493dfe64dd3Smacallan    unsigned char xgiRegs3D4[0x90];
494dfe64dd3Smacallan    unsigned char xgiRegs3C2;
495dfe64dd3Smacallan    unsigned char xgiCapt[0x60];
496dfe64dd3Smacallan    unsigned char xgiVid[0x50];
497dfe64dd3Smacallan    unsigned char VBPart1[0x50];
498dfe64dd3Smacallan    unsigned char VBPart2[0x100];
499dfe64dd3Smacallan    unsigned char VBPart3[0x50];
500dfe64dd3Smacallan    unsigned char VBPart4[0x50];
501dfe64dd3Smacallan    unsigned short ch70xx[64];
502dfe64dd3Smacallan    unsigned long xgiMMIO85C0;
503dfe64dd3Smacallan    unsigned char xgi6326tv[0x46];
504dfe64dd3Smacallan    unsigned long xgiRegsPCI50, xgiRegsPCIA0;
505dfe64dd3Smacallan} XGIRegRec, *XGIRegPtr;
506dfe64dd3Smacallan
507dfe64dd3Smacallan
508dfe64dd3Smacallan/* XGIFBLayout is mainly there because of DGA. It holds the
509dfe64dd3Smacallan * current layout parameters needed for acceleration and other
510dfe64dd3Smacallan * stuff. When switching mode using DGA, these are set up
511dfe64dd3Smacallan * accordingly and not necessarily match pScrn's. Therefore,
512dfe64dd3Smacallan * driver modules should read these values instead of pScrn's.
513dfe64dd3Smacallan */
514dfe64dd3Smacallantypedef struct {
515dfe64dd3Smacallan    int                bitsPerPixel;   	/* = pScrn->bitsPerPixel */
516dfe64dd3Smacallan    int                depth;		/* = pScrn->depth */
517dfe64dd3Smacallan    int                displayWidth;	/* = pScrn->displayWidth */
518dfe64dd3Smacallan    DisplayModePtr     mode;		/* = pScrn->currentMode */
519dfe64dd3Smacallan} XGIFBLayout;
520dfe64dd3Smacallan
521dfe64dd3Smacallan/* Dual head private entity structure */
522dfe64dd3Smacallantypedef struct {
523dfe64dd3Smacallan    ScrnInfoPtr         pScrn_1;
524dfe64dd3Smacallan    ScrnInfoPtr         pScrn_2;
525dfe64dd3Smacallan    unsigned char *     BIOS;
526dfe64dd3Smacallan    VB_DEVICE_INFO     *XGI_Pr;
527dfe64dd3Smacallan    int 		CRT2ModeNo;		/* Current display mode for CRT2 */
528dfe64dd3Smacallan    Bool		CRT2ModeSet;		/* CRT2 mode has been set */
529dfe64dd3Smacallan    unsigned char	CRT2CR30, CRT2CR31, CRT2CR35, CRT2CR38;
530dfe64dd3Smacallan    int			refCount;
531dfe64dd3Smacallan
532dfe64dd3Smacallan    /**
533dfe64dd3Smacallan     * Number of entities
534dfe64dd3Smacallan     *
535dfe64dd3Smacallan     * \bug
536dfe64dd3Smacallan     * This field is tested in one place, but it doesn't appear to ever be
537dfe64dd3Smacallan     * set or modified.
538dfe64dd3Smacallan     */
539dfe64dd3Smacallan    int 		lastInstance;
540dfe64dd3Smacallan
541dfe64dd3Smacallan    Bool		DisableDual;		/* Emergency flag */
542dfe64dd3Smacallan    Bool		ErrorAfterFirst;	/* Emergency flag: Error after first init -> Abort second */
543dfe64dd3Smacallan    int                 maxUsedClock;  		/* Max used pixelclock on master head */
544dfe64dd3Smacallan
545dfe64dd3Smacallan    /**
546dfe64dd3Smacallan     * Framebuffer addresses and sizes
547dfe64dd3Smacallan     *
548dfe64dd3Smacallan     * \bug
549dfe64dd3Smacallan     * These 4 fields are set, but the stored values don't appear to be used.
550dfe64dd3Smacallan     */
551dfe64dd3Smacallan    unsigned long       masterFbAddress;
552dfe64dd3Smacallan    unsigned long	masterFbSize;
553dfe64dd3Smacallan    unsigned long       slaveFbAddress;
554dfe64dd3Smacallan    unsigned long	slaveFbSize;
555dfe64dd3Smacallan
556dfe64dd3Smacallan    unsigned char *     FbBase;         	/* VRAM linear address */
557dfe64dd3Smacallan    unsigned char *     IOBase;         	/* MMIO linear address */
558dfe64dd3Smacallan
559dfe64dd3Smacallan    /**
560dfe64dd3Smacallan     * Map / unmap queue counter.
561dfe64dd3Smacallan     *
562dfe64dd3Smacallan     * \bug
563dfe64dd3Smacallan     * These vales are tested, set to zero, or decremented.  However, I don't
564dfe64dd3Smacallan     * see anywhere in the code where they are incremented.
565dfe64dd3Smacallan     */
566dfe64dd3Smacallan    unsigned short      MapCountIOBase;
567dfe64dd3Smacallan    unsigned short      MapCountFbBase;
568dfe64dd3Smacallan
569dfe64dd3Smacallan    Bool 		forceUnmapIOBase;	/* ignore counter and unmap */
570dfe64dd3Smacallan    Bool		forceUnmapFbBase;	/* ignore counter and unmap */
571dfe64dd3Smacallan#ifdef __alpha__
572dfe64dd3Smacallan    unsigned char *     IOBaseDense;    	/* MMIO for Alpha platform */
573dfe64dd3Smacallan    unsigned short      MapCountIOBaseDense;
574dfe64dd3Smacallan    Bool		forceUnmapIOBaseDense;  /* ignore counter and unmap */
575dfe64dd3Smacallan#endif
576dfe64dd3Smacallan    BOOLEAN		CRT1gamma;
577dfe64dd3Smacallan
578dfe64dd3Smacallan    /**
579dfe64dd3Smacallan     * \bug This field is tested and set to \c NULL but never used.
580dfe64dd3Smacallan     */
581dfe64dd3Smacallan    unsigned char       *RenderAccelArray;
582dfe64dd3Smacallan    unsigned char *	FbBase1;
583dfe64dd3Smacallan    unsigned long	OnScreenSize1;
584dfe64dd3Smacallan
585dfe64dd3Smacallan#ifdef XGI_CP
586dfe64dd3Smacallan    XGI_CP_H_ENT
587dfe64dd3Smacallan#endif
588dfe64dd3Smacallan} XGIEntRec, *XGIEntPtr;
589dfe64dd3Smacallan
590dfe64dd3Smacallan#define XGIPTR(p)       ((XGIPtr)((p)->driverPrivate))
591dfe64dd3Smacallan#define XAAPTR(p)       ((XAAInfoRecPtr)(XGIPTR(p)->AccelInfoPtr))
592dfe64dd3Smacallan
593dfe64dd3Smacallan#define ExtRegSize    0x40
594dfe64dd3Smacallan
595dfe64dd3Smacallan
596dfe64dd3Smacallan/* Relative merge position */
597dfe64dd3Smacallantypedef enum {
598dfe64dd3Smacallan   xgiLeftOf,
599dfe64dd3Smacallan   xgiRightOf,
600dfe64dd3Smacallan   xgiAbove,
601dfe64dd3Smacallan   xgiBelow,
602dfe64dd3Smacallan   xgiClone
603dfe64dd3Smacallan} XGIScrn2Rel;
604dfe64dd3Smacallan
605dfe64dd3Smacallantypedef struct MonitorRange {
606dfe64dd3Smacallan	float loH,hiH,loV,hiV ;
607dfe64dd3Smacallan}MonitorRangeRec,*MonitorRangePtr ;
608dfe64dd3Smacallan
609dfe64dd3Smacallantypedef struct {
610dfe64dd3Smacallan    ScrnInfoPtr         pScrn;		/* -------------- DON'T INSERT ANYTHING HERE --------------- */
611dfe64dd3Smacallan#ifdef XSERVER_LIBPCIACCESS
612dfe64dd3Smacallan    struct pci_device * PciInfo;
613dfe64dd3Smacallan#else
614dfe64dd3Smacallan    pciVideoPtr         PciInfo;	/* -------- OTHERWISE xgi_dri.so MUST BE RECOMPILED -------- */
615dfe64dd3Smacallan    PCITAG              PciTag;
616dfe64dd3Smacallan#endif
617dfe64dd3Smacallan    EntityInfoPtr       pEnt;
618dfe64dd3Smacallan    int                 Chipset;
619dfe64dd3Smacallan    int                 ChipRev;
620dfe64dd3Smacallan    VB_DEVICE_INFO     *XGI_Pr;         /* For new mode switching code */
621dfe64dd3Smacallan    unsigned long       FbAddress;      /* VRAM physical address (in DHM: for each Fb!) */
622dfe64dd3Smacallan    unsigned long       realFbAddress;  /* For DHM/PCI mem mapping: store global FBAddress */
623dfe64dd3Smacallan    unsigned char *     FbBase;         /* VRAM virtual linear address */
624dfe64dd3Smacallan    CARD32              IOAddress;      /* MMIO physical address */
625dfe64dd3Smacallan    unsigned char *     IOBase;         /* MMIO linear address */
626dfe64dd3Smacallan    IOADDRESS           IODBase;        /* Base of PIO memory area */
627dfe64dd3Smacallan#ifdef __alpha__
628dfe64dd3Smacallan    unsigned char *     IOBaseDense;    /* MMIO for Alpha platform */
629dfe64dd3Smacallan#endif
630dfe64dd3Smacallan    XGIIOADDRESS        RelIO;          /* Relocated IO Ports baseaddress */
631dfe64dd3Smacallan    unsigned char *     BIOS;
632dfe64dd3Smacallan    int                 MemClock;
633dfe64dd3Smacallan    int                 BusWidth;
634dfe64dd3Smacallan    int                 MinClock;
635dfe64dd3Smacallan    int                 MaxClock;
636dfe64dd3Smacallan    int                 Flags;          /* HW config flags */
637dfe64dd3Smacallan    long                FbMapSize;	/* Used for Mem Mapping - DON'T CHANGE THIS */
638dfe64dd3Smacallan    long                availMem;       /* Really available Fb mem (minus TQ, HWCursor) */
639dfe64dd3Smacallan    unsigned long	maxxfbmem;      /* limit fb memory X is to use to this (KB) */
640dfe64dd3Smacallan    unsigned long       xgifbMem;       /* heapstart of xgifb (if running) */
641dfe64dd3Smacallan    unsigned long	dhmOffset;	/* Offset to memory for each head (0 or ..) */
642dfe64dd3Smacallan    DGAModePtr          DGAModes;
643dfe64dd3Smacallan    int                 numDGAModes;
644dfe64dd3Smacallan    Bool                DGAactive;
645dfe64dd3Smacallan    Bool                NoAccel;
646dfe64dd3Smacallan    Bool				useEXA;  /* Jong 01/13/2009; support EXA */
647dfe64dd3Smacallan    Bool                NoXvideo;
648dfe64dd3Smacallan    Bool                TurboQueue;
649dfe64dd3Smacallan    int                 ForceCRT1Type;
650dfe64dd3Smacallan    int                 ForceCRT2Type;
651dfe64dd3Smacallan    int                 OptROMUsage;
652dfe64dd3Smacallan    Bool                ValidWidth;
653dfe64dd3Smacallan    unsigned char       myCR63;
654dfe64dd3Smacallan    unsigned long   	VBFlags;		/* Video bridge configuration */
655dfe64dd3Smacallan    unsigned long       VBFlags_backup;         /* Backup for SlaveMode-modes */
656dfe64dd3Smacallan
657dfe64dd3Smacallan    short               scrnOffset;		/* Screen pitch (data) */
658dfe64dd3Smacallan    short               scrnPitch;		/* Screen pitch (display; regarding interlace) */
659dfe64dd3Smacallan    unsigned long       DstColor;
660dfe64dd3Smacallan    int                 xcurrent;               /* for temp use in accel */
661dfe64dd3Smacallan    int                 ycurrent;               /* for temp use in accel */
662dfe64dd3Smacallan    int                 CommandReg;
663dfe64dd3Smacallan
664dfe64dd3Smacallan    Bool                HWCursor;
665dfe64dd3Smacallan    CARD16		        CursorSize;  		/* Size of HWCursor area (bytes) */
666dfe64dd3Smacallan    xf86CursorInfoPtr   CursorInfoPtr;
667dfe64dd3Smacallan    unsigned            CursorOffset;
668dfe64dd3Smacallan
669dfe64dd3Smacallan    /**
670dfe64dd3Smacallan     * \bug This field is set to \c FALSE but never used.
671dfe64dd3Smacallan     */
672dfe64dd3Smacallan    Bool                DoColorExpand;
673dfe64dd3Smacallan
674dfe64dd3Smacallan    XGIRegRec           SavedReg;
675dfe64dd3Smacallan    XGIRegRec           ModeReg;
676dfe64dd3Smacallan
677dfe64dd3Smacallan#ifdef XGI_USE_XAA
678dfe64dd3Smacallan    XAAInfoRecPtr       AccelInfoPtr;
679dfe64dd3Smacallan#endif
680dfe64dd3Smacallan#ifdef XGI_USE_EXA /* Jong 01/13/2009; support EXA */
681dfe64dd3Smacallan    ExaDriverPtr		EXADriverPtr;
682dfe64dd3Smacallan    int			fillPitch, fillBpp;
683dfe64dd3Smacallan    CARD32		fillDstBase;
684dfe64dd3Smacallan    int			copyBpp;
685dfe64dd3Smacallan    int			copySPitch, copyDPitch;
686dfe64dd3Smacallan    CARD32		copySrcBase, copyDstBase;
687dfe64dd3Smacallan    int			copyXdir, copyYdir;
688dfe64dd3Smacallan    ExaOffscreenArea*	exa_scratch;
689dfe64dd3Smacallan    unsigned int 		exa_scratch_next;
690dfe64dd3Smacallan#endif
691dfe64dd3Smacallan
692dfe64dd3Smacallan    CloseScreenProcPtr  CloseScreen;
693dfe64dd3Smacallan    Bool        	(*ModeInit)(ScrnInfoPtr pScrn, DisplayModePtr mode);
694dfe64dd3Smacallan    void        	(*XGISave)(ScrnInfoPtr pScrn, XGIRegPtr xgireg);
695dfe64dd3Smacallan    void        	(*XGISave2)(ScrnInfoPtr pScrn, XGIRegPtr xgireg);
696dfe64dd3Smacallan    void        	(*XGISave3)(ScrnInfoPtr pScrn, XGIRegPtr xgireg);
697dfe64dd3Smacallan    void        	(*XGIRestore)(ScrnInfoPtr pScrn, XGIRegPtr xgireg);
698dfe64dd3Smacallan    void        	(*XGIRestore2)(ScrnInfoPtr pScrn, XGIRegPtr xgireg);
699dfe64dd3Smacallan    void        	(*XGIRestore3)(ScrnInfoPtr pScrn, XGIRegPtr xgireg);
700dfe64dd3Smacallan    void        	(*LoadCRT2Palette)(ScrnInfoPtr pScrn, int numColors,
701dfe64dd3Smacallan                		int *indicies, LOCO *colors, VisualPtr pVisual);
702dfe64dd3Smacallan
703dfe64dd3Smacallan    int       		cmdQueueLen;		/* Current cmdQueueLength (for 2D and 3D) */
704dfe64dd3Smacallan    unsigned long	cmdQueueLenMax;
705dfe64dd3Smacallan    unsigned long	cmdQueueLenMin;
706dfe64dd3Smacallan    unsigned char	*cmdQueueBase;
707dfe64dd3Smacallan    int			*cmdQueueLenPtr;	/* Ptr to variable holding the current queue length */
708dfe64dd3Smacallan    unsigned int        cmdQueueOffset;
709dfe64dd3Smacallan    unsigned int        cmdQueueSize;
710dfe64dd3Smacallan    unsigned long       cmdQueueSizeMask;
711dfe64dd3Smacallan
712dfe64dd3Smacallan    /**
713dfe64dd3Smacallan     * \bug This field is set but never used.
714dfe64dd3Smacallan     */
715dfe64dd3Smacallan    unsigned int        agpWantedPages;
716dfe64dd3Smacallan
717dfe64dd3Smacallan#ifdef XF86DRI
718dfe64dd3Smacallan    unsigned long 	agpHandle;
719dfe64dd3Smacallan    unsigned long	agpAddr;
720dfe64dd3Smacallan    unsigned char 	*agpBase;
721dfe64dd3Smacallan    unsigned int 	agpSize;
722dfe64dd3Smacallan    unsigned long	agpVtxBufAddr;	/* 315 series */
723dfe64dd3Smacallan    unsigned char       *agpVtxBufBase;
724dfe64dd3Smacallan    unsigned int        agpVtxBufSize;
725dfe64dd3Smacallan    unsigned int        agpVtxBufFree;
726dfe64dd3Smacallan    xgiRegion 		agp;
727dfe64dd3Smacallan    Bool 		irqEnabled;
728dfe64dd3Smacallan    int 		irq;
729dfe64dd3Smacallan#endif
730dfe64dd3Smacallan    unsigned long	DRIheapstart, DRIheapend;
731dfe64dd3Smacallan
732dfe64dd3Smacallan    void		(*RenderCallback)(ScrnInfoPtr);
733dfe64dd3Smacallan
734dfe64dd3Smacallan    /**
735dfe64dd3Smacallan     * \bug This field is tested and set to \c NULL but never used.
736dfe64dd3Smacallan     */
737dfe64dd3Smacallan    unsigned char       *RenderAccelArray;
738dfe64dd3Smacallan
739dfe64dd3Smacallan    /**
740dfe64dd3Smacallan     * \bug This field is to \c TRUE but never used.
741dfe64dd3Smacallan     */
742dfe64dd3Smacallan    Bool		doRender;
743dfe64dd3Smacallan
744dfe64dd3Smacallan    int 		PerColorExpandBufferSize;
745dfe64dd3Smacallan    int 		ColorExpandBufferNumber;
746dfe64dd3Smacallan    unsigned char 	*ColorExpandBufferAddr[32];
747dfe64dd3Smacallan    int 		ColorExpandBufferScreenOffset[32];
748dfe64dd3Smacallan
749dfe64dd3Smacallan    /**
750dfe64dd3Smacallan     * \bug This field is read but never initialized.
751dfe64dd3Smacallan     */
752dfe64dd3Smacallan    int 		ImageWriteBufferSize;
753dfe64dd3Smacallan
754dfe64dd3Smacallan    unsigned char 	*ImageWriteBufferAddr;
755dfe64dd3Smacallan
756dfe64dd3Smacallan    int 		Rotate;
757dfe64dd3Smacallan
758dfe64dd3Smacallan    BOOLEAN		HaveCustomModes; /* Jong 07/27/2009; support customer modes */
759dfe64dd3Smacallan
760dfe64dd3Smacallan    /* ShadowFB support */
761dfe64dd3Smacallan    Bool 		ShadowFB;
762dfe64dd3Smacallan    unsigned char 	*ShadowPtr;
763dfe64dd3Smacallan    int  		ShadowPitch;
764dfe64dd3Smacallan
765dfe64dd3Smacallan    /**
766dfe64dd3Smacallan     * \bug This field is set but never used.
767dfe64dd3Smacallan     */
768dfe64dd3Smacallan    Bool		loadDRI;
769dfe64dd3Smacallan
770dfe64dd3Smacallan#ifdef XF86DRI
771dfe64dd3Smacallan    Bool 		directRenderingEnabled;
772dfe64dd3Smacallan    DRIInfoPtr 		pDRIInfo;
773dfe64dd3Smacallan    int 		drmSubFD;
774dfe64dd3Smacallan    int 		numVisualConfigs;
775dfe64dd3Smacallan    __GLXvisualConfig* 	pVisualConfigs;
776dfe64dd3Smacallan    XGIConfigPrivPtr 	pVisualConfigsPriv;
777dfe64dd3Smacallan#endif
778dfe64dd3Smacallan
779dfe64dd3Smacallan    HW_DEVICE_EXTENSION xgi_HwDevExt;      /* For new mode switching code */
780dfe64dd3Smacallan    XF86VideoAdaptorPtr adaptor;
781dfe64dd3Smacallan    ScreenBlockHandlerProcPtr BlockHandler;
782dfe64dd3Smacallan
783dfe64dd3Smacallan    /**
784dfe64dd3Smacallan     * \bug This field is tested and used but never set.
785dfe64dd3Smacallan     */
786dfe64dd3Smacallan    void                (*VideoTimerCallback)(ScrnInfoPtr, Time);
787dfe64dd3Smacallan
788dfe64dd3Smacallan    void		(*ResetXv)(ScrnInfoPtr);
789dfe64dd3Smacallan    void		(*ResetXvGamma)(ScrnInfoPtr);
790dfe64dd3Smacallan
791dfe64dd3Smacallan    OptionInfoPtr 	Options;
792dfe64dd3Smacallan
793dfe64dd3Smacallan    /**
794dfe64dd3Smacallan     * \bug This field is used but never initialized.
795dfe64dd3Smacallan     */
796dfe64dd3Smacallan    unsigned char 	LCDon;
797dfe64dd3Smacallan    Bool 		Blank;
798dfe64dd3Smacallan    int 		CRT1off;		/* 1=CRT1 off, 0=CRT1 on */
799dfe64dd3Smacallan    CARD16 		LCDheight;		/* Vertical resolution of LCD panel */
800dfe64dd3Smacallan    CARD16 		LCDwidth;		/* Horizontal resolution of LCD panel */
801dfe64dd3Smacallan    vbeInfoPtr 		pVbe;			/* For VESA mode switching */
802dfe64dd3Smacallan    UCHAR ScratchSet[16];
803dfe64dd3Smacallan    MonitorRangeRec CRT1Range,CRT2Range;
804dfe64dd3Smacallan
805dfe64dd3Smacallan#ifdef XGIDUALHEAD
806dfe64dd3Smacallan    BOOL 		DualHeadMode;		/* TRUE if we use dual head mode */
807dfe64dd3Smacallan    BOOL 		SecondHead;		/* TRUE is this is the second head */
808dfe64dd3Smacallan    XGIEntPtr 		entityPrivate;		/* Ptr to private entity (see above) */
809dfe64dd3Smacallan#endif
810dfe64dd3Smacallan    XGIFBLayout         CurrentLayout;		/* Current framebuffer layout */
811dfe64dd3Smacallan    BOOL		Primary;		/* Display adapter is primary */
812dfe64dd3Smacallan    xf86Int10InfoPtr    pInt;			/* Our int10 */
813dfe64dd3Smacallan
814dfe64dd3Smacallan    /**
815dfe64dd3Smacallan     * Use our own default modes?
816dfe64dd3Smacallan     *
817dfe64dd3Smacallan     * \bug This field is set but never used.
818dfe64dd3Smacallan     */
819dfe64dd3Smacallan    Bool		noInternalModes;
820dfe64dd3Smacallan
821dfe64dd3Smacallan    int			ForceTVType, SenseYPbPr;
822dfe64dd3Smacallan    int                 NonDefaultPAL, NonDefaultNTSC;
823dfe64dd3Smacallan    unsigned long	ForceYPbPrType, ForceYPbPrAR;
824dfe64dd3Smacallan    unsigned long       lockcalls;		/* Count unlock calls for debug */
825dfe64dd3Smacallan
826dfe64dd3Smacallan    Atom                xvBrightness, xvContrast, xvColorKey, xvHue, xvSaturation;
827dfe64dd3Smacallan    Atom                xvAutopaintColorKey, xvSetDefaults, xvSwitchCRT;
828dfe64dd3Smacallan    Atom		xvDisableGfx, xvDisableGfxLR, xvTVXPosition, xvTVYPosition;
829dfe64dd3Smacallan    Atom		xvDisableColorkey, xvUseChromakey, xvChromaMin, xvChromaMax;
830dfe64dd3Smacallan    Atom		xvInsideChromakey, xvYUVChromakey;
831dfe64dd3Smacallan    Atom		xvGammaRed, xvGammaGreen, xvGammaBlue;
832dfe64dd3Smacallan#ifdef XGI_CP
833dfe64dd3Smacallan    XGI_CP_H
834dfe64dd3Smacallan#endif
835dfe64dd3Smacallan    unsigned long       ChipFlags;
836dfe64dd3Smacallan    unsigned long       XGI_SD_Flags;
837dfe64dd3Smacallan    BOOLEAN		UseHWARGBCursor;
838dfe64dd3Smacallan    BOOLEAN		HWARGBCursor;
839dfe64dd3Smacallan    int                 vb;
840dfe64dd3Smacallan    BOOLEAN		restorebyset;
841dfe64dd3Smacallan    BOOLEAN		nocrt2ddcdetection;
842dfe64dd3Smacallan    BOOLEAN		forcecrt2redetection;
843dfe64dd3Smacallan    BOOLEAN		CRT1gamma, CRT1gammaGiven, CRT2gamma, XvGamma, XvGammaGiven;
844dfe64dd3Smacallan    int			XvDefCon, XvDefBri, XvDefHue, XvDefSat;
845dfe64dd3Smacallan    BOOLEAN		XvDefDisableGfx, XvDefDisableGfxLR;
846dfe64dd3Smacallan    BOOLEAN		XvUseMemcpy;
847dfe64dd3Smacallan    int			XvGammaRed, XvGammaGreen, XvGammaBlue;
848dfe64dd3Smacallan    CARD8		XvGammaRampRed[256], XvGammaRampGreen[256], XvGammaRampBlue[256];
849dfe64dd3Smacallan    BOOLEAN		disablecolorkeycurrent;
850dfe64dd3Smacallan    CARD32		colorKey;
851dfe64dd3Smacallan    CARD32		MiscFlags;
852dfe64dd3Smacallan
853dfe64dd3Smacallan#ifdef XGI_USE_XAA
854dfe64dd3Smacallan    FBLinearPtr		AccelLinearScratch;
855dfe64dd3Smacallan#endif
856dfe64dd3Smacallan
857dfe64dd3Smacallan    float		zClearVal;
858dfe64dd3Smacallan    unsigned long	bClrColor, dwColor;
859dfe64dd3Smacallan    int			AllowHotkey;
860dfe64dd3Smacallan    BOOLEAN		enablexgictrl;
861dfe64dd3Smacallan    short		Video_MaxWidth, Video_MaxHeight;
862dfe64dd3Smacallan    short               scrnPitch2;
863dfe64dd3Smacallan    int	                CurXPreset ;
864dfe64dd3Smacallan    int                 CurYPreset ;
865dfe64dd3Smacallan    unsigned long	mmioSize;
866dfe64dd3Smacallan#ifdef XGIMERGED
867dfe64dd3Smacallan    Bool		MergedFB, MergedFBAuto;
868dfe64dd3Smacallan    XGIScrn2Rel		CRT2Position;
869dfe64dd3Smacallan    char *		CRT2HSync;
870dfe64dd3Smacallan    char *		CRT2VRefresh;
871dfe64dd3Smacallan    char *		MetaModes;
872dfe64dd3Smacallan    ScrnInfoPtr		CRT2pScrn;
873dfe64dd3Smacallan    DisplayModePtr	CRT1Modes;
874dfe64dd3Smacallan    DisplayModePtr	CRT1CurrentMode;
875dfe64dd3Smacallan    int			CRT1frameX0;
876dfe64dd3Smacallan    int			CRT1frameY0;
877dfe64dd3Smacallan    int			CRT1frameX1;
878dfe64dd3Smacallan    int			CRT1frameY1;
879dfe64dd3Smacallan    Bool		CheckForCRT2;
880dfe64dd3Smacallan    int			MergedFBXDPI, MergedFBYDPI;
881dfe64dd3Smacallan#ifdef XGIXINERAMA
882dfe64dd3Smacallan    Bool		UsexgiXinerama;
883dfe64dd3Smacallan    Bool		CRT2IsScrn0;
884dfe64dd3Smacallan    ExtensionEntry 	*XineramaExtEntry;
885dfe64dd3Smacallan    int			xgiXineramaVX, xgiXineramaVY;
886dfe64dd3Smacallan    Bool		AtLeastOneNonClone;
887dfe64dd3Smacallan#endif
888dfe64dd3Smacallan#endif
889dfe64dd3Smacallan
890dfe64dd3Smacallan    /* Added for 3D */
891dfe64dd3Smacallan    unsigned long        cmdQueue_shareWP_only2D;
892dfe64dd3Smacallan    unsigned long        *pCQ_shareWritePort;
893dfe64dd3Smacallan    void                (*SetThreshold)(ScrnInfoPtr pScrn, DisplayModePtr mode,
894dfe64dd3Smacallan                                        unsigned short *Low, unsigned short *High);
895dfe64dd3Smacallan
896dfe64dd3Smacallan    XGI_DSReg           SRList[ExtRegSize] ;
897dfe64dd3Smacallan    XGI_DSReg           CRList[ExtRegSize] ;
898dfe64dd3Smacallan
899dfe64dd3Smacallan    /**
900dfe64dd3Smacallan     * Total number of iterations to wait in \c Volari_Idle.
901dfe64dd3Smacallan     */
902dfe64dd3Smacallan    unsigned int        idle_wait_count;
903dfe64dd3Smacallan
904dfe64dd3Smacallan//:::: for capture
905dfe64dd3Smacallan    Bool		v4l_videoin;
906dfe64dd3Smacallan    int			v4l_devnum;	/* v4l device number, 0,1,2....*/
907dfe64dd3Smacallan//~::::
908dfe64dd3Smacallan
909dfe64dd3Smacallan	int			TargetRefreshRate;
910dfe64dd3Smacallan	Bool		IgnoreDDC;
911dfe64dd3Smacallan
912dfe64dd3Smacallan	Bool		Non_DDC_DefaultMode;
913dfe64dd3Smacallan	int			Non_DDC_DefaultResolutionX ;
914dfe64dd3Smacallan	int			Non_DDC_DefaultResolutionY ;
915dfe64dd3Smacallan	int			Non_DDC_DefaultRefreshRate ;
916dfe64dd3Smacallan} XGIRec, *XGIPtr;
917dfe64dd3Smacallan
918dfe64dd3Smacallan#ifdef XGIDUALHEAD
919dfe64dd3Smacallan# define IS_DUAL_HEAD(x)      ((x)->DualHeadMode)
920dfe64dd3Smacallan# define IS_SECOND_HEAD(x)    ((x)->SecondHead)
921dfe64dd3Smacallan# define ENTITY_PRIVATE(x)    ((x)->entityPrivate)
922dfe64dd3Smacallan#else
923dfe64dd3Smacallan# define IS_DUAL_HEAD(x)      FALSE
924dfe64dd3Smacallan# define IS_SECOND_HEAD(x)    FALSE
925dfe64dd3Smacallan# define ENTITY_PRIVATE(x)    NULL
926dfe64dd3Smacallan#endif
927dfe64dd3Smacallan
928dfe64dd3Smacallan
929dfe64dd3Smacallan#define SEQ_ADDRESS_PORT  0x0014
930dfe64dd3Smacallan#define MISC_OUTPUT_REG_WRITE_PORT  0x0012
931dfe64dd3Smacallan#define MISC_OUTPUT_REG_READ_PORT   0x001C
932dfe64dd3Smacallan#define GRAPH_ADDRESS_PORT  0x001E
933dfe64dd3Smacallan#define VIDEO_SUBSYSTEM_ENABLE_PORT 0x0013
934dfe64dd3Smacallan#define CRTC_ADDRESS_PORT_COLOR  0x0024
935dfe64dd3Smacallan#define PCI_COMMAND  0x04
936dfe64dd3Smacallan
937dfe64dd3Smacallan#define SDMPTR(x) ((XGIMergedDisplayModePtr)(x->currentMode->Private))
938dfe64dd3Smacallan#define CDMPTR    ((XGIMergedDisplayModePtr)(pXGI->CurrentLayout.mode->Private))
939dfe64dd3Smacallan
940dfe64dd3Smacallan#define BOUND(test,low,hi) { \
941dfe64dd3Smacallan    if(test < low) test = low; \
942dfe64dd3Smacallan    if(test > hi) test = hi; }
943dfe64dd3Smacallan
944dfe64dd3Smacallan#define REBOUND(low,hi,test) { \
945dfe64dd3Smacallan    if(test < low) { \
946dfe64dd3Smacallan        hi += test-low; \
947dfe64dd3Smacallan        low = test; } \
948dfe64dd3Smacallan    if(test > hi) { \
949dfe64dd3Smacallan        low += test-hi; \
950dfe64dd3Smacallan        hi = test; } }
951dfe64dd3Smacallan
952dfe64dd3Smacallantypedef struct _MergedDisplayModeRec {
953dfe64dd3Smacallan    DisplayModePtr CRT1;
954dfe64dd3Smacallan    DisplayModePtr CRT2;
955dfe64dd3Smacallan    XGIScrn2Rel    CRT2Position;
956dfe64dd3Smacallan} XGIMergedDisplayModeRec, *XGIMergedDisplayModePtr;
957dfe64dd3Smacallan
958dfe64dd3Smacallan
959dfe64dd3Smacallantypedef struct _region {
960dfe64dd3Smacallan    int x0,x1,y0,y1;
961dfe64dd3Smacallan} region;
962dfe64dd3Smacallan
963dfe64dd3Smacallan
964dfe64dd3Smacallanextern void  xgiOptions(ScrnInfoPtr pScrn);
965dfe64dd3Smacallanextern const OptionInfoRec * XGIAvailableOptions(int chipid, int busid);
966dfe64dd3Smacallanextern void  XGISetup(ScrnInfoPtr pScrn);
967dfe64dd3Smacallanextern void  XGIVGAPreInit(ScrnInfoPtr pScrn);
968dfe64dd3Smacallanextern Bool  XGIAccelInit(ScreenPtr pScreen);
969dfe64dd3Smacallanextern Bool  XGIHWCursorInit(ScreenPtr pScreen);
970dfe64dd3Smacallanextern Bool  XGIDGAInit(ScreenPtr pScreen);
971dfe64dd3Smacallanextern void  XGIInitVideo(ScreenPtr pScreen);
972dfe64dd3Smacallan
973dfe64dd3Smacallanextern int   XGI_GetCHTVlumabandwidthcvbs(ScrnInfoPtr pScrn);
974dfe64dd3Smacallan
975dfe64dd3Smacallanint    XG40Mclk(XGIPtr pXGI);
976dfe64dd3Smacallan
977dfe64dd3Smacallanvoid XGINew_InitVBIOSData(PXGI_HW_DEVICE_INFO HwDeviceExtension, PVB_DEVICE_INFO pVBInfo) ;
978dfe64dd3Smacallanint compute_vclk(int Clock, int *out_n, int *out_dn, int *out_div,
979dfe64dd3Smacallan                 int *out_sbit, int *out_scale);
980dfe64dd3Smacallan
981dfe64dd3Smacallanvoid XGI_WaitBeginRetrace(XGIIOADDRESS RelIO);
982dfe64dd3Smacallanvoid XGI_WaitEndRetrace(XGIIOADDRESS RelIO);
983dfe64dd3Smacallan
984dfe64dd3Smacallan/* 2005/11/21 added by jjtseng */
985dfe64dd3Smacallan#define DelayS(sec) usleep((sec)*1000000)
986dfe64dd3Smacallan#define DelayMS(millisec) usleep((millisec)*1000)
987dfe64dd3Smacallan#define DelayUS(microsec) usleep((microsec))
988dfe64dd3Smacallan/*~jjtseng 2005/11/21 */
989dfe64dd3Smacallan
990dfe64dd3SmacallanBool Volari_AccelInit(ScreenPtr pScreen) ;
991dfe64dd3Smacallan/* void XGI_UnLockCRT2(PXGI_HW_DEVICE_INFO,USHORT BaseAddr); */
992dfe64dd3Smacallan/* void XGI_LockCRT2(PXGI_HW_DEVICE_INFO,USHORT BaseAddr); */
993dfe64dd3Smacallan/* void XGI_DisableBridge(PXGI_HW_DEVICE_INFO,USHORT BaseAddr); */
994dfe64dd3Smacallan/* void XGI_EnableBridge(PXGI_HW_DEVICE_INFO,USHORT BaseAddr); */
995dfe64dd3Smacallan#endif
996dfe64dd3Smacallan
997dfe64dd3Smacallanextern USHORT XGI_GetModeID(ULONG VBFlags, int HDisplay, int VDisplay,
998dfe64dd3Smacallan    int Depth, int LCDwith, int LCDheight);
999dfe64dd3Smacallan
1000dfe64dd3Smacallanextern BOOLEAN XGI_SearchModeID(const XGI_StStruct *SModeIDTable,
1001dfe64dd3Smacallan    const XGI_ExtStruct *EModeIDTable, unsigned char VGAINFO,
1002dfe64dd3Smacallan    USHORT *ModeNo, USHORT *ModeIdIndex);
1003dfe64dd3Smacallan
1004dfe64dd3Smacallanextern UCHAR XGI_GetModePtr(const XGI_StStruct *SModeIDTable,
1005dfe64dd3Smacallan    unsigned ModeType, USHORT ModeNo, USHORT ModeIdIndex);
1006dfe64dd3Smacallan
1007dfe64dd3Smacallanextern void XGI_SetReg(XGIIOADDRESS port, USHORT index, USHORT data);
1008dfe64dd3Smacallanextern void XGI_SetRegByte(XGIIOADDRESS port, USHORT data);
1009dfe64dd3Smacallanextern void XGI_SetRegShort(XGIIOADDRESS port, USHORT data);
1010dfe64dd3Smacallanextern void XGI_SetRegLong(XGIIOADDRESS port, ULONG data);
1011dfe64dd3Smacallanextern UCHAR XGI_GetReg(XGIIOADDRESS port, USHORT index);
1012dfe64dd3Smacallanextern UCHAR XGI_GetRegByte(XGIIOADDRESS port);
1013dfe64dd3Smacallanextern USHORT XGI_GetRegShort(XGIIOADDRESS port);
1014dfe64dd3Smacallanextern ULONG XGI_GetRegLong(XGIIOADDRESS port);
1015dfe64dd3Smacallanextern void XGI_SetRegANDOR(XGIIOADDRESS Port, USHORT Index, USHORT DataAND,
1016dfe64dd3Smacallan			    USHORT DataOR);
1017dfe64dd3Smacallanextern void XGI_SetRegAND(XGIIOADDRESS Port, USHORT Index, USHORT DataAND);
1018dfe64dd3Smacallanextern void XGI_SetRegOR(XGIIOADDRESS Port, USHORT Index, USHORT DataOR);
1019dfe64dd3Smacallan
1020dfe64dd3Smacallan#define uint8_t	CARD8
1021dfe64dd3Smacallanextern void XGI_WriteDAC(XGIIOADDRESS dac_data, unsigned shift,
1022dfe64dd3Smacallan    unsigned ordering, uint8_t red, uint8_t green, uint8_t blue);
1023dfe64dd3Smacallan
1024dfe64dd3Smacallan#ifdef DEBUG
1025dfe64dd3Smacallanvoid XGIDumpRegs(ScrnInfoPtr pScrn);
1026dfe64dd3Smacallan
1027dfe64dd3Smacallan/**
1028dfe64dd3Smacallan * Write value to the PC's 0x80 debug port.
1029dfe64dd3Smacallan *
1030dfe64dd3Smacallan * \bug
1031dfe64dd3Smacallan * I'm pretty sure the debug 0x80 only exists on PCs.  Should this routine
1032dfe64dd3Smacallan * be a no-op on non-x86 and non-x86-64 architectures?
1033dfe64dd3Smacallan */
1034dfe64dd3Smacallan#define Newdebugcode(dbg_code) outb(0x80, dbg_code)
1035dfe64dd3Smacallan#else
1036dfe64dd3Smacallan#define Newdebugcode(dbg_code)
1037dfe64dd3Smacallan#endif
1038