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