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