sis.h revision 1fd23544
1/* 2 * Main global data and definitions 3 * 4 * Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1) Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2) Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 3) The name of the author may not be used to endorse or promote products 15 * derived from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * 28 * Authors: Thomas Winischhofer <thomas@winischhofer.net> 29 * others (old code base) 30 * 31 */ 32 33#ifndef _SIS_H_ 34#define _SIS_H_ 35 36#include <stdio.h> 37#include <string.h> 38#include <math.h> 39#include <setjmp.h> 40#include <unistd.h> 41#include <fcntl.h> 42#include <sys/ioctl.h> 43 44#include <sispcirename.h> 45 46#define SISDRIVERVERSIONYEAR 5 47#define SISDRIVERVERSIONMONTH 9 48#define SISDRIVERVERSIONDAY 20 49#define SISDRIVERREVISION 1 50 51#define SISDRIVERIVERSION ((SISDRIVERVERSIONYEAR << 16) | \ 52 (SISDRIVERVERSIONMONTH << 8) | \ 53 SISDRIVERVERSIONDAY | \ 54 (SISDRIVERREVISION << 24)) 55 56#undef SIS_LINUX /* Try to find out whether platform is Linux */ 57#if defined(__GNUC__) && (__GNUC__ >= 4) 58#ifdef __linux__ 59#define SIS_LINUX 60#endif 61#else 62#ifdef linux 63#define SIS_LINUX 64#endif 65#endif 66 67#if 0 68#define TWDEBUG /* for debugging */ 69#endif 70 71#undef SIS_CP 72#if 0 73#include "siscp.H" 74#endif 75 76#include "compiler.h" 77#include "xf86Pci.h" 78#include "xf86Priv.h" 79#include "xf86_OSproc.h" 80#include "xf86Resources.h" 81#include "xf86.h" 82#include "xf86PciInfo.h" 83#include "xf86Cursor.h" 84#include "xf86cmap.h" 85#include "vbe.h" 86 87#define SIS_HaveDriverFuncs 0 88 89#undef SISISXORG6899900 90#ifdef XORG_VERSION_CURRENT 91#include "xorgVersion.h" 92#define SISMYSERVERNAME "X.org" 93#ifndef XF86_VERSION_NUMERIC 94#define XF86_VERSION_NUMERIC(major,minor,patch,snap,dummy) \ 95 (((major) * 10000000) + ((minor) * 100000) + ((patch) * 1000) + snap) 96#define XF86_VERSION_CURRENT XF86_VERSION_NUMERIC(4,3,99,902,0) 97#endif 98#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(6,8,99,900,0) || XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(4,0,0,0,0) 99#define SISISXORG6899900 100#endif 101#if 0 102#ifdef HaveDriverFuncs 103#define SIS_HAVE_DRIVER_FUNC 104#undef SIS_HaveDriverFuncs 105#define SIS_HaveDriverFuncs HaveDriverFuncs 106#endif 107#endif 108#else 109#include "xf86Version.h" 110#define SISMYSERVERNAME "XFree86" 111#endif 112 113#define SIS_NAME "SIS" 114#define SIS_DRIVER_NAME "sis" 115#define SIS_MAJOR_VERSION PACKAGE_VERSION_MAJOR 116#ifdef SISISXORG6899900 117#define SIS_MINOR_VERSION PACKAGE_VERSION_MINOR /* DRI changes */ 118#define SIS_PATCHLEVEL PACKAGE_VERSION_PATCHLEVEL 119#else 120#define SIS_MINOR_VERSION 7 121#define SIS_PATCHLEVEL 1 122#endif 123#define SIS_CURRENT_VERSION ((SIS_MAJOR_VERSION << 16) | \ 124 (SIS_MINOR_VERSION << 8) | SIS_PATCHLEVEL ) 125 126#if (XF86_VERSION_CURRENT >= XF86_VERSION_NUMERIC(4,3,99,0,0)) || (defined(XvExtension)) 127#include "xf86xv.h" 128#include <X11/extensions/Xv.h> 129#endif 130 131/* Platform/architecture related definitions: */ 132 133/* SIS_PC_PLATFORM: Map VGA memory at a0000 and save/restore fonts? */ 134/* List of architectures likely to be incomplete */ 135#define SIS_PC_PLATFORM 136#if defined(__powerpc__) || defined(__mips__) || defined(__arm32__) 137#undef SIS_PC_PLATFORM 138#endif 139 140/* SIS_USE_BIOS_SCRATCH: Save/restore mode number in BIOS scratch area? */ 141#undef SIS_USE_BIOS_SCRATCH 142#if defined(i386) || defined(__i386) || defined(__i386__) || defined(__AMD64__) || defined(__amd64__) || defined(__x86_64__) 143#define SIS_USE_BIOS_SCRATCH 144#endif 145 146/* SIS_NEED_MAP_IOP: Map i/o port area to virtual memory? */ 147/* List of architectures likely to be incomplete */ 148/* This is BROKEN, see comment in sis_driver.c */ 149#undef SIS_NEED_MAP_IOP 150#if 0 151#if defined(__arm32__) || defined(__mips__) 152#define SIS_NEED_MAP_IOP 153#endif 154#endif 155 156/* SISUSEDEVPORT: Used on architectures without direct inX/outX access. In this case, 157 * we use read()/write() to /dev/port. LINUX ONLY! (How can this be done on *BSD?) 158 */ 159#undef SISUSEDEVPORT 160#if defined(SIS_LINUX) && (defined(__arm32__) || defined(__mips__)) 161#ifndef SIS_NEED_MAP_IOP 162#define SISUSEDEVPORT 163#endif 164#endif 165 166/* Our #includes: Require the arch/platform dependent #defines above */ 167 168#include "osdef.h" 169#include "vgatypes.h" 170#include "vstruct.h" 171 172#undef SISHAVEDRMWRITE 173#undef SISNEWDRI 174#ifdef XF86DRI 175#if XF86_VERSION_CURRENT >= XF86_VERSION_NUMERIC(4,2,99,3,0) 176#define SISHAVEDRMWRITE 177#endif 178#if XF86_VERSION_CURRENT >= XF86_VERSION_NUMERIC(4,3,99,14,0) 179#define SISNEWDRI 180#endif 181#undef SIS315DRI /* define this if dri is adapted for 315/330 series */ 182#include "xf86drm.h" 183#include "sarea.h" 184#define _XF86DRI_SERVER_ 185#include "dri.h" 186#include "GL/glxint.h" 187#include "sis_dri.h" 188#endif /* XF86DRI */ 189 190/* Configurable stuff: ------------------------------------- */ 191 192#define SISDUALHEAD /* Include Dual Head code */ 193 194#define SISMERGED /* Include Merged-FB code */ 195 196#undef SISXINERAMA 197#ifdef SISMERGED 198#define SISXINERAMA /* Include SiS Pseudo-Xinerama for MergedFB mode */ 199#define SIS_XINERAMA_MAJOR_VERSION 1 200#define SIS_XINERAMA_MINOR_VERSION 1 201#endif 202 203#define SIS_ARGB_CURSOR /* Include code for color hardware cursors */ 204 205#define ENABLE_YPBPR /* Include YPbPr support on SiS bridges (315 series and 661/741/760) */ 206 207#define SISVRAMQ /* Use VRAM queue mode on 315/330/340/XGI series */ 208 209#undef INCL_YUV_BLIT_ADAPTOR 210#ifdef SISVRAMQ 211#define INCL_YUV_BLIT_ADAPTOR /* Include support for YUV->RGB blit adaptors (VRAM queue mode only) */ 212#endif 213 214#if 1 215#define SIS_USE_XAA /* Include code for XAA */ 216#endif 217 218#ifdef SISVRAMQ 219#ifdef XORG_VERSION_CURRENT 220#if defined(SIS_HAVE_EXA) || (defined(XF86EXA) && (XF86EXA != 0)) 221#if 1 222#define SIS_USE_EXA /* Include code for EXA */ 223#endif 224#endif 225#endif 226#endif 227 228#if 0 229#define SISDEINT /* Include Xv deinterlacer code (not functional yet!) */ 230#endif 231 232#if 0 233#define XV_SD_DEPRECATED /* Include deprecated XV SD interface for SiSCtrl */ 234#endif 235 236/* End of configurable stuff --------------------------------- */ 237 238#define UNLOCK_ALWAYS /* Always unlock the registers (should be set!) */ 239 240#if !defined(SIS_USE_XAA) && !defined(SIS_USE_EXA) 241#define SIS_USE_XAA 242#endif 243 244#ifdef SIS_USE_XAA 245#include "xaa.h" 246#endif 247#ifdef SIS_USE_EXA 248#include "exa.h" 249#endif 250 251/* Need that for SiSCtrl and Pseudo-Xinerama */ 252#define NEED_REPLIES /* ? */ 253#define EXTENSION_PROC_ARGS void * 254#include "extnsionst.h" /* required */ 255#include <X11/extensions/panoramiXproto.h> /* required */ 256 257#undef SISCHECKOSSSE 258#ifdef XORG_VERSION_CURRENT 259#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(6,8,99,13,0) 260#define SISCHECKOSSSE /* Automatic check OS for SSE; requires SigIll facility */ 261#endif 262#endif 263 264#undef SISGAMMARAMP 265#ifdef XORG_VERSION_CURRENT 266#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(6,8,99,13,0) 267#define SISGAMMARAMP /* Driver can set gamma ramp; requires additional symbols in xf86sym.h */ 268#endif 269#endif 270 271#if 0 /* Perhaps for future use */ 272#if 1 273#define SIS_PCI_BUS(a) (a)->bus 274#define SIS_PCI_DEVICE(a) (a)->device 275#define SIS_PCI_FUNC(a) (a)->func 276#define SIS_PCI_TAG(a) pciTag((a)->bus, (a)->device, (a)->func); 277#else 278#define SIS_PCI_BUS(a) (a)->pciid.bus 279#define SIS_PCI_DEVICE(a) (a)->pciid.device 280#define SIS_PCI_FUNC(a) (a)->pciid.func 281#define SIS_PCI_TAG(a) pciTag(&((a)->pciid)); 282#endif 283#endif 284 285#ifdef TWDEBUG 286#define SISVERBLEVEL 3 287#else 288#define SISVERBLEVEL 4 289#endif 290 291/* For SiS315/550/650/740/330/660 - these should be moved elsewhere! */ 292#ifndef PCI_CHIP_SIS315H 293#define PCI_CHIP_SIS315H 0x0310 294#endif 295#ifndef PCI_CHIP_SIS315 296#define PCI_CHIP_SIS315 0x0315 297#endif 298#ifndef PCI_CHIP_SIS315PRO 299#define PCI_CHIP_SIS315PRO 0x0325 300#endif 301#ifndef PCI_CHIP_SIS550 302#define PCI_CHIP_SIS550 0x5315 /* 550_VGA */ 303#endif 304#ifndef PCI_CHIP_SIS650 305#define PCI_CHIP_SIS650 0x6325 /* 650_VGA and 740_VGA */ 306#endif 307#ifndef PCI_CHIP_SIS330 308#define PCI_CHIP_SIS330 0x0330 309#endif 310#ifndef PCI_CHIP_SIS660 311#define PCI_CHIP_SIS660 0x6330 /* 661_VGA, 741_VGA, 760_VGA, 761_VGA */ 312#endif 313#ifndef PCI_CHIP_SIS340 314#define PCI_CHIP_SIS340 0x0340 315#endif 316 317#ifndef PCI_VENDOR_XGI 318#define PCI_VENDOR_XGI 0x18ca 319#endif 320 321#ifndef PCI_CHIP_XGIXG20 322#define PCI_CHIP_XGIXG20 0x0020 323#endif 324 325#ifndef PCI_CHIP_XGIXG40 326#define PCI_CHIP_XGIXG40 0x0040 327#endif 328 329/* pSiS->Flags (old series only) */ 330#define SYNCDRAM 0x00000001 331#define RAMFLAG 0x00000002 332#define ESS137xPRESENT 0x00000004 333#define SECRETFLAG 0x00000008 334#define A6326REVAB 0x00000010 335#define MMIOMODE 0x00010000 336#define LFBQMODE 0x00020000 337#define AGPQMODE 0x00040000 338#define UMA 0x80000000 339 340#define BIOS_BASE 0xC0000 341#define BIOS_SIZE 0x10000 342 343#define SIS_VBFlagsVersion 1 344 345/* pSiS->VBFlags - if anything is changed here, increase VBFlagsVersion! */ 346#define CRT2_DEFAULT 0x00000001 347#define CRT2_LCD 0x00000002 /* Never change the order of the CRT2_XXX entries */ 348#define CRT2_TV 0x00000004 349#define CRT2_VGA 0x00000008 350#define TV_NTSC 0x00000010 351#define TV_PAL 0x00000020 352#define TV_HIVISION 0x00000040 353#define TV_YPBPR 0x00000080 354#define TV_AVIDEO 0x00000100 355#define TV_SVIDEO 0x00000200 356#define TV_SCART 0x00000400 357#define OLDVB_CONEXANT 0x00000800 /* Definition deprecated (now VBFlags2) */ 358#define OLDVB_TRUMPION OLDVB_CONEXANT /* Definition deprecated (now VBFlags2) */ 359#define TV_PALM 0x00001000 360#define TV_PALN 0x00002000 361#define TV_NTSCJ TV_PALM 362#define OLDVB_302ELV 0x00004000 /* Definition deprecated (now VBFlags2) */ 363#define TV_CHSCART 0x00008000 364#define TV_CHYPBPR525I 0x00010000 365#define CRT1_VGA 0x00000000 /* ZERO - no mask! */ 366#define CRT1_LCDA 0x00020000 367#define VGA2_CONNECTED 0x00040000 368#define DISPTYPE_CRT1 0x00080000 /* CRT1 connected and used */ 369#define TV_YPBPR625I 0x00100000 370#define TV_YPBPR625P 0x00200000 371#define OLDVB_302B 0x00400000 /* Definition deprecated (now VBFlags2) */ 372#define OLDVB_30xBDH 0x00800000 /* Definition deprecated (now VBFlags2) */ 373#define OLDVB_LVDS 0x01000000 /* Definition deprecated (now VBFlags2) */ 374#define OLDVB_CHRONTEL 0x02000000 /* Definition deprecated (now VBFlags2) */ 375#define OLDVB_301LV 0x04000000 /* Definition deprecated (now VBFlags2) */ 376#define OLDVB_302LV 0x08000000 /* Definition deprecated (now VBFlags2) */ 377#define OLDVB_301C 0x10000000 /* Definition deprecated (now VBFlags2) */ 378#define SINGLE_MODE 0x20000000 /* CRT1 or CRT2; determined by DISPTYPE_CRTx */ 379#define MIRROR_MODE 0x40000000 /* CRT1 + CRT2 identical (mirror mode) */ 380#define DUALVIEW_MODE 0x80000000 /* CRT1 + CRT2 independent (dual head mode) */ 381 382/* Aliases: */ 383#define CRT2_ENABLE (CRT2_LCD | CRT2_TV | CRT2_VGA) 384#define TV_STANDARD (TV_NTSC | TV_PAL | TV_PALM | TV_PALN | TV_NTSCJ) 385#define TV_INTERFACE (TV_AVIDEO|TV_SVIDEO|TV_SCART|TV_HIVISION|TV_YPBPR) 386 387/* Only if TV_YPBPR is set: */ 388#define TV_YPBPR525I TV_NTSC 389#define TV_YPBPR525P TV_PAL 390#define TV_YPBPR750P TV_PALM 391#define TV_YPBPR1080I TV_PALN 392#define TV_YPBPRALL (TV_YPBPR525I | TV_YPBPR525P | \ 393 TV_YPBPR625I | TV_YPBPR625P | \ 394 TV_YPBPR750P | TV_YPBPR1080I) 395 396#define TV_YPBPR43LB TV_CHSCART 397#define TV_YPBPR43 TV_CHYPBPR525I 398#define TV_YPBPR169 (TV_CHSCART | TV_CHYPBPR525I) 399#define TV_YPBPRAR (TV_CHSCART | TV_CHYPBPR525I) 400 401#define DISPTYPE_DISP2 CRT2_ENABLE 402#define DISPTYPE_DISP1 DISPTYPE_CRT1 403#define VB_DISPMODE_SINGLE SINGLE_MODE /* alias */ 404#define VB_DISPMODE_MIRROR MIRROR_MODE /* alias */ 405#define VB_DISPMODE_DUAL DUALVIEW_MODE /* alias */ 406#define DISPLAY_MODE (SINGLE_MODE | MIRROR_MODE | DUALVIEW_MODE) 407 408/* pSiS->VBFlags2 (static stuff only!) */ 409#define VB2_SISUMC 0x00000001 410#define VB2_301 0x00000002 /* Video bridge type */ 411#define VB2_301B 0x00000004 412#define VB2_301C 0x00000008 413#define VB2_307T 0x00000010 414#define VB2_302B 0x00000800 415#define VB2_301LV 0x00001000 416#define VB2_302LV 0x00002000 417#define VB2_302ELV 0x00004000 418#define VB2_307LV 0x00008000 419#define VB2_30xBDH 0x08000000 /* 30xB DH version (w/o LCD support) */ 420#define VB2_CONEXANT 0x10000000 /* >=661 series only */ 421#define VB2_TRUMPION 0x20000000 /* 300 series only */ 422#define VB2_LVDS 0x40000000 423#define VB2_CHRONTEL 0x80000000 424 425#define VB2_SISLVDSBRIDGE (VB2_301LV | VB2_302LV | VB2_302ELV | VB2_307LV) 426#define VB2_SISTMDSBRIDGE (VB2_301 | VB2_301B | VB2_301C | VB2_302B | VB2_307T) 427#define VB2_SISBRIDGE (VB2_SISLVDSBRIDGE | VB2_SISTMDSBRIDGE) 428 429#define VB2_SISTMDSLCDABRIDGE (VB2_301C | VB2_307T) 430#define VB2_SISLCDABRIDGE (VB2_SISTMDSLCDABRIDGE | VB2_301LV | VB2_302LV | VB2_302ELV | VB2_307LV) 431 432#define VB2_SISHIVISIONBRIDGE (VB2_301 | VB2_301B | VB2_302B) 433#define VB2_SISYPBPRBRIDGE (VB2_301C | VB2_307T | VB2_SISLVDSBRIDGE) 434#define VB2_SISYPBPRARBRIDGE (VB2_301C | VB2_307T | VB2_307LV) 435#define VB2_SISTAP4SCALER (VB2_301C | VB2_307T | VB2_302ELV | VB2_307LV) 436#define VB2_SISTVBRIDGE (VB2_SISHIVISIONBRIDGE | VB2_SISYPBPRBRIDGE) 437 438#define VB2_SISVGA2BRIDGE (VB2_301 | VB2_301B | VB2_301C | VB2_302B | VB2_307T) 439 440#define VB2_VIDEOBRIDGE (VB2_SISBRIDGE | VB2_LVDS | VB2_CHRONTEL | VB2_CONEXANT) 441 442#define VB2_30xB (VB2_301B | VB2_301C | VB2_302B | VB2_307T) 443#define VB2_30xBLV (VB2_30xB | VB2_SISLVDSBRIDGE) 444#define VB2_30xC (VB2_301C | VB2_307T) 445#define VB2_30xCLV (VB2_301C | VB2_307T | VB2_302ELV| VB2_307LV) 446#define VB2_SISEMIBRIDGE (VB2_302LV | VB2_302ELV | VB2_307LV) 447#define VB2_LCD162MHZBRIDGE (VB2_301C | VB2_307T) 448/* CRT2/LCD over 1280 (overflow bits in Part4) */ 449#define VB2_LCDOVER1280BRIDGE (VB2_301C | VB2_307T | VB2_302LV | VB2_302ELV | VB2_307LV) 450/* CRT2/LCD over 1600? Is this really gonna happen, or will there be LCDA only for large panels? */ 451#define VB2_LCDOVER1600BRIDGE (VB2_307T | VB2_307LV) 452/* VGA2 up to 202MHz (1600x1200@75) */ 453#define VB2_RAMDAC202MHZBRIDGE (VB2_301C | VB2_307T) 454 455/* pSiS->VBFlags3 (for future use) */ 456#define VB3_CRT1_TV 0x00000001 457#define VB3_CRT1_LCD 0x00000002 458#define VB3_CRT1_VGA 0x00000004 459#define TV1_AVIDEO 0x00000100 460#define TV1_SVIDEO 0x00000200 461#define TV1_SCART 0x00000400 462#define TV1_NTSC 0x00000800 463#define TV1_PAL 0x00001000 464#define TV1_YPBPR 0x00002000 465#define TV1_PALM 0x00004000 466#define TV1_PALN 0x00008000 467#define TV1_NTSCJ 0x00010000 468#define TV1_YPBPR525I 0x00020000 469#define TV1_YPBPR525P 0x00040000 470#define TV1_YPBPR625I 0x00080000 471#define TV1_YPBPR625P 0x00100000 472#define TV1_YPBPR750P 0x00200000 473#define TV1_YPBPR1080I 0x00400000 474 475/* pSiS->VBLCDFlags */ 476#define VB_LCD_320x480 0x00000001 /* DSTN/FSTN for 550 */ 477#define VB_LCD_640x480 0x00000002 478#define VB_LCD_800x600 0x00000004 479#define VB_LCD_1024x768 0x00000008 480#define VB_LCD_1280x1024 0x00000010 481#define VB_LCD_1280x960 0x00000020 482#define VB_LCD_1600x1200 0x00000040 483#define VB_LCD_2048x1536 0x00000080 484#define VB_LCD_1400x1050 0x00000100 485#define VB_LCD_1152x864 0x00000200 486#define VB_LCD_1152x768 0x00000400 487#define VB_LCD_1280x768 0x00000800 488#define VB_LCD_1024x600 0x00001000 489#define VB_LCD_640x480_2 0x00002000 /* DSTN/FSTN */ 490#define VB_LCD_640x480_3 0x00004000 /* DSTN/FSTN */ 491#define VB_LCD_848x480 0x00008000 /* LVDS only, otherwise handled as custom */ 492#define VB_LCD_1280x800 0x00010000 493#define VB_LCD_1680x1050 0x00020000 494#define VB_LCD_1280x720 0x00040000 495#define VB_LCD_320x240 0x00080000 496#define VB_LCD_856x480 0x00100000 497#define VB_LCD_1280x854 0x00200000 498#define VB_LCD_1920x1200 0x00400000 499#define VB_LCD_UNKNOWN 0x10000000 500#define VB_LCD_BARCO1366 0x20000000 501#define VB_LCD_CUSTOM 0x40000000 502#define VB_LCD_EXPANDING 0x80000000 503 504#define VB_FORBID_CRT2LCD_OVER_1600 /* CRT2/LCD supports only up to 1600 pixels */ 505 506/* PresetMode argument */ 507#define SIS_MODE_SIMU 0 508#define SIS_MODE_CRT1 1 509#define SIS_MODE_CRT2 2 510 511/* pSiS->MiscFlags */ 512#define MISC_CRT1OVERLAY 0x00000001 /* Current display mode supports overlay (CRT1) */ 513#define MISC_PANELLINKSCALER 0x00000002 /* Panel link is currently scaling */ 514#define MISC_CRT1OVERLAYGAMMA 0x00000004 /* Current display mode supports overlay gamma corr on CRT1 */ 515#define MISC_TVNTSC1024 0x00000008 /* Current display mode is TV NTSC/PALM/YPBPR525I 1024x768 */ 516#define MISC_CRT2OVERLAY 0x00000010 /* Current display mode supports overlay (CRT2) */ 517#define MISC_SIS760ONEOVERLAY 0x00000020 /* SiS760/761: Only one overlay available currently */ 518#define MISC_STNMODE 0x00000040 /* SiS550: xSTN active */ 519 520/* pSiS->SiS6326Flags */ 521#define SIS6326_HASTV 0x00000001 522#define SIS6326_TVSVIDEO 0x00000002 523#define SIS6326_TVCVBS 0x00000004 524#define SIS6326_TVPAL 0x00000008 525#define SIS6326_TVDETECTED 0x00000010 526#define SIS6326_TVON 0x80000000 527 528#ifdef DEBUG 529#define PDEBUG(p) p 530#else 531#define PDEBUG(p) 532#endif 533 534#define BITMASK(h,l) (((unsigned)(1U << ((h) - (l) + 1)) - 1) << (l)) 535#define GENMASK(mask) BITMASK(1 ? mask, 0 ? mask) 536 537#define GETBITS(var,mask) (((var) & GENMASK(mask)) >> (0 ? mask)) 538#define SETBITS(val,mask) ((val) << (0 ? mask)) 539#define SETBIT(n) (1 << (n)) 540 541#define GETBITSTR(val,from,to) ((GETBITS(val, from)) << (0 ? to)) 542#define SETVARBITS(var,val,from,to) (((var) & (~(GENMASK(to)))) | GETBITSTR(val,from,to)) 543#define GETVAR8(var) ((var) & 0xFF) 544#define SETVAR8(var,val) (var) = GETVAR8(val) 545 546typedef unsigned long ULong; 547typedef unsigned short UShort; 548typedef unsigned char UChar; 549 550/* pSiS->VGAEngine - VGA engine types */ 551#define UNKNOWN_VGA 0 552#define SIS_530_VGA 1 553#define SIS_OLD_VGA 2 554#define SIS_300_VGA 3 555#define SIS_315_VGA 4 /* Includes 330/660/661/741/760/340/761 and M versions thereof, XGI */ 556 557/* pSiS->oldChipset */ 558#define OC_UNKNOWN 0 559#define OC_SIS86201 1 560#define OC_SIS86202 2 561#define OC_SIS6205A 3 562#define OC_SIS6205B 4 563#define OC_SIS82204 5 564#define OC_SIS6205C 6 565#define OC_SIS6225 7 566#define OC_SIS5597 8 567#define OC_SIS6326 9 568#define OC_SIS530A 11 569#define OC_SIS530B 12 /* 620 in 620-WDR */ 570#define OC_SIS620 13 571 572/* Chrontel type */ 573#define CHRONTEL_700x 0 574#define CHRONTEL_701x 1 575 576/* pSiS->ChipFlags */ 577/* Use only lower 16 bit for chip id! (sisctrl) */ 578#define SiSCF_LARGEOVERLAY 0x00000001 579#define SiSCF_Is651 0x00000002 580#define SiSCF_IsM650 0x00000004 581#define SiSCF_IsM652 0x00000008 582#define SiSCF_IsM653 0x00000010 583#define SiSCF_Is652 0x00000020 584#define SiSCF_Is65x (SiSCF_Is651|SiSCF_IsM650|SiSCF_IsM652|SiSCF_IsM653|SiSCF_Is652) 585#define SiSCF_IsM661 0x00000100 /* M661FX */ 586#define SiSCF_IsM741 0x00000200 587#define SiSCF_IsM760 0x00000400 588#define SiSCF_IsM661M 0x00000800 /* M661MX */ 589#define SiSCF_IsM66x (SiSCF_IsM661 | SiSCF_IsM741 | SiSCF_IsM760 | SiSCF_IsM661M) 590#define SiSCF_Is315USB 0x00001000 /* USB2VGA dongle */ 591#define SiSCF_Is315E 0x00002000 /* 315E (lower clocks) */ 592#define SiSCF_IsXGIV3 SiSCF_Is651 /* Volari V3(XT) (If neither XGI... set, is V8) */ 593#define SiSCF_IsXGIV5 SiSCF_IsM650/* Volari V5 */ 594#define SiSCF_IsXGIDUO SiSCF_IsM652/* Volari Duo */ 595/* ... */ 596#define SiSCF_315Core 0x00010000 /* 3D: Real 315 */ 597#define SiSCF_Real256ECore 0x00020000 /* 3D: Similar to 315 core, no T&L? (65x, 661, 740, 741) */ 598#define SiSCF_XabreCore 0x00040000 /* 3D: Real Xabre */ 599#define SiSCF_Ultra256Core 0x00080000 /* 3D: aka "Mirage 2"; similar to Xabre, no T&L?, no P:Shader? (760) */ 600#define SiSCF_MMIOPalette 0x00100000 /* HW supports MMIO palette writing/reading */ 601#define SiSCF_IsXGI 0x00200000 /* Is XGI chip (Z7, V3, V5, V8) */ 602#define SiSCF_UseLCDA 0x01000000 603#define SiSCF_760LFB 0x08000000 /* 76x: LFB active (if not set, UMA only) */ 604#define SiSCF_760UMA 0x10000000 /* 76x: UMA active (if not set, LFB only) */ 605#define SiSCF_CRT2HWCKaputt 0x20000000 /* CRT2 Mono HWCursor engine buggy (SiS 330) */ 606#define SiSCF_Glamour3 0x40000000 607#define SiSCF_Integrated 0x80000000 608 609/* SiS Direct Xv-API */ 610#define SiS_SD_IS300SERIES 0x00000001 611#define SiS_SD_IS315SERIES 0x00000002 612#define SiS_SD_IS330SERIES 0x00000004 613#define SiS_SD_SUPPORTPALMN 0x00000008 /* tv chip supports pal-m, pal-n */ 614#define SiS_SD_SUPPORT2OVL 0x00000010 /* set = 2 overlays, clear = support SWITCHCRT xv prop */ 615#define SiS_SD_SUPPORTTVPOS 0x00000020 /* supports changing tv position */ 616#define SiS_SD_ISDUALHEAD 0x00000040 /* Driver is in dual head mode */ 617#define SiS_SD_ISMERGEDFB 0x00000080 /* Driver is in merged fb mode */ 618#define SiS_SD_ISDHSECONDHEAD 0x00000100 /* Dual head: This is CRT1 (=second head) */ 619#define SiS_SD_ISDHXINERAMA 0x00000200 /* Dual head: We are running Xinerama */ 620#define SiS_SD_VBHASSCART 0x00000400 /* videobridge has SCART instead of VGA2 */ 621#define SiS_SD_ISDEPTH8 0x00000800 /* Depth is 8, no independent gamma correction */ 622#define SiS_SD_SUPPORTSOVER 0x00001000 /* Support for Chrontel Super Overscan */ 623#define SiS_SD_ENABLED 0x00002000 /* sisctrl is enabled (by option) */ 624#define SiS_SD_PSEUDOXINERAMA 0x00004000 /* pseudo xinerama is active */ 625#define SiS_SD_SUPPORTLCDA 0x00008000 /* Support LCD Channel A */ 626#define SiS_SD_SUPPORTNTSCJ 0x00010000 /* tv chip supports ntsc-j */ 627#define SiS_SD_ADDLSUPFLAG 0x00020000 /* 1 = the following flags are valid */ 628#define SiS_SD_SUPPORTVGA2 0x00040000 /* CRT2=VGA supported */ 629#define SiS_SD_SUPPORTSCART 0x00080000 /* CRT2=SCART supported */ 630#define SiS_SD_SUPPORTOVERSCAN 0x00100000 /* Overscan flag supported */ 631#define SiS_SD_SUPPORTXVGAMMA1 0x00200000 /* Xv Gamma correction for CRT1 supported */ 632#define SiS_SD_SUPPORTTV 0x00400000 /* CRT2=TV supported */ 633#define SiS_SD_SUPPORTYPBPR 0x00800000 /* CRT2=YPbPr (525i, 525p, 750p, 1080i) is supported */ 634#define SiS_SD_SUPPORTHIVISION 0x01000000 /* CRT2=HiVision is supported */ 635#define SiS_SD_SUPPORTYPBPRAR 0x02000000 /* YPbPr aspect ratio is supported */ 636#define SiS_SD_SUPPORTSCALE 0x04000000 /* Scaling of LCD panel supported */ 637#define SiS_SD_SUPPORTCENTER 0x08000000 /* If scaling supported: Centering of screen [NOT] supported (TMDS only) */ 638#define SiS_SD_SUPPORTREDETECT 0x10000000 /* Support re-detection of CRT2 devices */ 639#define SiS_SD_IS340SERIES 0x20000000 640#define SiS_SD_SUPPORTSGRCRT2 0x40000000 /* Separate CRT2 gamma correction supported */ 641#define SiS_SD_CANSETGAMMA 0x80000000 /* Driver can set gamma ramp; otherwise: App needs to reset palette */ 642 /* after disabling sep CRT2 gamma corr */ 643 644#define SiS_SD2_LCDTMDS 0x00000001 /* SiS Bridge supports TMDS (DVI-D) */ 645#define SiS_SD2_LCDLVDS 0x00000002 /* SiS Bridge supports LVDS */ 646#define SiS_SD2_SUPPORTLCD 0x00000004 /* Bridge supports LCD (LVDS or TMDS, SiS+3rd party) */ 647#define SiS_SD2_SUPPORTTVSIZE 0x00000008 /* TV resizing supported (SiS bridges) */ 648#define SiS_SD2_SUPPORTTVTYPE 0x00000010 /* TV type selection supported (SiS bridges) */ 649#define SiS_SD2_SUPPORTGAMMA2 0x00000020 /* Gamma corr for CRT2 supported (SiS bridges) */ 650#define SiS_SD2_SISBRIDGE 0x00000040 /* SiS bridge */ 651#define SiS_SD2_SUPPTVSAT 0x00000080 /* TV saturation supported */ 652#define SiS_SD2_SUPPTVEDGE 0x00000100 /* TV edge enhancement supported */ 653#define SiS_SD2_CHRONTEL 0x00000200 /* Chrontel TV encoder present */ 654#define SiS_SD2_VIDEOBRIDGE 0x00000400 /* Any type of video bridge present */ 655#define SiS_SD2_THIRDPARTYLVDS 0x00000800 /* Third party LVDS (non-SiS) */ 656#define SiS_SD2_ADDLFLAGS 0x00001000 /* Following flags valid */ 657#define SiS_SD2_SUPPORT760OO 0x00002000 /* Support dynamic one/two overlay configuration changes */ 658 /* (If set, utility must re-read SD2 flags after mode change) */ 659#define SiS_SD2_SIS760ONEOVL 0x00004000 /* (76x:) Only one overlay currently */ 660#define SiS_SD2_MERGEDUCLOCK 0x00008000 /* Provide VRefresh in mode->Clock field in MergedFB mode */ 661#define SiS_SD2_SUPPORTXVHUESAT 0x00010000 /* Xv: Support hue & saturation */ 662#define SiS_SD2_NEEDUSESSE 0x00020000 /* Need "UseSSE" option to use SSE (otherwise auto) */ 663#define SiS_SD2_NODDCSUPPORT 0x00040000 /* No hardware DDC support (USB) */ 664#define SiS_SD2_SUPPORTXVDEINT 0x00080000 /* Xv deinterlacing supported (n/a, for future use) */ 665#define SiS_SD2_ISXGI 0x00100000 /* Is XGI chip */ 666#define SiS_SD2_USEVBFLAGS2 0x00200000 /* Use VBFlags2 for bridge ID */ 667#define SiS_SD2_SUPPLTFLAG 0x00400000 /* Driver supports the following 3 flags */ 668#define SiS_SD2_ISLAPTOP 0x00800000 /* This machine is (very probably) a laptop */ 669#define SiS_SD2_MACHINETYPE2 0x01000000 /* Machine type 2 (for future use) */ 670#define SiS_SD2_MACHINETYPE3 0x02000000 /* Machine type 3 (for future use) */ 671#define SiS_SD2_SUPPORT625I 0x04000000 /* Support YPbPr 625i */ 672#define SiS_SD2_SUPPORT625P 0x08000000 /* Support YPbPr 625p */ 673#define SiS_SD2_VBINVB2ONLY 0x10000000 /* VB_* bits in vbflags no longer used for vb type */ 674#define SiS_SD2_NEWGAMMABRICON 0x20000000 /* Support new gamma brightness/contrast */ 675#define SiS_SD2_HAVESD34 0x40000000 /* Support SD3 and SD4 flags */ 676#define SiS_SD2_NOOVERLAY 0x80000000 /* No video overlay */ 677 678#define SiS_SD3_OLDGAMMAINUSE 0x00000001 /* Old gamma brightness is currently in use */ 679#define SiS_SD3_MFBALLOWOFFCL 0x00000002 /* Supports off'ing CRTx in MFB if a clone mode is active */ 680#define SiS_SD3_SUPPORTVBF34 0x00000004 /* Supports VBFlags3 and VBFlags4 */ 681#define SiS_SD3_SUPPORTDUALDVI 0x00000008 /* Supports dual dvi-d (for future use) */ 682#define SiS_SD3_SUPPORTDUALTV 0x00000010 /* Supports dual tv (for future use) */ 683#define SiS_SD3_NEWOUTPUTSW 0x00000020 /* Supports NEWSETVBFLAGS (for future use) */ 684#define SiS_SD3_CRT1SATGAIN 0x00000040 /* Supports CRT1 saturation gain */ 685#define SiS_SD3_CRT2SATGAIN 0x00000080 /* Supports CRT2 saturation gain (apart from TV, see SiS_SD2_SUPPTVSAT) */ 686 687#define SIS_DIRECTKEY 0x03145792 688 689/* SiSCtrl: Check mode for CRT2 */ 690#define SiS_CF2_LCD 0x01 691#define SiS_CF2_TV 0x02 692#define SiS_CF2_VGA2 0x04 693#define SiS_CF2_TVPAL 0x08 694#define SiS_CF2_TVNTSC 0x10 /* + NTSC-J */ 695#define SiS_CF2_TVPALM 0x20 696#define SiS_CF2_TVPALN 0x40 697#define SiS_CF2_CRT1LCDA 0x80 698#define SiS_CF2_TYPEMASK (SiS_CF2_LCD | SiS_CF2_TV | SiS_CF2_VGA2 | SiS_CF2_CRT1LCDA) 699#define SiS_CF2_TVSPECIAL (SiS_CF2_LCD | SiS_CF2_TV) 700#define SiS_CF2_TVSPECMASK (SiS_CF2_TVPAL | SiS_CF2_TVNTSC | SiS_CF2_TVPALM | SiS_CF2_TVPALN) 701#define SiS_CF2_TVHIVISION SiS_CF2_TVPAL 702#define SiS_CF2_TVYPBPR525I SiS_CF2_TVNTSC 703#define SiS_CF2_TVYPBPR525P (SiS_CF2_TVPAL | SiS_CF2_TVNTSC) 704#define SiS_CF2_TVYPBPR625I SiS_CF2_TVPALN 705#define SiS_CF2_TVYPBPR625P (SiS_CF2_TVPALN | SiS_CF2_TVPAL) 706#define SiS_CF2_TVYPBPR750P SiS_CF2_TVPALM 707#define SiS_CF2_TVYPBPR1080I (SiS_CF2_TVPALM | SiS_CF2_TVPAL) 708 709/* AGP stuff for DRI */ 710#define AGP_PAGE_SIZE 4096 711#define AGP_PAGES 2048 /* Default: 2048 pages @ 4096 = 8MB */ 712/* 300 */ 713#define AGP_CMDBUF_PAGES 256 714#define AGP_CMDBUF_SIZE (AGP_PAGE_SIZE * AGP_CMDBUF_PAGES) 715/* 315/330 */ 716#define AGP_VTXBUF_PAGES 512 717#define AGP_VTXBUF_SIZE (AGP_PAGE_SIZE * AGP_VTXBUF_PAGES) 718 719/* Defines for our own vgaHW functions */ 720#define SISVGA_SR_MODE 0x01 721#define SISVGA_SR_FONTS 0x02 722#define SISVGA_SR_CMAP 0x04 723#define SISVGA_SR_ALL (SISVGA_SR_MODE | SISVGA_SR_FONTS | SISVGA_SR_CMAP) 724 725#define SISKGA_FIX_OVERSCAN 1 /* overcan correction required */ 726#define SISKGA_ENABLE_ON_ZERO 2 /* if possible enable display at beginning of next scanline/frame */ 727#define SISKGA_BE_TOT_DEC 4 /* always fix problem by setting blank end */ 728 729/* CPU flags (for memcpy() etc.) */ 730#define SIS_CPUFL_LIBC 0x0001 731#define SIS_CPUFL_BI 0x0002 732#define SIS_CPUFL_SSE 0x0004 733#define SIS_CPUFL_MMX 0x0008 734#define SIS_CPUFL_3DNOW 0x0010 735#define SIS_CPUFL_MMX2 0x0020 736#define SIS_CPUFL_BI2 0x0040 737#define SIS_CPUFL_SSE2 0x0080 738#define SIS_CPUFL_FLAG 0x8000 739 740/* Convenience macro for sisfb version checks */ 741#define SISFB_VERSION(a,b,c) ((a << 16) | (b << 8) | c) 742 743/* For backup of register contents */ 744typedef struct { 745 UChar sisRegMiscOut; 746 UChar sisRegsATTR[22]; 747 UChar sisRegsGR[10]; 748 UChar sisDAC[768]; 749 UChar sisRegs3C4[0x80]; 750 UChar sisRegs3D4[0xff]; 751 UChar sisRegs3C2; 752 UChar sisCapt[0x60]; 753 UChar sisVid[0x50]; 754 UChar VBPart1[0x80]; 755 UChar VBPart2[0x100]; 756 UChar VBPart3[0x50]; 757 UChar VBPart4[0x50]; 758 UShort ch70xx[64]; 759 unsigned int sisMMIO85C0; 760 UChar sis6326tv[0x46]; 761 unsigned int sisRegsPCI50, sisRegsPCIA0; 762 UChar BIOSModeSave; 763} SISRegRec, *SISRegPtr; 764 765typedef struct _sisModeInfoPtr { 766 int width; 767 int height; 768 int bpp; 769 int n; 770 struct _sisModeInfoPtr *next; 771} sisModeInfoRec, *sisModeInfoPtr; 772 773/* SISFBLayout (which has nothing to do with sisfb, actually) 774 * is mainly there because of DGA. It holds the current layout 775 * parameters needed for acceleration and other stuff. When 776 * switching mode using DGA, these are set up accordingly and 777 * not necessarily match pScrn's. Therefore, driver modules 778 * should read these values instead of pScrn's. 779 */ 780typedef struct { 781 int bitsPerPixel; /* = pScrn->bitsPerPixel */ 782 int depth; /* = pScrn->depth */ 783 int displayWidth; /* = pScrn->displayWidth */ 784 int displayHeight; /* = imageHeight from DGA mode; ONLY WHEN DGA IS ACTIVE!!! */ 785 int DGAViewportX; 786 int DGAViewportY; 787 DisplayModePtr mode; /* = pScrn->currentMode */ 788} SISFBLayout; 789 790/* For extended memcpy() */ 791typedef void (*vidCopyFunc)(UChar *, const UChar *, int); 792 793#ifdef SISISXORG6899900 794#define SISAGPHTYPE drm_handle_t 795#else 796#define SISAGPHTYPE ULong 797#endif 798 799/* Dual head private entity structure */ 800#ifdef SISDUALHEAD 801typedef struct { 802 ScrnInfoPtr pScrn_1; 803 ScrnInfoPtr pScrn_2; 804 UChar *BIOS; 805 struct SiS_Private *SiS_Pr; 806#ifdef XF86DRI 807 SISAGPHTYPE agpHandle; 808 ULong agpAddr; 809 UChar *agpBase; 810 unsigned int agpSize; 811 unsigned int agpWantedSize; 812 unsigned int agpWantedPages; 813 ULong agpCmdBufAddr; /* 300 series */ 814 UChar *agpCmdBufBase; 815 unsigned int agpCmdBufSize; 816 unsigned int agpCmdBufFree; 817 ULong agpVtxBufAddr; /* 315/330 series */ 818 UChar *agpVtxBufBase; 819 unsigned int agpVtxBufSize; 820 unsigned int agpVtxBufFree; 821 sisRegion agp; 822 int drmSubFD; 823#endif 824 Bool AGPInitOK; 825 int CRT1ModeNo; /* Current display mode for CRT1 */ 826 DisplayModePtr CRT1DMode; /* Current display mode for CRT1 */ 827 int CRT2ModeNo; /* Current display mode for CRT2 */ 828 DisplayModePtr CRT2DMode; /* Current display mode for CRT2 */ 829 Bool CRT2ModeSet; /* CRT2 mode has been set */ 830 Bool CRT2IsCustom; 831 UChar CRT2CR30, CRT2CR31, CRT2CR35, CRT2CR38; 832 int refCount; 833 int lastInstance; /* number of entities */ 834 Bool DisableDual; /* Emergency flag */ 835 Bool ErrorAfterFirst; /* Emergency flag: Error after first init -> Abort second */ 836 Bool HWCursor; /* Backup master settings for use on slave */ 837 Bool TurboQueue; 838 int ForceCRT1Type; 839 Bool CRT1TypeForced; 840 int ForceCRT2Type; 841 int OptTVStand; 842 int OptTVOver; 843 int OptTVSOver; 844 int OptROMUsage; 845 int OptUseOEM; 846 Bool NoAccel; 847 Bool useEXA; 848 int forceCRT1; 849 int DSTN, FSTN; 850 Bool XvOnCRT2; 851 int maxUsedClock; /* Max used pixelclock on master head */ 852 ULong masterFbAddress; /* Framebuffer addresses and sizes */ 853 ULong masterFbSize; 854 ULong slaveFbAddress; 855 ULong slaveFbSize; 856 void *FbBase; /* VRAM linear address */ 857 UChar *RealFbBase; /* Real VRAM linear address (for DHM, SiS76x UMA skipping) */ 858 void *IOBase; /* MMIO linear address */ 859 UShort MapCountIOBase; /* map/unmap queue counter */ 860 UShort MapCountFbBase; /* map/unmap queue counter */ 861 Bool forceUnmapIOBase; /* ignore counter and unmap */ 862 Bool forceUnmapFbBase; /* ignore counter and unmap */ 863#ifdef __alpha__ 864 void *IOBaseDense; /* MMIO for Alpha platform */ 865 UShort MapCountIOBaseDense; 866 Bool forceUnmapIOBaseDense; /* ignore counter and unmap */ 867#endif 868 int chtvlumabandwidthcvbs; /* TV settings for Chrontel TV encoder */ 869 int chtvlumabandwidthsvideo; 870 int chtvlumaflickerfilter; 871 int chtvchromabandwidth; 872 int chtvchromaflickerfilter; 873 int chtvcvbscolor; 874 int chtvtextenhance; 875 int chtvcontrast; 876 int sistvedgeenhance; /* TV settings for SiS bridge */ 877 int sistvantiflicker; 878 int sistvsaturation; 879 int sistvcolcalibc; 880 int sistvcolcalibf; 881 int sistvcfilter; 882 int sistvyfilter; 883 int tvxpos, tvypos; 884 int tvxscale, tvyscale; 885 int siscrt1satgain; 886 Bool crt1satgaingiven; 887 int ForceTVType, SenseYPbPr; 888 unsigned int ForceYPbPrType, ForceYPbPrAR; 889 int chtvtype; 890 int NonDefaultPAL, NonDefaultNTSC; 891 UShort tvx, tvy; 892 UChar p2_01, p2_02, p2_1f, p2_20, p2_43, p2_42, p2_2b; 893 UChar p2_44, p2_45, p2_46; 894 unsigned int sistvccbase; 895 UChar p2_35, p2_36, p2_37, p2_38, p2_48, p2_49, p2_4a; 896 UChar p2_0a, p2_2f, p2_30, p2_47; 897 UChar scalingp1[9], scalingp4[9], scalingp2[64]; 898 UShort cursorBufferNum; 899 Bool restorebyset; 900 Bool CRT1gamma, CRT1gammaGiven, CRT2gamma, XvGamma, XvGammaGiven, XvDefAdaptorBlit; 901 int XvGammaRed, XvGammaGreen, XvGammaBlue; 902 int GammaBriR, GammaBriG, GammaBriB; /* strictly for Xinerama */ 903 float NewGammaBriR, NewGammaBriG, NewGammaBriB; /* strictly for Xinerama */ 904 float NewGammaConR, NewGammaConG, NewGammaConB; /* strictly for Xinerama */ 905 unsigned int CRT1MonGamma, CRT2MonGamma; 906 unsigned int CRT1VGAMonitorGamma, CRT2LCDMonitorGamma, CRT2VGAMonitorGamma; 907 int curxvcrtnum; 908 int UsePanelScaler, CenterLCD; 909 int AllowHotkey; 910 Bool enablesisctrl; 911 unsigned int cmdQ_SharedWritePort_2D; 912 UChar *RenderAccelArray; 913 UChar *FbBase1; 914 ULong OnScreenSize1; 915 UChar OldMode; 916 int HWCursorMBufNum, HWCursorCBufNum; 917 Bool ROM661New; 918 Bool HaveXGIBIOS; 919 Bool XvUseMemcpy; 920 Bool BenchMemCpy; 921 Bool HaveFastVidCpy; 922 vidCopyFunc SiSFastVidCopy, SiSFastMemCopy; 923 vidCopyFunc SiSFastVidCopyFrom, SiSFastMemCopyFrom; 924 unsigned int CPUFlags; 925#ifdef SIS_NEED_MAP_IOP 926 CARD32 IOPAddress; /* I/O port physical address */ 927 void *IOPBase; /* I/O port linear address */ 928 UShort MapCountIOPBase; /* map/unmap queue counter */ 929 Bool forceUnmapIOPBase; /* ignore counter and unmap */ 930#endif 931#ifdef SIS_CP 932 SIS_CP_H_ENT 933#endif 934} SISEntRec, *SISEntPtr; 935#endif 936 937#define SISPTR(p) ((SISPtr)((p)->driverPrivate)) 938#define XAAPTR(p) ((XAAInfoRecPtr)(SISPTR(p)->AccelInfoPtr)) 939 940/* MergedFB: Relative position */ 941typedef enum { 942 sisLeftOf, 943 sisRightOf, 944 sisAbove, 945 sisBelow, 946 sisClone 947} SiSScrn2Rel; 948 949typedef struct _region { 950 int x0,x1,y0,y1; 951} region; 952 953typedef struct { 954 ScrnInfoPtr pScrn; 955 pciVideoPtr PciInfo; 956 int PciBus, PciDevice, PciFunc; 957 PCITAG PciTag; 958 EntityInfoPtr pEnt; 959 int Chipset; 960 unsigned char ChipType; 961 int ChipRev; 962 int VGAEngine; /* see above */ 963 int hasTwoOverlays; /* Chipset supports two video overlays? */ 964 struct SiS_Private *SiS_Pr; /* For mode switching code */ 965 int DSTN; /* For 550 FSTN/DSTN; set by option, no detection */ 966 ULong FbAddress; /* VRAM physical address (in DHM: for each Fb!) */ 967 ULong realFbAddress; /* For DHM/PCI mem mapping: store global FBAddress */ 968 void *FbBase; /* VRAM virtual linear address */ 969 void *RealFbBase; /* Real VRAM virtual linear address (for DHM and SiS76x UMA skipping) */ 970 CARD32 IOAddress; /* MMIO physical address */ 971 void *IOBase; /* MMIO linear address */ 972 IOADDRESS IODBase; /* Base of PIO memory area */ 973#ifdef __alpha__ 974 void *IOBaseDense; /* MMIO for Alpha platform */ 975#endif 976 SISIOADDRESS RelIO; /* Relocated IO Ports baseaddress */ 977 UChar *BIOS; 978 int MemClock; 979 int BusWidth; 980 int MinClock; 981 int MaxClock; 982 int Flags; /* HW config flags */ 983 long FbMapSize; /* Used for Mem Mapping - DON'T CHANGE THIS */ 984 long availMem; /* Really available Fb mem (minus TQ, HWCursor) */ 985 unsigned int maxxfbmem; /* limit fb memory X is to use to this (KB) */ 986 unsigned int sisfbHeapStart; /* heapstart of sisfb (if running) */ 987 unsigned int dhmOffset; /* Offset to memory for each head (0 or ..); also used on SiS76x/UMA+LFB */ 988 unsigned int FbBaseOffset; 989 DGAModePtr DGAModes; 990 int numDGAModes; 991 Bool DGAactive; 992 int DGAViewportStatus; 993 UChar OldMode; /* Back old modeNo (if available) */ 994 Bool NoAccel; 995 Bool NoXvideo; 996 Bool XvOnCRT2; /* see sis_opt.c */ 997 Bool HWCursor; 998 Bool UsePCIRetry; 999 Bool TurboQueue; 1000 int VESA; 1001 int ForceCRT1Type; 1002 Bool CRT1Detected, CRT1TypeForced; 1003 int ForceCRT2Type; 1004 int OptTVStand; 1005 int OptTVOver; 1006 int OptROMUsage; 1007 int UseCHOverScan; 1008 Bool ValidWidth; 1009 Bool FastVram; /* now unused */ 1010 int forceCRT1; 1011 Bool CRT1changed; 1012 UChar oldCR17, oldCR63, oldSR1F; 1013 UChar oldCR32, oldCR36, oldCR37; 1014 UChar myCR32, myCR36, myCR37, myCR63; 1015 UChar newCR32; 1016 unsigned int VBFlags; /* Video bridge configuration (dynamic) */ 1017 unsigned int VBFlags2; /* Video bridge configuration 2 (static flags only) */ 1018 unsigned int VBFlags3, VBFlags4; /* Video bridge configuration 3, 4 (dynamic) */ 1019 unsigned int VBFlags_backup; /* Backup for SlaveMode-modes */ 1020 unsigned int VBFlags_backup3; /* Backup for SlaveMode-modes */ 1021 unsigned int VBFlags_backup4; /* Backup for SlaveMode-modes */ 1022 unsigned int VBLCDFlags, VBLCDFlags2; 1023 int ChrontelType; /* CHRONTEL_700x or CHRONTEL_701x */ 1024 unsigned int PDC, PDCA; /* PanelDelayCompensation */ 1025 short scrnOffset; /* Screen pitch (data) */ 1026 short scrnPitch; /* Screen pitch (display; regarding interlace) */ 1027 short DstColor; 1028 unsigned int SiS310_AccelDepth; /* used in accel for 315 series */ 1029 int MaxCMDQueueLen; 1030 int CurCMDQueueLen; 1031 int MinCMDQueueLen; 1032 CARD16 CursorSize; /* Size of HWCursor area (bytes) */ 1033 CARD32 cursorOffset; /* see sis_driver.c and sis_cursor.c */ 1034 Bool useEXA; 1035 void (*InitAccel)(ScrnInfoPtr pScrn); 1036 void (*SyncAccel)(ScrnInfoPtr pScrn); 1037 void (*FillRect)(ScrnInfoPtr pScrn, int x, int y, int w, int h, int color); 1038 void (*BlitRect)(ScrnInfoPtr pScrn, int srcx, int srcy, int dstx, int dsty, 1039 int w, int h, int color); 1040 int CommandReg; 1041 Bool ClipEnabled; 1042 int Xdirection; /* for temp use in accel */ 1043 int Ydirection; /* for temp use in accel */ 1044#ifdef SIS_USE_XAA 1045 XAAInfoRecPtr AccelInfoPtr; 1046 UChar *XAAScanlineColorExpandBuffers[2]; 1047 Bool DoColorExpand; 1048 Bool ColorExpandBusy; 1049 int xcurrent; /* for temp use in accel */ 1050 int ycurrent; /* for temp use in accel */ 1051 int sisPatternReg[4]; 1052 int ROPReg; 1053#endif 1054#ifdef SIS_USE_EXA 1055 ExaDriverPtr EXADriverPtr; 1056 int fillPitch, fillBpp; 1057 CARD32 fillDstBase; 1058 int copyBpp; 1059 int copySPitch, copyDPitch; 1060 CARD32 copySrcBase, copyDstBase; 1061 int copyXdir, copyYdir; 1062 ExaOffscreenArea * exa_scratch; 1063 unsigned int exa_scratch_next; 1064#endif 1065 Bool alphaBlitBusy; 1066 SISRegRec SavedReg; 1067 SISRegRec ModeReg; 1068 xf86CursorInfoPtr CursorInfoPtr; 1069 CloseScreenProcPtr CloseScreen; 1070 Bool (*ModeInit)(ScrnInfoPtr pScrn, DisplayModePtr mode); 1071 void (*SiSSave)(ScrnInfoPtr pScrn, SISRegPtr sisreg); 1072 void (*SiSRestore)(ScrnInfoPtr pScrn, SISRegPtr sisreg); 1073 int cmdQueueLen; /* Current cmdQueueLength (for 2D and 3D) */ 1074 unsigned int *cmdQueueBase; 1075 int *cmdQueueLenPtr; /* Ptr to variable holding the current queue length */ 1076 int *cmdQueueLenPtrBackup; /* Backup for DRI init/restore */ 1077 unsigned int cmdQueueOffset; 1078 unsigned int cmdQueueSize; 1079 unsigned int cmdQueueSizeMask; 1080 unsigned int cmdQ_SharedWritePort_2D; 1081 unsigned int *cmdQ_SharedWritePort; 1082 unsigned int *cmdQ_SharedWritePortBackup; 1083 unsigned int cmdQueueSize_div2; 1084 unsigned int cmdQueueSize_div4; 1085 unsigned int cmdQueueSize_4_3; 1086#ifdef XF86DRI 1087 SISAGPHTYPE agpHandle; 1088 ULong agpAddr; 1089 UChar *agpBase; 1090 unsigned int agpSize; 1091 unsigned int agpWantedSize; 1092 unsigned int agpWantedPages; 1093 ULong agpCmdBufAddr; /* 300 series */ 1094 UChar *agpCmdBufBase; 1095 unsigned int agpCmdBufSize; 1096 unsigned int agpCmdBufFree; 1097 ULong agpVtxBufAddr; /* 315 series */ 1098 UChar *agpVtxBufBase; 1099 unsigned int agpVtxBufSize; 1100 unsigned int agpVtxBufFree; 1101 sisRegion agp; 1102#endif 1103 Bool AGPInitOK; 1104 Bool irqEnabled; 1105 int irq; 1106 Bool IsAGPCard, IsPCIExpress; 1107 unsigned int DRIheapstart, DRIheapend; 1108 Bool NeedFlush; /* Need to flush cmd buf mem (760) */ 1109 1110#ifdef SIS_USE_XAA 1111 void (*RenderCallback)(ScrnInfoPtr); 1112 Time RenderTime; 1113 FBLinearPtr AccelLinearScratch; 1114#endif 1115#ifdef SIS_USE_EXA 1116 void (*ExaRenderCallback)(ScrnInfoPtr); 1117 Time ExaRenderTime; 1118#endif 1119 UChar *RenderAccelArray; 1120 Bool doRender; 1121 1122 int ColorExpandRingHead; 1123 int ColorExpandRingTail; 1124 int PerColorExpandBufferSize; 1125 int ColorExpandBufferNumber; 1126 int ColorExpandBufferCountMask; 1127 UChar *ColorExpandBufferAddr[32]; 1128 CARD32 ColorExpandBufferScreenOffset[32]; 1129 CARD32 ColorExpandBase; 1130 1131 int Rotate, Reflect; 1132 void (*PointerMoved)(int index, int x, int y); 1133 1134 /* ShadowFB support */ 1135 Bool ShadowFB; 1136 UChar *ShadowPtr; 1137 int ShadowPitch; 1138 1139#ifdef SISUSEDEVPORT 1140 Bool sisdevportopen; 1141#endif 1142 1143 /* DRI */ 1144 Bool loadDRI; 1145#ifdef XF86DRI 1146 Bool directRenderingEnabled; 1147 DRIInfoPtr pDRIInfo; 1148 int drmSubFD; 1149 int numVisualConfigs; 1150 __GLXvisualConfig* pVisualConfigs; 1151 SISConfigPrivPtr pVisualConfigsPriv; 1152 SISRegRec DRContextRegs; 1153#endif 1154 1155 /* Xv */ 1156 XF86VideoAdaptorPtr adaptor; 1157 XF86VideoAdaptorPtr blitadaptor; 1158 void *blitPriv; 1159 ScreenBlockHandlerProcPtr BlockHandler; 1160 void (*VideoTimerCallback)(ScrnInfoPtr, Time); 1161 void (*ResetXv)(ScrnInfoPtr); 1162 void (*ResetXvDisplay)(ScrnInfoPtr); 1163 void (*ResetXvGamma)(ScrnInfoPtr); 1164 1165 /* misc */ 1166 OptionInfoPtr Options; 1167 UChar BIOSModeSave; 1168 int CRT1off; /* 1=CRT1 off, 0=CRT1 on */ 1169 CARD16 LCDheight; /* Vertical resolution of LCD panel */ 1170 CARD16 LCDwidth; /* Horizontal resolution of LCD panel */ 1171 vbeInfoPtr pVbe; /* For VESA mode switching */ 1172 CARD16 vesamajor; 1173 CARD16 vesaminor; 1174 int UseVESA; 1175 sisModeInfoPtr SISVESAModeList; 1176 xf86MonPtr monitor; 1177 CARD16 maxBytesPerScanline; 1178 CARD32 *pal, *savedPal; 1179 int mapPhys, mapOff, mapSize; 1180 int statePage, stateSize, stateMode; 1181 CARD8 *fonts; 1182 CARD8 *state, *pstate; 1183 void *base, *VGAbase; 1184#ifdef SISDUALHEAD 1185 Bool DualHeadMode; /* TRUE if we use dual head mode */ 1186 Bool SecondHead; /* TRUE is this is the second head */ 1187 SISEntPtr entityPrivate; /* Ptr to private entity (see above) */ 1188 Bool SiSXinerama; /* Do we use Xinerama mode? */ 1189#endif 1190 SISFBLayout CurrentLayout; /* Current framebuffer layout */ 1191 UShort SiS_DDC2_Index; 1192 UShort SiS_DDC2_Data; 1193 UShort SiS_DDC2_Clk; 1194 Bool Primary; /* Display adapter is primary */ 1195 Bool VGADecodingEnabled; /* a0000 memory adress decoding is enabled */ 1196 xf86Int10InfoPtr pInt; /* Our int10 */ 1197 int oldChipset; /* Type of old chipset */ 1198 int RealVideoRam; /* 6326 can only address 4MB, but TQ can be above */ 1199 CARD32 CmdQueLenMask; /* Mask of queue length in MMIO register */ 1200 CARD32 CmdQueLenFix; /* Fix value to subtract from QueLen (530/620) */ 1201 CARD32 CmdQueMaxLen; /* (6326/5597/5598) Amount of cmds the queue can hold */ 1202 CARD32 TurboQueueLen; /* For future use */ 1203 CARD32 detectedCRT2Devices; /* detected CRT2 devices before mask-out */ 1204 Bool HostBus; /* Enable/disable 5597/5598 host bus */ 1205 Bool noInternalModes; /* Use our own default modes? */ 1206 int OptUseOEM; /* Use internal OEM data? */ 1207 int chtvlumabandwidthcvbs; /* TV settings for Chrontel TV encoder */ 1208 int chtvlumabandwidthsvideo; 1209 int chtvlumaflickerfilter; 1210 int chtvchromabandwidth; 1211 int chtvchromaflickerfilter; 1212 int chtvcvbscolor; 1213 int chtvtextenhance; 1214 int chtvcontrast; 1215 int sistvedgeenhance; /* TV settings for SiS bridges */ 1216 int sistvantiflicker; 1217 int sistvsaturation; 1218 int sistvcolcalibc; 1219 int sistvcolcalibf; 1220 int sistvcfilter; 1221 int sistvyfilter; 1222 int OptTVSOver; /* Chrontel 7005: Superoverscan */ 1223 int tvxpos, tvypos; 1224 int tvxscale, tvyscale; 1225 int SiS6326Flags; /* SiS6326 TV settings */ 1226 int sis6326enableyfilter; 1227 int sis6326yfilterstrong; 1228 int sis6326tvplug; 1229 int sis6326fscadjust; 1230 Bool sisfbfound; 1231 Bool donttrustpdc; /* Don't trust the detected PDC */ 1232 UChar sisfbpdc, sisfbpdca; 1233 UChar sisfblcda; 1234 int sisfbscalelcd; 1235 unsigned int sisfbspecialtiming; 1236 Bool sisfb_haveemi, sisfb_haveemilcd, sisfb_tvposvalid, sisfb_havelock; 1237 UChar sisfb_emi30,sisfb_emi31,sisfb_emi32,sisfb_emi33; 1238 int sisfb_tvxpos, sisfb_tvypos; 1239 int siscrt1satgain; 1240 Bool crt1satgaingiven; 1241 Bool sisfbHaveNewHeapDef; 1242 unsigned int sisfbHeapSize, sisfbVideoOffset; 1243 Bool sisfbxSTN; 1244 unsigned int sisfbDSTN, sisfbFSTN; 1245 Bool sisfbcanpost, sisfbcardposted, sisfbprimary; 1246 char sisfbdevname[16]; 1247 int EMI; 1248 int PRGB; 1249 int NoYV12; /* Disable Xv YV12 support (old series) */ 1250 UChar postVBCR32; 1251 int newFastVram; /* Replaces FastVram */ 1252 int ForceTVType, SenseYPbPr; 1253 int NonDefaultPAL, NonDefaultNTSC; 1254 unsigned int ForceYPbPrType, ForceYPbPrAR; 1255 ULong lockcalls; /* Count unlock calls for debug */ 1256 UShort tvx, tvy; /* Backup TV position registers */ 1257 UChar p2_01, p2_02, p2_1f, p2_20, p2_43, p2_42, p2_2b; /* Backup TV position registers */ 1258 UShort tvx1, tvx2, tvx3, tvy1; /* Backup TV position registers */ 1259 UChar p2_44, p2_45, p2_46; 1260 unsigned int sistvccbase; 1261 UChar p2_35, p2_36, p2_37, p2_38, p2_48, p2_49, p2_4a; 1262 UChar p2_0a, p2_2f, p2_30, p2_47; 1263 UChar scalingp1[9], scalingp4[9], scalingp2[64]; 1264 Bool ForceCursorOff; 1265 Bool HaveCustomModes; 1266 Bool IsCustom; 1267 DisplayModePtr backupmodelist; 1268 int chtvtype; 1269 Atom xvBrightness, xvContrast, xvColorKey, xvHue, xvSaturation; 1270 Atom xvAutopaintColorKey, xvSetDefaults, xvSwitchCRT; 1271 Atom xvDisableGfx, xvDisableGfxLR, xvTVXPosition, xvTVYPosition; 1272 Atom xvDisableColorkey, xvUseChromakey, xvChromaMin, xvChromaMax; 1273 Atom xvInsideChromakey, xvYUVChromakey, xvVSync; 1274#ifdef SISDEINT 1275 Atom xvdeintmeth; 1276#endif 1277 Atom xvGammaRed, xvGammaGreen, xvGammaBlue; 1278#ifdef XV_SD_DEPRECATED 1279 Atom xv_QVF, xv_QVV, xv_USD, xv_SVF, xv_QDD, xv_TAF, xv_TSA, xv_TEE, xv_GSF; 1280 Atom xv_TTE, xv_TCO, xv_TCC, xv_TCF, xv_TLF, xv_CMD, xv_CMDR, xv_CT1, xv_SGA; 1281 Atom xv_GDV, xv_GHI, xv_OVR, xv_GBI, xv_TXS, xv_TYS, xv_CFI, xv_COC, xv_COF; 1282 Atom xv_YFI, xv_GSS, xv_BRR, xv_BRG, xv_BRB, xv_PBR, xv_PBG, xv_PBB, xv_SHC; 1283 Atom xv_BRR2, xv_BRG2, xv_BRB2, xv_PBR2, xv_PBG2, xv_PBB2, xv_PMD, xv_RDT; 1284 Atom xv_GARC2,xv_GAGC2,xv_GABC2, xv_GSF2; 1285 Atom xv_BRRC2, xv_BRGC2, xv_BRBC2, xv_PBRC2, xv_PBGC2, xv_PBBC2; 1286#ifdef TWDEBUG 1287 Atom xv_STR; 1288#endif 1289 unsigned int xv_sd_result; 1290#endif /* XV_SD_DEPRECATED */ 1291 int xv_sisdirectunlocked; 1292 int SiS76xLFBSize; 1293 int SiS76xUMASize; 1294 int CRT1isoff; 1295 ULong UMAsize, LFBsize; /* For SiSCtrl extension info only */ 1296#ifdef SIS_CP 1297 SIS_CP_H 1298#endif 1299 ULong ChipFlags; 1300 ULong SiS_SD_Flags, SiS_SD2_Flags, SiS_SD3_Flags, SiS_SD4_Flags; 1301 Bool UseHWARGBCursor; 1302 int OptUseColorCursor; 1303 int OptUseColorCursorBlend; 1304 CARD32 OptColorCursorBlendThreshold; 1305 UShort cursorBufferNum; 1306 int vb; 1307 Bool restorebyset; 1308 Bool nocrt2ddcdetection; 1309 Bool forcecrt2redetection; 1310 Bool CRT1gamma, CRT1gammaGiven, CRT2gamma, XvGamma, XvGammaGiven; 1311 int XvDefCon, XvDefBri, XvDefHue, XvDefSat; 1312 Bool XvDefDisableGfx, XvDefDisableGfxLR, XvDefAdaptorBlit; 1313 Bool XvUseMemcpy; 1314 Bool XvUseChromaKey, XvDisableColorKey; 1315 Bool XvInsideChromaKey, XvYUVChromaKey; 1316 int XvChromaMin, XvChromaMax; 1317 int XvGammaRed, XvGammaGreen, XvGammaBlue; 1318 int XvGammaRedDef, XvGammaGreenDef, XvGammaBlueDef; 1319 CARD8 XvGammaRampRed[256], XvGammaRampGreen[256], XvGammaRampBlue[256]; 1320 Bool disablecolorkeycurrent; 1321 CARD32 colorKey; 1322 CARD32 MiscFlags; 1323 int UsePanelScaler, CenterLCD; 1324 float zClearVal; 1325 ULong bClrColor, dwColor; 1326 int AllowHotkey; 1327 Bool enablesisctrl; 1328 short Video_MaxWidth, Video_MaxHeight; 1329 int FSTN; 1330 Bool AddedPlasmaModes; 1331 short scrnPitch2; 1332 CARD32 CurFGCol, CurBGCol; 1333 UChar *CurMonoSrc; 1334 CARD32 *CurARGBDest; 1335 int GammaBriR, GammaBriG, GammaBriB; 1336 unsigned int CRT1MonGamma, CRT2MonGamma; 1337 unsigned int CRT1VGAMonitorGamma, CRT2LCDMonitorGamma, CRT2VGAMonitorGamma; 1338 Bool HideHWCursor; /* Custom application */ 1339 Bool HWCursorIsVisible; 1340 unsigned int HWCursorBackup[16]; 1341 int HWCursorMBufNum, HWCursorCBufNum; 1342 ULong mmioSize; 1343 Bool ROM661New; 1344 Bool HaveXGIBIOS; 1345 Bool NewCRLayout; 1346 Bool skipswitchcheck; 1347 unsigned int VBFlagsInit; 1348 DisplayModePtr currentModeLast; 1349 IOADDRESS MyPIOOffset; 1350 Bool OverruleRanges; 1351 Bool BenchMemCpy; 1352 Bool NeedCopyFastVidCpy; 1353 Bool SiSFastVidCopyDone; 1354 vidCopyFunc SiSFastVidCopy, SiSFastMemCopy; 1355 vidCopyFunc SiSFastVidCopyFrom, SiSFastMemCopyFrom; 1356 unsigned int CPUFlags; 1357#ifndef SISCHECKOSSSE 1358 Bool XvSSEMemcpy; 1359#endif 1360 char messagebuffer[64]; 1361 unsigned int VGAMapSize; /* SiSVGA stuff */ 1362 ULong VGAMapPhys; 1363 void *VGAMemBase; /* mapped */ 1364 Bool VGAPaletteEnabled; 1365 Bool VGACMapSaved; 1366 Bool CRT2SepGamma; /* CRT2 separate gamma stuff */ 1367 int *crt2cindices; 1368 LOCO *crt2gcolortable, *crt2colors; 1369 int CRT2ColNum; 1370 float GammaR2, GammaG2, GammaB2; 1371 int GammaR2i, GammaG2i, GammaB2i; 1372 int GammaBriR2, GammaBriG2, GammaBriB2; 1373 float NewGammaBriR, NewGammaBriG, NewGammaBriB; 1374 float NewGammaConR, NewGammaConG, NewGammaConB; 1375 float NewGammaBriR2, NewGammaBriG2, NewGammaBriB2; 1376 float NewGammaConR2, NewGammaConG2, NewGammaConB2; 1377 ExtensionEntry *SiSCtrlExtEntry; 1378 char devsectname[32]; 1379 Bool SCLogQuiet; 1380#ifdef SIS_NEED_MAP_IOP 1381 CARD32 IOPAddress; /* I/O port physical address */ 1382 void *IOPBase; /* I/O port linear address */ 1383#endif 1384#ifdef SISMERGED 1385 Bool MergedFB, MergedFBAuto; 1386 SiSScrn2Rel CRT2Position; 1387 char *CRT2HSync; 1388 char *CRT2VRefresh; 1389 char *MetaModes; 1390 ScrnInfoPtr CRT2pScrn; 1391 DisplayModePtr CRT1Modes; 1392 DisplayModePtr CRT1CurrentMode; 1393 int CRT1frameX0; 1394 int CRT1frameY0; 1395 int CRT1frameX1; 1396 int CRT1frameY1; 1397 Bool CheckForCRT2; 1398 Bool IsCustomCRT2; 1399 Bool HaveCustomModes2; 1400 int maxCRT1_X1, maxCRT1_X2, maxCRT1_Y1, maxCRT1_Y2; 1401 int maxCRT2_X1, maxCRT2_X2, maxCRT2_Y1, maxCRT2_Y2; 1402 int maxClone_X1, maxClone_X2, maxClone_Y1, maxClone_Y2; 1403 int MergedFBXDPI, MergedFBYDPI; 1404 int CRT1XOffs, CRT1YOffs, CRT2XOffs, CRT2YOffs; 1405 int MBXNR1XMAX, MBXNR1YMAX, MBXNR2XMAX, MBXNR2YMAX; 1406 Bool NonRect, HaveNonRect, HaveOffsRegions, MouseRestrictions; 1407 region NonRectDead, OffDead1, OffDead2; 1408#ifdef SISXINERAMA 1409 Bool UseSiSXinerama; 1410 Bool CRT2IsScrn0; 1411 ExtensionEntry *XineramaExtEntry; 1412 int SiSXineramaVX, SiSXineramaVY; 1413 Bool AtLeastOneNonClone; 1414#endif 1415#endif 1416} SISRec, *SISPtr; 1417 1418typedef struct _ModeInfoData { 1419 int mode; 1420 VbeModeInfoBlock *data; 1421 VbeCRTCInfoBlock *block; 1422} ModeInfoData; 1423 1424#define SDMPTR(x) ((SiSMergedDisplayModePtr)(x->currentMode->Private)) 1425#define CDMPTR ((SiSMergedDisplayModePtr)(pSiS->CurrentLayout.mode->Private)) 1426 1427#define BOUND(test,low,hi) \ 1428 { \ 1429 if((test) < (low)) (test) = (low); \ 1430 if((test) > (hi)) (test) = (hi); \ 1431 } 1432 1433#define REBOUND(low,hi,test) \ 1434 { \ 1435 if((test) < (low)) { \ 1436 (hi) += (test)-(low); \ 1437 (low) = (test); \ 1438 } \ 1439 if((test) > (hi)) { \ 1440 (low) += (test)-(hi); \ 1441 (hi) = (test); \ 1442 } \ 1443 } 1444 1445typedef struct _MergedDisplayModeRec { 1446 DisplayModePtr CRT1; 1447 DisplayModePtr CRT2; 1448 SiSScrn2Rel CRT2Position; 1449} SiSMergedDisplayModeRec, *SiSMergedDisplayModePtr; 1450 1451typedef struct _myhddctiming { 1452 int whichone; 1453 UChar mask; 1454 float rate; 1455} myhddctiming; 1456 1457typedef struct _myvddctiming { 1458 int whichone; 1459 UChar mask; 1460 int rate; 1461} myvddctiming; 1462 1463typedef struct _pdctable { 1464 int subsysVendor; 1465 int subsysCard; 1466 int pdc; 1467 char *vendorName; 1468 char *cardName; 1469} pdctable; 1470 1471typedef struct _chswtable { 1472 int subsysVendor; 1473 int subsysCard; 1474 char *vendorName; 1475 char *cardName; 1476} chswtable; 1477 1478typedef struct _customttable { 1479 UShort chipID; 1480 char *biosversion; 1481 char *biosdate; 1482 CARD32 bioschksum; 1483 UShort biosFootprintAddr[5]; 1484 UChar biosFootprintData[5]; 1485 UShort pcisubsysvendor; 1486 UShort pcisubsyscard; 1487 char *vendorName; 1488 char *cardName; 1489 ULong SpecialID; 1490 char *optionName; 1491} customttable; 1492 1493#ifdef SISMERGED 1494#ifdef SISXINERAMA 1495typedef struct _SiSXineramaData { 1496 int x; 1497 int y; 1498 int width; 1499 int height; 1500} SiSXineramaData; 1501#endif 1502#endif 1503 1504extern const customttable SiS_customttable[]; 1505 1506/* prototypes */ 1507 1508extern void sisSaveUnlockExtRegisterLock(SISPtr pSiS, UChar *reg1, UChar *reg2); 1509extern void sisRestoreExtRegisterLock(SISPtr pSiS, UChar reg1, UChar reg2); 1510extern void SiSOptions(ScrnInfoPtr pScrn); 1511extern const OptionInfoRec * SISAvailableOptions(int chipid, int busid); 1512extern void SiSSetup(ScrnInfoPtr pScrn); 1513extern void SISVGAPreInit(ScrnInfoPtr pScrn); 1514extern Bool SiSHWCursorInit(ScreenPtr pScreen); 1515extern Bool SiSAccelInit(ScreenPtr pScreen); 1516extern Bool SiS300AccelInit(ScreenPtr pScreen); 1517extern Bool SiS530AccelInit(ScreenPtr pScreen); 1518extern Bool SiS315AccelInit(ScreenPtr pScreen); 1519extern void SISInitVideo(ScreenPtr pScreen); 1520extern void SIS6326InitVideo(ScreenPtr pScreen); 1521extern Bool SISDGAInit(ScreenPtr pScreen); 1522 1523/* For extended mempy() support */ 1524extern unsigned int SiSGetCPUFlags(ScrnInfoPtr pScrn); 1525extern vidCopyFunc SiSVidCopyInit(ScreenPtr pScreen, vidCopyFunc *UMemCpy, Bool from); 1526extern vidCopyFunc SiSVidCopyGetDefault(void); 1527 1528extern void SiSMemCopyToVideoRam(SISPtr pSiS, UChar *to, UChar *from, int size); 1529extern void SiSMemCopyFromVideoRam(SISPtr pSiS, UChar *to, UChar *from, int size); 1530 1531extern void SiS_SetCHTVlumabandwidthcvbs(ScrnInfoPtr pScrn, int val); 1532extern void SiS_SetCHTVlumabandwidthsvideo(ScrnInfoPtr pScrn, int val); 1533extern void SiS_SetCHTVlumaflickerfilter(ScrnInfoPtr pScrn, int val); 1534extern void SiS_SetCHTVchromabandwidth(ScrnInfoPtr pScrn, int val); 1535extern void SiS_SetCHTVchromaflickerfilter(ScrnInfoPtr pScrn, int val); 1536extern void SiS_SetCHTVcvbscolor(ScrnInfoPtr pScrn, int val); 1537extern void SiS_SetCHTVtextenhance(ScrnInfoPtr pScrn, int val); 1538extern void SiS_SetCHTVcontrast(ScrnInfoPtr pScrn, int val); 1539extern void SiS_SetSISTVedgeenhance(ScrnInfoPtr pScrn, int val); 1540extern void SiS_SetSISTVantiflicker(ScrnInfoPtr pScrn, int val); 1541extern void SiS_SetSISTVsaturation(ScrnInfoPtr pScrn, int val); 1542extern void SiS_SetSISTVcfilter(ScrnInfoPtr pScrn, int val); 1543extern void SiS_SetSISTVyfilter(ScrnInfoPtr pScrn, int val); 1544extern void SiS_SetSISTVcolcalib(ScrnInfoPtr pScrn, int val, Bool coarse); 1545extern void SiS_SetSIS6326TVantiflicker(ScrnInfoPtr pScrn, int val); 1546extern void SiS_SetSIS6326TVenableyfilter(ScrnInfoPtr pScrn, int val); 1547extern void SiS_SetSIS6326TVyfilterstrong(ScrnInfoPtr pScrn, int val); 1548extern void SiS_SetTVxposoffset(ScrnInfoPtr pScrn, int val); 1549extern void SiS_SetTVyposoffset(ScrnInfoPtr pScrn, int val); 1550extern void SiS_SetTVxscale(ScrnInfoPtr pScrn, int val); 1551extern void SiS_SetTVyscale(ScrnInfoPtr pScrn, int val); 1552extern int SiS_GetCHTVlumabandwidthcvbs(ScrnInfoPtr pScrn); 1553extern int SiS_GetCHTVlumabandwidthsvideo(ScrnInfoPtr pScrn); 1554extern int SiS_GetCHTVlumaflickerfilter(ScrnInfoPtr pScrn); 1555extern int SiS_GetCHTVchromabandwidth(ScrnInfoPtr pScrn); 1556extern int SiS_GetCHTVchromaflickerfilter(ScrnInfoPtr pScrn); 1557extern int SiS_GetCHTVcvbscolor(ScrnInfoPtr pScrn); 1558extern int SiS_GetCHTVtextenhance(ScrnInfoPtr pScrn); 1559extern int SiS_GetCHTVcontrast(ScrnInfoPtr pScrn); 1560extern int SiS_GetSISTVedgeenhance(ScrnInfoPtr pScrn); 1561extern int SiS_GetSISTVantiflicker(ScrnInfoPtr pScrn); 1562extern int SiS_GetSISTVsaturation(ScrnInfoPtr pScrn); 1563extern int SiS_GetSISTVcfilter(ScrnInfoPtr pScrn); 1564extern int SiS_GetSISTVyfilter(ScrnInfoPtr pScrn); 1565extern int SiS_GetSISTVcolcalib(ScrnInfoPtr pScrn, Bool coarse); 1566extern int SiS_GetSIS6326TVantiflicker(ScrnInfoPtr pScrn); 1567extern int SiS_GetSIS6326TVenableyfilter(ScrnInfoPtr pScrn); 1568extern int SiS_GetSIS6326TVyfilterstrong(ScrnInfoPtr pScrn); 1569extern int SiS_GetTVxposoffset(ScrnInfoPtr pScrn); 1570extern int SiS_GetTVyposoffset(ScrnInfoPtr pScrn); 1571extern int SiS_GetTVxscale(ScrnInfoPtr pScrn); 1572extern int SiS_GetTVyscale(ScrnInfoPtr pScrn); 1573extern int SiS_GetSISCRT1SaturationGain(ScrnInfoPtr pScrn); 1574extern void SiS_SetSISCRT1SaturationGain(ScrnInfoPtr pScrn, int val); 1575 1576extern unsigned int sis_pci_read_device_u32(int device, int offset); 1577extern unsigned char sis_pci_read_device_u8(int device, int offset); 1578extern unsigned int sis_pci_read_host_bridge_u32(int offset); 1579extern unsigned char sis_pci_read_host_bridge_u8(int offset); 1580extern void sis_pci_write_host_bridge_u8(int offset, unsigned char value); 1581extern void sis_pci_write_host_bridge_u32(int offset, unsigned int value); 1582#endif /* _SIS_H_ */ 1583 1584 1585 1586