1*5e0f8ad0SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 21da177e4SLinus Torvalds /* 3544393feSThomas Winischhofer * SiS 300/540/630[S]/730[S], 4544393feSThomas Winischhofer * SiS 315[E|PRO]/550/[M]65x/[M]661[F|M]X/740/[M]741[GX]/330/[M]76x[GX], 5544393feSThomas Winischhofer * XGI V3XT/V5/V8, Z7 61da177e4SLinus Torvalds * frame buffer driver for Linux kernels >=2.4.14 and >=2.6.3 71da177e4SLinus Torvalds * 8544393feSThomas Winischhofer * Copyright (C) 2001-2005 Thomas Winischhofer, Vienna, Austria. 91da177e4SLinus Torvalds */ 101da177e4SLinus Torvalds 11544393feSThomas Winischhofer #ifndef _SIS_H_ 12544393feSThomas Winischhofer #define _SIS_H_ 131da177e4SLinus Torvalds 141da177e4SLinus Torvalds #include <video/sisfb.h> 151da177e4SLinus Torvalds 161da177e4SLinus Torvalds #include "vgatypes.h" 171da177e4SLinus Torvalds #include "vstruct.h" 181da177e4SLinus Torvalds 191da177e4SLinus Torvalds #define VER_MAJOR 1 20544393feSThomas Winischhofer #define VER_MINOR 8 21544393feSThomas Winischhofer #define VER_LEVEL 9 221da177e4SLinus Torvalds 231da177e4SLinus Torvalds #include <linux/spinlock.h> 240959f0caSAdrian Bunk 251da177e4SLinus Torvalds #ifdef CONFIG_COMPAT 26544393feSThomas Winischhofer #define SIS_NEW_CONFIG_COMPAT 27544393feSThomas Winischhofer #endif /* CONFIG_COMPAT */ 280959f0caSAdrian Bunk 291da177e4SLinus Torvalds #undef SISFBDEBUG 301da177e4SLinus Torvalds 311da177e4SLinus Torvalds #ifdef SISFBDEBUG 325ae12170SHarvey Harrison #define DPRINTK(fmt, args...) printk(KERN_DEBUG "%s: " fmt, __func__ , ## args) 331da177e4SLinus Torvalds #define TWDEBUG(x) printk(KERN_INFO x "\n"); 341da177e4SLinus Torvalds #else 351da177e4SLinus Torvalds #define DPRINTK(fmt, args...) 361da177e4SLinus Torvalds #define TWDEBUG(x) 371da177e4SLinus Torvalds #endif 381da177e4SLinus Torvalds 391da177e4SLinus Torvalds #define SISFAIL(x) do { printk(x "\n"); return -EINVAL; } while(0) 401da177e4SLinus Torvalds 411da177e4SLinus Torvalds /* To be included in pci_ids.h */ 421da177e4SLinus Torvalds #ifndef PCI_DEVICE_ID_SI_650_VGA 431da177e4SLinus Torvalds #define PCI_DEVICE_ID_SI_650_VGA 0x6325 441da177e4SLinus Torvalds #endif 451da177e4SLinus Torvalds #ifndef PCI_DEVICE_ID_SI_650 461da177e4SLinus Torvalds #define PCI_DEVICE_ID_SI_650 0x0650 471da177e4SLinus Torvalds #endif 481da177e4SLinus Torvalds #ifndef PCI_DEVICE_ID_SI_651 491da177e4SLinus Torvalds #define PCI_DEVICE_ID_SI_651 0x0651 501da177e4SLinus Torvalds #endif 511da177e4SLinus Torvalds #ifndef PCI_DEVICE_ID_SI_740 521da177e4SLinus Torvalds #define PCI_DEVICE_ID_SI_740 0x0740 531da177e4SLinus Torvalds #endif 541da177e4SLinus Torvalds #ifndef PCI_DEVICE_ID_SI_330 551da177e4SLinus Torvalds #define PCI_DEVICE_ID_SI_330 0x0330 561da177e4SLinus Torvalds #endif 571da177e4SLinus Torvalds #ifndef PCI_DEVICE_ID_SI_660_VGA 581da177e4SLinus Torvalds #define PCI_DEVICE_ID_SI_660_VGA 0x6330 591da177e4SLinus Torvalds #endif 601da177e4SLinus Torvalds #ifndef PCI_DEVICE_ID_SI_661 611da177e4SLinus Torvalds #define PCI_DEVICE_ID_SI_661 0x0661 621da177e4SLinus Torvalds #endif 631da177e4SLinus Torvalds #ifndef PCI_DEVICE_ID_SI_741 641da177e4SLinus Torvalds #define PCI_DEVICE_ID_SI_741 0x0741 651da177e4SLinus Torvalds #endif 661da177e4SLinus Torvalds #ifndef PCI_DEVICE_ID_SI_660 671da177e4SLinus Torvalds #define PCI_DEVICE_ID_SI_660 0x0660 681da177e4SLinus Torvalds #endif 691da177e4SLinus Torvalds #ifndef PCI_DEVICE_ID_SI_760 701da177e4SLinus Torvalds #define PCI_DEVICE_ID_SI_760 0x0760 711da177e4SLinus Torvalds #endif 72544393feSThomas Winischhofer #ifndef PCI_DEVICE_ID_SI_761 73544393feSThomas Winischhofer #define PCI_DEVICE_ID_SI_761 0x0761 74544393feSThomas Winischhofer #endif 75544393feSThomas Winischhofer 76544393feSThomas Winischhofer #ifndef PCI_VENDOR_ID_XGI 77544393feSThomas Winischhofer #define PCI_VENDOR_ID_XGI 0x18ca 78544393feSThomas Winischhofer #endif 79544393feSThomas Winischhofer 80544393feSThomas Winischhofer #ifndef PCI_DEVICE_ID_XGI_20 81544393feSThomas Winischhofer #define PCI_DEVICE_ID_XGI_20 0x0020 82544393feSThomas Winischhofer #endif 83544393feSThomas Winischhofer 84544393feSThomas Winischhofer #ifndef PCI_DEVICE_ID_XGI_40 85544393feSThomas Winischhofer #define PCI_DEVICE_ID_XGI_40 0x0040 86544393feSThomas Winischhofer #endif 871da177e4SLinus Torvalds 881da177e4SLinus Torvalds /* To be included in fb.h */ 891da177e4SLinus Torvalds #ifndef FB_ACCEL_SIS_GLAMOUR_2 901da177e4SLinus Torvalds #define FB_ACCEL_SIS_GLAMOUR_2 40 /* SiS 315, 65x, 740, 661, 741 */ 911da177e4SLinus Torvalds #endif 921da177e4SLinus Torvalds #ifndef FB_ACCEL_SIS_XABRE 93544393feSThomas Winischhofer #define FB_ACCEL_SIS_XABRE 41 /* SiS 330 ("Xabre"), 76x */ 941da177e4SLinus Torvalds #endif 95544393feSThomas Winischhofer #ifndef FB_ACCEL_XGI_VOLARI_V 96544393feSThomas Winischhofer #define FB_ACCEL_XGI_VOLARI_V 47 /* XGI Volari Vx (V3XT, V5, V8) */ 97544393feSThomas Winischhofer #endif 98544393feSThomas Winischhofer #ifndef FB_ACCEL_XGI_VOLARI_Z 99544393feSThomas Winischhofer #define FB_ACCEL_XGI_VOLARI_Z 48 /* XGI Volari Z7 */ 100544393feSThomas Winischhofer #endif 1011da177e4SLinus Torvalds 1021da177e4SLinus Torvalds /* ivideo->caps */ 1031da177e4SLinus Torvalds #define HW_CURSOR_CAP 0x80 1041da177e4SLinus Torvalds #define TURBO_QUEUE_CAP 0x40 1051da177e4SLinus Torvalds #define AGP_CMD_QUEUE_CAP 0x20 1061da177e4SLinus Torvalds #define VM_CMD_QUEUE_CAP 0x10 1071da177e4SLinus Torvalds #define MMIO_CMD_QUEUE_CAP 0x08 1081da177e4SLinus Torvalds 1091da177e4SLinus Torvalds /* For 300 series */ 110544393feSThomas Winischhofer #define TURBO_QUEUE_AREA_SIZE (512 * 1024) /* 512K */ 111544393feSThomas Winischhofer #define HW_CURSOR_AREA_SIZE_300 4096 /* 4K */ 1121da177e4SLinus Torvalds 1131da177e4SLinus Torvalds /* For 315/Xabre series */ 114544393feSThomas Winischhofer #define COMMAND_QUEUE_AREA_SIZE (512 * 1024) /* 512K */ 115544393feSThomas Winischhofer #define COMMAND_QUEUE_AREA_SIZE_Z7 (128 * 1024) /* 128k for XGI Z7 */ 116544393feSThomas Winischhofer #define HW_CURSOR_AREA_SIZE_315 16384 /* 16K */ 1171da177e4SLinus Torvalds #define COMMAND_QUEUE_THRESHOLD 0x1F 1181da177e4SLinus Torvalds 1191da177e4SLinus Torvalds #define SIS_OH_ALLOC_SIZE 4000 1201da177e4SLinus Torvalds #define SENTINEL 0x7fffffff 1211da177e4SLinus Torvalds 1221da177e4SLinus Torvalds #define SEQ_ADR 0x14 1231da177e4SLinus Torvalds #define SEQ_DATA 0x15 1241da177e4SLinus Torvalds #define DAC_ADR 0x18 1251da177e4SLinus Torvalds #define DAC_DATA 0x19 1261da177e4SLinus Torvalds #define CRTC_ADR 0x24 1271da177e4SLinus Torvalds #define CRTC_DATA 0x25 1281da177e4SLinus Torvalds #define DAC2_ADR (0x16-0x30) 1291da177e4SLinus Torvalds #define DAC2_DATA (0x17-0x30) 1301da177e4SLinus Torvalds #define VB_PART1_ADR (0x04-0x30) 1311da177e4SLinus Torvalds #define VB_PART1_DATA (0x05-0x30) 1321da177e4SLinus Torvalds #define VB_PART2_ADR (0x10-0x30) 1331da177e4SLinus Torvalds #define VB_PART2_DATA (0x11-0x30) 1341da177e4SLinus Torvalds #define VB_PART3_ADR (0x12-0x30) 1351da177e4SLinus Torvalds #define VB_PART3_DATA (0x13-0x30) 1361da177e4SLinus Torvalds #define VB_PART4_ADR (0x14-0x30) 1371da177e4SLinus Torvalds #define VB_PART4_DATA (0x15-0x30) 1381da177e4SLinus Torvalds 1391da177e4SLinus Torvalds #define SISSR ivideo->SiS_Pr.SiS_P3c4 1401da177e4SLinus Torvalds #define SISCR ivideo->SiS_Pr.SiS_P3d4 1411da177e4SLinus Torvalds #define SISDACA ivideo->SiS_Pr.SiS_P3c8 1421da177e4SLinus Torvalds #define SISDACD ivideo->SiS_Pr.SiS_P3c9 1431da177e4SLinus Torvalds #define SISPART1 ivideo->SiS_Pr.SiS_Part1Port 1441da177e4SLinus Torvalds #define SISPART2 ivideo->SiS_Pr.SiS_Part2Port 1451da177e4SLinus Torvalds #define SISPART3 ivideo->SiS_Pr.SiS_Part3Port 1461da177e4SLinus Torvalds #define SISPART4 ivideo->SiS_Pr.SiS_Part4Port 1471da177e4SLinus Torvalds #define SISPART5 ivideo->SiS_Pr.SiS_Part5Port 1481da177e4SLinus Torvalds #define SISDAC2A SISPART5 1491da177e4SLinus Torvalds #define SISDAC2D (SISPART5 + 1) 1501da177e4SLinus Torvalds #define SISMISCR (ivideo->SiS_Pr.RelIO + 0x1c) 1511da177e4SLinus Torvalds #define SISMISCW ivideo->SiS_Pr.SiS_P3c2 1521da177e4SLinus Torvalds #define SISINPSTAT (ivideo->SiS_Pr.RelIO + 0x2a) 1531da177e4SLinus Torvalds #define SISPEL ivideo->SiS_Pr.SiS_P3c6 154544393feSThomas Winischhofer #define SISVGAENABLE (ivideo->SiS_Pr.RelIO + 0x13) 155544393feSThomas Winischhofer #define SISVID (ivideo->SiS_Pr.RelIO + 0x02 - 0x30) 156544393feSThomas Winischhofer #define SISCAP (ivideo->SiS_Pr.RelIO + 0x00 - 0x30) 1571da177e4SLinus Torvalds 1581da177e4SLinus Torvalds #define IND_SIS_PASSWORD 0x05 /* SRs */ 1591da177e4SLinus Torvalds #define IND_SIS_COLOR_MODE 0x06 1601da177e4SLinus Torvalds #define IND_SIS_RAMDAC_CONTROL 0x07 1611da177e4SLinus Torvalds #define IND_SIS_DRAM_SIZE 0x14 1621da177e4SLinus Torvalds #define IND_SIS_MODULE_ENABLE 0x1E 1631da177e4SLinus Torvalds #define IND_SIS_PCI_ADDRESS_SET 0x20 1641da177e4SLinus Torvalds #define IND_SIS_TURBOQUEUE_ADR 0x26 1651da177e4SLinus Torvalds #define IND_SIS_TURBOQUEUE_SET 0x27 1661da177e4SLinus Torvalds #define IND_SIS_POWER_ON_TRAP 0x38 1671da177e4SLinus Torvalds #define IND_SIS_POWER_ON_TRAP2 0x39 1681da177e4SLinus Torvalds #define IND_SIS_CMDQUEUE_SET 0x26 1691da177e4SLinus Torvalds #define IND_SIS_CMDQUEUE_THRESHOLD 0x27 1701da177e4SLinus Torvalds 1711da177e4SLinus Torvalds #define IND_SIS_AGP_IO_PAD 0x48 1721da177e4SLinus Torvalds 1731da177e4SLinus Torvalds #define SIS_CRT2_WENABLE_300 0x24 /* Part1 */ 1741da177e4SLinus Torvalds #define SIS_CRT2_WENABLE_315 0x2F 1751da177e4SLinus Torvalds 1761da177e4SLinus Torvalds #define SIS_PASSWORD 0x86 /* SR05 */ 1771da177e4SLinus Torvalds 1781da177e4SLinus Torvalds #define SIS_INTERLACED_MODE 0x20 /* SR06 */ 1791da177e4SLinus Torvalds #define SIS_8BPP_COLOR_MODE 0x0 1801da177e4SLinus Torvalds #define SIS_15BPP_COLOR_MODE 0x1 1811da177e4SLinus Torvalds #define SIS_16BPP_COLOR_MODE 0x2 1821da177e4SLinus Torvalds #define SIS_32BPP_COLOR_MODE 0x4 1831da177e4SLinus Torvalds 1841da177e4SLinus Torvalds #define SIS_ENABLE_2D 0x40 /* SR1E */ 1851da177e4SLinus Torvalds 1861da177e4SLinus Torvalds #define SIS_MEM_MAP_IO_ENABLE 0x01 /* SR20 */ 1871da177e4SLinus Torvalds #define SIS_PCI_ADDR_ENABLE 0x80 1881da177e4SLinus Torvalds 189544393feSThomas Winischhofer #define SIS_AGP_CMDQUEUE_ENABLE 0x80 /* 315/330/340 series SR26 */ 1901da177e4SLinus Torvalds #define SIS_VRAM_CMDQUEUE_ENABLE 0x40 1911da177e4SLinus Torvalds #define SIS_MMIO_CMD_ENABLE 0x20 1921da177e4SLinus Torvalds #define SIS_CMD_QUEUE_SIZE_512k 0x00 1931da177e4SLinus Torvalds #define SIS_CMD_QUEUE_SIZE_1M 0x04 1941da177e4SLinus Torvalds #define SIS_CMD_QUEUE_SIZE_2M 0x08 1951da177e4SLinus Torvalds #define SIS_CMD_QUEUE_SIZE_4M 0x0C 1961da177e4SLinus Torvalds #define SIS_CMD_QUEUE_RESET 0x01 1971da177e4SLinus Torvalds #define SIS_CMD_AUTO_CORR 0x02 1981da177e4SLinus Torvalds 199544393feSThomas Winischhofer #define SIS_CMD_QUEUE_SIZE_Z7_64k 0x00 /* XGI Z7 */ 200544393feSThomas Winischhofer #define SIS_CMD_QUEUE_SIZE_Z7_128k 0x04 201544393feSThomas Winischhofer 2021da177e4SLinus Torvalds #define SIS_SIMULTANEOUS_VIEW_ENABLE 0x01 /* CR30 */ 2031da177e4SLinus Torvalds #define SIS_MODE_SELECT_CRT2 0x02 2041da177e4SLinus Torvalds #define SIS_VB_OUTPUT_COMPOSITE 0x04 2051da177e4SLinus Torvalds #define SIS_VB_OUTPUT_SVIDEO 0x08 2061da177e4SLinus Torvalds #define SIS_VB_OUTPUT_SCART 0x10 2071da177e4SLinus Torvalds #define SIS_VB_OUTPUT_LCD 0x20 2081da177e4SLinus Torvalds #define SIS_VB_OUTPUT_CRT2 0x40 2091da177e4SLinus Torvalds #define SIS_VB_OUTPUT_HIVISION 0x80 2101da177e4SLinus Torvalds 2111da177e4SLinus Torvalds #define SIS_VB_OUTPUT_DISABLE 0x20 /* CR31 */ 2121da177e4SLinus Torvalds #define SIS_DRIVER_MODE 0x40 2131da177e4SLinus Torvalds 2141da177e4SLinus Torvalds #define SIS_VB_COMPOSITE 0x01 /* CR32 */ 2151da177e4SLinus Torvalds #define SIS_VB_SVIDEO 0x02 2161da177e4SLinus Torvalds #define SIS_VB_SCART 0x04 2171da177e4SLinus Torvalds #define SIS_VB_LCD 0x08 2181da177e4SLinus Torvalds #define SIS_VB_CRT2 0x10 2191da177e4SLinus Torvalds #define SIS_CRT1 0x20 2201da177e4SLinus Torvalds #define SIS_VB_HIVISION 0x40 2211da177e4SLinus Torvalds #define SIS_VB_YPBPR 0x80 2221da177e4SLinus Torvalds #define SIS_VB_TV (SIS_VB_COMPOSITE | SIS_VB_SVIDEO | \ 2231da177e4SLinus Torvalds SIS_VB_SCART | SIS_VB_HIVISION | SIS_VB_YPBPR) 2241da177e4SLinus Torvalds 2251da177e4SLinus Torvalds #define SIS_EXTERNAL_CHIP_MASK 0x0E /* CR37 (< SiS 660) */ 2261da177e4SLinus Torvalds #define SIS_EXTERNAL_CHIP_SIS301 0x01 /* in CR37 << 1 ! */ 2271da177e4SLinus Torvalds #define SIS_EXTERNAL_CHIP_LVDS 0x02 2281da177e4SLinus Torvalds #define SIS_EXTERNAL_CHIP_TRUMPION 0x03 2291da177e4SLinus Torvalds #define SIS_EXTERNAL_CHIP_LVDS_CHRONTEL 0x04 2301da177e4SLinus Torvalds #define SIS_EXTERNAL_CHIP_CHRONTEL 0x05 2311da177e4SLinus Torvalds #define SIS310_EXTERNAL_CHIP_LVDS 0x02 2321da177e4SLinus Torvalds #define SIS310_EXTERNAL_CHIP_LVDS_CHRONTEL 0x03 2331da177e4SLinus Torvalds 2341da177e4SLinus Torvalds #define SIS_AGP_2X 0x20 /* CR48 */ 2351da177e4SLinus Torvalds 236544393feSThomas Winischhofer /* vbflags, private entries (others in sisfb.h) */ 237544393feSThomas Winischhofer #define VB_CONEXANT 0x00000800 /* 661 series only */ 238544393feSThomas Winischhofer #define VB_TRUMPION VB_CONEXANT /* 300 series only */ 239544393feSThomas Winischhofer #define VB_302ELV 0x00004000 240544393feSThomas Winischhofer #define VB_301 0x00100000 /* Video bridge type */ 241544393feSThomas Winischhofer #define VB_301B 0x00200000 242544393feSThomas Winischhofer #define VB_302B 0x00400000 243544393feSThomas Winischhofer #define VB_30xBDH 0x00800000 /* 30xB DH version (w/o LCD support) */ 244544393feSThomas Winischhofer #define VB_LVDS 0x01000000 245544393feSThomas Winischhofer #define VB_CHRONTEL 0x02000000 246544393feSThomas Winischhofer #define VB_301LV 0x04000000 247544393feSThomas Winischhofer #define VB_302LV 0x08000000 248544393feSThomas Winischhofer #define VB_301C 0x10000000 249544393feSThomas Winischhofer 250544393feSThomas Winischhofer #define VB_SISBRIDGE (VB_301|VB_301B|VB_301C|VB_302B|VB_301LV|VB_302LV|VB_302ELV) 251544393feSThomas Winischhofer #define VB_VIDEOBRIDGE (VB_SISBRIDGE | VB_LVDS | VB_CHRONTEL | VB_CONEXANT) 252544393feSThomas Winischhofer 253544393feSThomas Winischhofer /* vbflags2 (static stuff only!) */ 254544393feSThomas Winischhofer #define VB2_SISUMC 0x00000001 255544393feSThomas Winischhofer #define VB2_301 0x00000002 /* Video bridge type */ 256544393feSThomas Winischhofer #define VB2_301B 0x00000004 257544393feSThomas Winischhofer #define VB2_301C 0x00000008 258544393feSThomas Winischhofer #define VB2_307T 0x00000010 259544393feSThomas Winischhofer #define VB2_302B 0x00000800 260544393feSThomas Winischhofer #define VB2_301LV 0x00001000 261544393feSThomas Winischhofer #define VB2_302LV 0x00002000 262544393feSThomas Winischhofer #define VB2_302ELV 0x00004000 263544393feSThomas Winischhofer #define VB2_307LV 0x00008000 264544393feSThomas Winischhofer #define VB2_30xBDH 0x08000000 /* 30xB DH version (w/o LCD support) */ 265544393feSThomas Winischhofer #define VB2_CONEXANT 0x10000000 266544393feSThomas Winischhofer #define VB2_TRUMPION 0x20000000 267544393feSThomas Winischhofer #define VB2_LVDS 0x40000000 268544393feSThomas Winischhofer #define VB2_CHRONTEL 0x80000000 269544393feSThomas Winischhofer 270544393feSThomas Winischhofer #define VB2_SISLVDSBRIDGE (VB2_301LV | VB2_302LV | VB2_302ELV | VB2_307LV) 271544393feSThomas Winischhofer #define VB2_SISTMDSBRIDGE (VB2_301 | VB2_301B | VB2_301C | VB2_302B | VB2_307T) 272544393feSThomas Winischhofer #define VB2_SISBRIDGE (VB2_SISLVDSBRIDGE | VB2_SISTMDSBRIDGE) 273544393feSThomas Winischhofer 274544393feSThomas Winischhofer #define VB2_SISTMDSLCDABRIDGE (VB2_301C | VB2_307T) 275544393feSThomas Winischhofer #define VB2_SISLCDABRIDGE (VB2_SISTMDSLCDABRIDGE | VB2_301LV | VB2_302LV | VB2_302ELV | VB2_307LV) 276544393feSThomas Winischhofer 277544393feSThomas Winischhofer #define VB2_SISHIVISIONBRIDGE (VB2_301 | VB2_301B | VB2_302B) 278544393feSThomas Winischhofer #define VB2_SISYPBPRBRIDGE (VB2_301C | VB2_307T | VB2_SISLVDSBRIDGE) 279544393feSThomas Winischhofer #define VB2_SISYPBPRARBRIDGE (VB2_301C | VB2_307T | VB2_307LV) 280544393feSThomas Winischhofer #define VB2_SISTAP4SCALER (VB2_301C | VB2_307T | VB2_302ELV | VB2_307LV) 281544393feSThomas Winischhofer #define VB2_SISTVBRIDGE (VB2_SISHIVISIONBRIDGE | VB2_SISYPBPRBRIDGE) 282544393feSThomas Winischhofer 283544393feSThomas Winischhofer #define VB2_SISVGA2BRIDGE (VB2_301 | VB2_301B | VB2_301C | VB2_302B | VB2_307T) 284544393feSThomas Winischhofer 285544393feSThomas Winischhofer #define VB2_VIDEOBRIDGE (VB2_SISBRIDGE | VB2_LVDS | VB2_CHRONTEL | VB2_CONEXANT) 286544393feSThomas Winischhofer 287544393feSThomas Winischhofer #define VB2_30xB (VB2_301B | VB2_301C | VB2_302B | VB2_307T) 288544393feSThomas Winischhofer #define VB2_30xBLV (VB2_30xB | VB2_SISLVDSBRIDGE) 289544393feSThomas Winischhofer #define VB2_30xC (VB2_301C | VB2_307T) 290544393feSThomas Winischhofer #define VB2_30xCLV (VB2_301C | VB2_307T | VB2_302ELV| VB2_307LV) 291544393feSThomas Winischhofer #define VB2_SISEMIBRIDGE (VB2_302LV | VB2_302ELV | VB2_307LV) 292544393feSThomas Winischhofer #define VB2_LCD162MHZBRIDGE (VB2_301C | VB2_307T) 293544393feSThomas Winischhofer #define VB2_LCDOVER1280BRIDGE (VB2_301C | VB2_307T | VB2_302LV | VB2_302ELV | VB2_307LV) 294544393feSThomas Winischhofer #define VB2_LCDOVER1600BRIDGE (VB2_307T | VB2_307LV) 295544393feSThomas Winischhofer #define VB2_RAMDAC202MHZBRIDGE (VB2_301C | VB2_307T) 2961da177e4SLinus Torvalds 29711477677SAaro Koskinen /* I/O port access functions */ 298e68046b7SAaro Koskinen 299f48b9644SAaro Koskinen void SiS_SetReg(SISIOADDRESS, u8, u8); 300f48b9644SAaro Koskinen void SiS_SetRegByte(SISIOADDRESS, u8); 301f48b9644SAaro Koskinen void SiS_SetRegShort(SISIOADDRESS, u16); 302f48b9644SAaro Koskinen void SiS_SetRegLong(SISIOADDRESS, u32); 303f48b9644SAaro Koskinen void SiS_SetRegANDOR(SISIOADDRESS, u8, u8, u8); 304f48b9644SAaro Koskinen void SiS_SetRegAND(SISIOADDRESS, u8, u8); 305f48b9644SAaro Koskinen void SiS_SetRegOR(SISIOADDRESS, u8, u8); 306f48b9644SAaro Koskinen u8 SiS_GetReg(SISIOADDRESS, u8); 307f48b9644SAaro Koskinen u8 SiS_GetRegByte(SISIOADDRESS); 308f48b9644SAaro Koskinen u16 SiS_GetRegShort(SISIOADDRESS); 309f48b9644SAaro Koskinen u32 SiS_GetRegLong(SISIOADDRESS); 310e68046b7SAaro Koskinen 3115908986eSArnd Bergmann /* Chrontel TV, DDC and DPMS functions */ 3125908986eSArnd Bergmann /* from init.c */ 3135908986eSArnd Bergmann bool SiSInitPtr(struct SiS_Private *SiS_Pr); 3145908986eSArnd Bergmann unsigned short SiS_GetModeID_LCD(int VGAEngine, unsigned int VBFlags, int HDisplay, 3155908986eSArnd Bergmann int VDisplay, int Depth, bool FSTN, 3165908986eSArnd Bergmann unsigned short CustomT, int LCDwith, int LCDheight, 3175908986eSArnd Bergmann unsigned int VBFlags2); 3185908986eSArnd Bergmann unsigned short SiS_GetModeID_TV(int VGAEngine, unsigned int VBFlags, int HDisplay, 3195908986eSArnd Bergmann int VDisplay, int Depth, unsigned int VBFlags2); 3205908986eSArnd Bergmann unsigned short SiS_GetModeID_VGA2(int VGAEngine, unsigned int VBFlags, int HDisplay, 3215908986eSArnd Bergmann int VDisplay, int Depth, unsigned int VBFlags2); 3225908986eSArnd Bergmann 3235908986eSArnd Bergmann void SiS_DisplayOn(struct SiS_Private *SiS_Pr); 3245908986eSArnd Bergmann void SiS_DisplayOff(struct SiS_Private *SiS_Pr); 3255908986eSArnd Bergmann void SiSRegInit(struct SiS_Private *SiS_Pr, SISIOADDRESS BaseAddr); 3265908986eSArnd Bergmann void SiS_SetEnableDstn(struct SiS_Private *SiS_Pr, int enable); 3275908986eSArnd Bergmann void SiS_SetEnableFstn(struct SiS_Private *SiS_Pr, int enable); 3285908986eSArnd Bergmann unsigned short SiS_GetModeFlag(struct SiS_Private *SiS_Pr, unsigned short ModeNo, 3295908986eSArnd Bergmann unsigned short ModeIdIndex); 3305908986eSArnd Bergmann bool SiSDetermineROMLayout661(struct SiS_Private *SiS_Pr); 3315908986eSArnd Bergmann 3325908986eSArnd Bergmann bool SiS_SearchModeID(struct SiS_Private *SiS_Pr, unsigned short *ModeNo, 3335908986eSArnd Bergmann unsigned short *ModeIdIndex); 3345908986eSArnd Bergmann unsigned short SiS_GetModePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, 3355908986eSArnd Bergmann unsigned short ModeIdIndex); 3365908986eSArnd Bergmann unsigned short SiS_GetRefCRTVCLK(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide); 3375908986eSArnd Bergmann unsigned short SiS_GetRefCRT1CRTC(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide); 3385908986eSArnd Bergmann unsigned short SiS_GetColorDepth(struct SiS_Private *SiS_Pr, unsigned short ModeNo, 3395908986eSArnd Bergmann unsigned short ModeIdIndex); 3405908986eSArnd Bergmann unsigned short SiS_GetOffset(struct SiS_Private *SiS_Pr,unsigned short ModeNo, 3415908986eSArnd Bergmann unsigned short ModeIdIndex, unsigned short RRTI); 3425908986eSArnd Bergmann #ifdef CONFIG_FB_SIS_300 3435908986eSArnd Bergmann void SiS_GetFIFOThresholdIndex300(struct SiS_Private *SiS_Pr, unsigned short *idx1, 3445908986eSArnd Bergmann unsigned short *idx2); 3455908986eSArnd Bergmann unsigned short SiS_GetFIFOThresholdB300(unsigned short idx1, unsigned short idx2); 3465908986eSArnd Bergmann unsigned short SiS_GetLatencyFactor630(struct SiS_Private *SiS_Pr, unsigned short index); 3475908986eSArnd Bergmann #endif 3485908986eSArnd Bergmann void SiS_LoadDAC(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex); 3495908986eSArnd Bergmann bool SiSSetMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo); 3505908986eSArnd Bergmann void SiS_CalcCRRegisters(struct SiS_Private *SiS_Pr, int depth); 3515908986eSArnd Bergmann void SiS_CalcLCDACRT1Timing(struct SiS_Private *SiS_Pr, unsigned short ModeNo, 3525908986eSArnd Bergmann unsigned short ModeIdIndex); 3535908986eSArnd Bergmann void SiS_Generic_ConvertCRData(struct SiS_Private *SiS_Pr, unsigned char *crdata, int xres, 3545908986eSArnd Bergmann int yres, struct fb_var_screeninfo *var, bool writeres); 3555908986eSArnd Bergmann 3565908986eSArnd Bergmann /* From init301.c: */ 3575908986eSArnd Bergmann extern void SiS_GetVBInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo, 3585908986eSArnd Bergmann unsigned short ModeIdIndex, int chkcrt2mode); 3595908986eSArnd Bergmann extern void SiS_GetLCDResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo, 3605908986eSArnd Bergmann unsigned short ModeIdIndex); 3615908986eSArnd Bergmann extern void SiS_SetYPbPr(struct SiS_Private *SiS_Pr); 3625908986eSArnd Bergmann extern void SiS_SetTVMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo, 3635908986eSArnd Bergmann unsigned short ModeIdIndex); 3645908986eSArnd Bergmann extern void SiS_UnLockCRT2(struct SiS_Private *SiS_Pr); 3655908986eSArnd Bergmann extern void SiS_DisableBridge(struct SiS_Private *); 3665908986eSArnd Bergmann extern bool SiS_SetCRT2Group(struct SiS_Private *, unsigned short); 3675908986eSArnd Bergmann extern unsigned short SiS_GetRatePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, 3685908986eSArnd Bergmann unsigned short ModeIdIndex); 3695908986eSArnd Bergmann extern void SiS_WaitRetrace1(struct SiS_Private *SiS_Pr); 3705908986eSArnd Bergmann extern unsigned short SiS_GetResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo, 3715908986eSArnd Bergmann unsigned short ModeIdIndex); 3725908986eSArnd Bergmann extern unsigned short SiS_GetCH700x(struct SiS_Private *SiS_Pr, unsigned short tempax); 3735908986eSArnd Bergmann extern unsigned short SiS_GetVCLK2Ptr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, 3745908986eSArnd Bergmann unsigned short ModeIdIndex, unsigned short RRTI); 3755908986eSArnd Bergmann extern bool SiS_IsVAMode(struct SiS_Private *); 3765908986eSArnd Bergmann extern bool SiS_IsDualEdge(struct SiS_Private *); 3775908986eSArnd Bergmann 3785908986eSArnd Bergmann #ifdef CONFIG_FB_SIS_300 3795908986eSArnd Bergmann extern unsigned int sisfb_read_nbridge_pci_dword(struct SiS_Private *SiS_Pr, int reg); 3805908986eSArnd Bergmann extern void sisfb_write_nbridge_pci_dword(struct SiS_Private *SiS_Pr, int reg, 3815908986eSArnd Bergmann unsigned int val); 3825908986eSArnd Bergmann #endif 3835908986eSArnd Bergmann #ifdef CONFIG_FB_SIS_315 3845908986eSArnd Bergmann extern void sisfb_write_nbridge_pci_byte(struct SiS_Private *SiS_Pr, int reg, 3855908986eSArnd Bergmann unsigned char val); 3865908986eSArnd Bergmann extern unsigned int sisfb_read_mio_pci_word(struct SiS_Private *SiS_Pr, int reg); 3875908986eSArnd Bergmann #endif 3885908986eSArnd Bergmann 3895908986eSArnd Bergmann 3901da177e4SLinus Torvalds /* MMIO access macros */ 3911da177e4SLinus Torvalds #define MMIO_IN8(base, offset) readb((base+offset)) 3921da177e4SLinus Torvalds #define MMIO_IN16(base, offset) readw((base+offset)) 3931da177e4SLinus Torvalds #define MMIO_IN32(base, offset) readl((base+offset)) 3941da177e4SLinus Torvalds 3951da177e4SLinus Torvalds #define MMIO_OUT8(base, offset, val) writeb(((u8)(val)), (base+offset)) 3961da177e4SLinus Torvalds #define MMIO_OUT16(base, offset, val) writew(((u16)(val)), (base+offset)) 3971da177e4SLinus Torvalds #define MMIO_OUT32(base, offset, val) writel(((u32)(val)), (base+offset)) 3981da177e4SLinus Torvalds 3991da177e4SLinus Torvalds /* Queue control MMIO registers */ 4001da177e4SLinus Torvalds #define Q_BASE_ADDR 0x85C0 /* Base address of software queue */ 4011da177e4SLinus Torvalds #define Q_WRITE_PTR 0x85C4 /* Current write pointer */ 4021da177e4SLinus Torvalds #define Q_READ_PTR 0x85C8 /* Current read pointer */ 4031da177e4SLinus Torvalds #define Q_STATUS 0x85CC /* queue status */ 4041da177e4SLinus Torvalds 4051da177e4SLinus Torvalds #define MMIO_QUEUE_PHYBASE Q_BASE_ADDR 4061da177e4SLinus Torvalds #define MMIO_QUEUE_WRITEPORT Q_WRITE_PTR 4071da177e4SLinus Torvalds #define MMIO_QUEUE_READPORT Q_READ_PTR 4081da177e4SLinus Torvalds 4091da177e4SLinus Torvalds #ifndef FB_BLANK_UNBLANK 4101da177e4SLinus Torvalds #define FB_BLANK_UNBLANK 0 4111da177e4SLinus Torvalds #endif 4121da177e4SLinus Torvalds #ifndef FB_BLANK_NORMAL 4131da177e4SLinus Torvalds #define FB_BLANK_NORMAL 1 4141da177e4SLinus Torvalds #endif 4151da177e4SLinus Torvalds #ifndef FB_BLANK_VSYNC_SUSPEND 4161da177e4SLinus Torvalds #define FB_BLANK_VSYNC_SUSPEND 2 4171da177e4SLinus Torvalds #endif 4181da177e4SLinus Torvalds #ifndef FB_BLANK_HSYNC_SUSPEND 4191da177e4SLinus Torvalds #define FB_BLANK_HSYNC_SUSPEND 3 4201da177e4SLinus Torvalds #endif 4211da177e4SLinus Torvalds #ifndef FB_BLANK_POWERDOWN 4221da177e4SLinus Torvalds #define FB_BLANK_POWERDOWN 4 4231da177e4SLinus Torvalds #endif 4241da177e4SLinus Torvalds 4251da177e4SLinus Torvalds enum _SIS_LCD_TYPE { 4261da177e4SLinus Torvalds LCD_INVALID = 0, 4271da177e4SLinus Torvalds LCD_800x600, 4281da177e4SLinus Torvalds LCD_1024x768, 4291da177e4SLinus Torvalds LCD_1280x1024, 4301da177e4SLinus Torvalds LCD_1280x960, 4311da177e4SLinus Torvalds LCD_640x480, 4321da177e4SLinus Torvalds LCD_1600x1200, 4331da177e4SLinus Torvalds LCD_1920x1440, 4341da177e4SLinus Torvalds LCD_2048x1536, 435544393feSThomas Winischhofer LCD_320x240, /* FSTN */ 4361da177e4SLinus Torvalds LCD_1400x1050, 4371da177e4SLinus Torvalds LCD_1152x864, 4381da177e4SLinus Torvalds LCD_1152x768, 4391da177e4SLinus Torvalds LCD_1280x768, 4401da177e4SLinus Torvalds LCD_1024x600, 441544393feSThomas Winischhofer LCD_320x240_2, /* DSTN */ 442544393feSThomas Winischhofer LCD_320x240_3, /* DSTN */ 4431da177e4SLinus Torvalds LCD_848x480, 4441da177e4SLinus Torvalds LCD_1280x800, 4451da177e4SLinus Torvalds LCD_1680x1050, 4461da177e4SLinus Torvalds LCD_1280x720, 447544393feSThomas Winischhofer LCD_1280x854, 4481da177e4SLinus Torvalds LCD_CUSTOM, 4491da177e4SLinus Torvalds LCD_UNKNOWN 4501da177e4SLinus Torvalds }; 4511da177e4SLinus Torvalds 4521da177e4SLinus Torvalds enum _SIS_CMDTYPE { 4531da177e4SLinus Torvalds MMIO_CMD = 0, 4541da177e4SLinus Torvalds AGP_CMD_QUEUE, 4551da177e4SLinus Torvalds VM_CMD_QUEUE, 4561da177e4SLinus Torvalds }; 457544393feSThomas Winischhofer 458544393feSThomas Winischhofer struct SIS_OH { 459544393feSThomas Winischhofer struct SIS_OH *poh_next; 460544393feSThomas Winischhofer struct SIS_OH *poh_prev; 461544393feSThomas Winischhofer u32 offset; 462544393feSThomas Winischhofer u32 size; 463544393feSThomas Winischhofer }; 464544393feSThomas Winischhofer 465544393feSThomas Winischhofer struct SIS_OHALLOC { 466544393feSThomas Winischhofer struct SIS_OHALLOC *poha_next; 467544393feSThomas Winischhofer struct SIS_OH aoh[1]; 468544393feSThomas Winischhofer }; 469544393feSThomas Winischhofer 470544393feSThomas Winischhofer struct SIS_HEAP { 471544393feSThomas Winischhofer struct SIS_OH oh_free; 472544393feSThomas Winischhofer struct SIS_OH oh_used; 473544393feSThomas Winischhofer struct SIS_OH *poh_freelist; 474544393feSThomas Winischhofer struct SIS_OHALLOC *poha_chain; 475544393feSThomas Winischhofer u32 max_freesize; 476544393feSThomas Winischhofer struct sis_video_info *vinfo; 477544393feSThomas Winischhofer }; 4781da177e4SLinus Torvalds 4791da177e4SLinus Torvalds /* Our "par" */ 4801da177e4SLinus Torvalds struct sis_video_info { 4811da177e4SLinus Torvalds int cardnumber; 4821da177e4SLinus Torvalds struct fb_info *memyselfandi; 4831da177e4SLinus Torvalds 484544393feSThomas Winischhofer struct SiS_Private SiS_Pr; 4851da177e4SLinus Torvalds 486544393feSThomas Winischhofer struct sisfb_info sisfbinfo; /* For ioctl SISFB_GET_INFO */ 4871da177e4SLinus Torvalds 4881da177e4SLinus Torvalds struct fb_var_screeninfo default_var; 4891da177e4SLinus Torvalds 4901da177e4SLinus Torvalds struct fb_fix_screeninfo sisfb_fix; 491000d5335SAntonino A. Daplas u32 pseudo_palette[16]; 4921da177e4SLinus Torvalds 4931da177e4SLinus Torvalds struct sisfb_monitor { 4941da177e4SLinus Torvalds u16 hmin; 4951da177e4SLinus Torvalds u16 hmax; 4961da177e4SLinus Torvalds u16 vmin; 4971da177e4SLinus Torvalds u16 vmax; 4981da177e4SLinus Torvalds u32 dclockmax; 4991da177e4SLinus Torvalds u8 feature; 500c30660eaSRichard Knutsson bool datavalid; 5011da177e4SLinus Torvalds } sisfb_thismonitor; 5021da177e4SLinus Torvalds 503544393feSThomas Winischhofer unsigned short chip_id; /* PCI ID of chip */ 504544393feSThomas Winischhofer unsigned short chip_vendor; /* PCI ID of vendor */ 5051da177e4SLinus Torvalds char myid[40]; 5061da177e4SLinus Torvalds 5071da177e4SLinus Torvalds struct pci_dev *nbridge; 508544393feSThomas Winischhofer struct pci_dev *lpcdev; 5091da177e4SLinus Torvalds 5101da177e4SLinus Torvalds int mni; /* Mode number index */ 5111da177e4SLinus Torvalds 5121da177e4SLinus Torvalds unsigned long video_size; 5131da177e4SLinus Torvalds unsigned long video_base; 5141da177e4SLinus Torvalds unsigned long mmio_size; 5151da177e4SLinus Torvalds unsigned long mmio_base; 5161da177e4SLinus Torvalds unsigned long vga_base; 5171da177e4SLinus Torvalds 518544393feSThomas Winischhofer unsigned long video_offset; 519544393feSThomas Winischhofer 520544393feSThomas Winischhofer unsigned long UMAsize, LFBsize; 521544393feSThomas Winischhofer 52214aefd1bSAdrian Bunk void __iomem *video_vbase; 52314aefd1bSAdrian Bunk void __iomem *mmio_vbase; 5241da177e4SLinus Torvalds 5251da177e4SLinus Torvalds unsigned char *bios_abase; 5261da177e4SLinus Torvalds 5272cff6406SLuis R. Rodriguez int wc_cookie; 5281da177e4SLinus Torvalds 5291da177e4SLinus Torvalds u32 sisfb_mem; 5301da177e4SLinus Torvalds 5311da177e4SLinus Torvalds u32 sisfb_parm_mem; 5321da177e4SLinus Torvalds int sisfb_accel; 5331da177e4SLinus Torvalds int sisfb_ypan; 5341da177e4SLinus Torvalds int sisfb_max; 5351da177e4SLinus Torvalds int sisfb_userom; 5361da177e4SLinus Torvalds int sisfb_useoem; 5371da177e4SLinus Torvalds int sisfb_mode_idx; 5381da177e4SLinus Torvalds int sisfb_parm_rate; 5391da177e4SLinus Torvalds int sisfb_crt1off; 5401da177e4SLinus Torvalds int sisfb_forcecrt1; 5411da177e4SLinus Torvalds int sisfb_crt2type; 5421da177e4SLinus Torvalds int sisfb_crt2flags; 5431da177e4SLinus Torvalds int sisfb_dstn; 5441da177e4SLinus Torvalds int sisfb_fstn; 5451da177e4SLinus Torvalds int sisfb_tvplug; 5461da177e4SLinus Torvalds int sisfb_tvstd; 5471da177e4SLinus Torvalds int sisfb_nocrt2rate; 5481da177e4SLinus Torvalds 5491da177e4SLinus Torvalds u32 heapstart; /* offset */ 55014aefd1bSAdrian Bunk void __iomem *sisfb_heap_start; /* address */ 55114aefd1bSAdrian Bunk void __iomem *sisfb_heap_end; /* address */ 5521da177e4SLinus Torvalds u32 sisfb_heap_size; 5531da177e4SLinus Torvalds int havenoheap; 5541da177e4SLinus Torvalds 555544393feSThomas Winischhofer struct SIS_HEAP sisfb_heap; /* This card's vram heap */ 5561da177e4SLinus Torvalds 5571da177e4SLinus Torvalds int video_bpp; 5581da177e4SLinus Torvalds int video_cmap_len; 5591da177e4SLinus Torvalds int video_width; 5601da177e4SLinus Torvalds int video_height; 5611da177e4SLinus Torvalds unsigned int refresh_rate; 5621da177e4SLinus Torvalds 5631da177e4SLinus Torvalds unsigned int chip; 564929c972eSAaro Koskinen unsigned int chip_real_id; 5651da177e4SLinus Torvalds u8 revision_id; 566544393feSThomas Winischhofer int sisvga_enabled; /* PCI device was enabled */ 5671da177e4SLinus Torvalds 5681da177e4SLinus Torvalds int video_linelength; /* real pitch */ 5691da177e4SLinus Torvalds int scrnpitchCRT1; /* pitch regarding interlace */ 5701da177e4SLinus Torvalds 5711da177e4SLinus Torvalds u16 DstColor; /* For 2d acceleration */ 5721da177e4SLinus Torvalds u32 SiS310_AccelDepth; 5731da177e4SLinus Torvalds u32 CommandReg; 574544393feSThomas Winischhofer int cmdqueuelength; /* Current (for accel) */ 575544393feSThomas Winischhofer u32 cmdQueueSize; /* Total size in KB */ 5761da177e4SLinus Torvalds 5771da177e4SLinus Torvalds spinlock_t lockaccel; /* Do not use outside of kernel! */ 5781da177e4SLinus Torvalds 5791da177e4SLinus Torvalds unsigned int pcibus; 5801da177e4SLinus Torvalds unsigned int pcislot; 5811da177e4SLinus Torvalds unsigned int pcifunc; 5821da177e4SLinus Torvalds 5831da177e4SLinus Torvalds int accel; 584544393feSThomas Winischhofer int engineok; 5851da177e4SLinus Torvalds 5861da177e4SLinus Torvalds u16 subsysvendor; 5871da177e4SLinus Torvalds u16 subsysdevice; 5881da177e4SLinus Torvalds 5891da177e4SLinus Torvalds u32 vbflags; /* Replacing deprecated stuff from above */ 5901da177e4SLinus Torvalds u32 currentvbflags; 591544393feSThomas Winischhofer u32 vbflags2; 5921da177e4SLinus Torvalds 5931da177e4SLinus Torvalds int lcdxres, lcdyres; 5941da177e4SLinus Torvalds int lcddefmodeidx, tvdefmodeidx, defmodeidx; 5951da177e4SLinus Torvalds u32 CRT2LCDType; /* defined in "SIS_LCD_TYPE" */ 596544393feSThomas Winischhofer u32 curFSTN, curDSTN; 5971da177e4SLinus Torvalds 5981da177e4SLinus Torvalds int current_bpp; 5991da177e4SLinus Torvalds int current_width; 6001da177e4SLinus Torvalds int current_height; 6011da177e4SLinus Torvalds int current_htotal; 6021da177e4SLinus Torvalds int current_vtotal; 6031da177e4SLinus Torvalds int current_linelength; 6041da177e4SLinus Torvalds __u32 current_pixclock; 6051da177e4SLinus Torvalds int current_refresh_rate; 6061da177e4SLinus Torvalds 607544393feSThomas Winischhofer unsigned int current_base; 608544393feSThomas Winischhofer 6091da177e4SLinus Torvalds u8 mode_no; 6101da177e4SLinus Torvalds u8 rate_idx; 6111da177e4SLinus Torvalds int modechanged; 6121da177e4SLinus Torvalds unsigned char modeprechange; 6131da177e4SLinus Torvalds 6141da177e4SLinus Torvalds u8 sisfb_lastrates[128]; 6151da177e4SLinus Torvalds 6161da177e4SLinus Torvalds int newrom; 617544393feSThomas Winischhofer int haveXGIROM; 6181da177e4SLinus Torvalds int registered; 6191da177e4SLinus Torvalds int warncount; 6201da177e4SLinus Torvalds 6211da177e4SLinus Torvalds int sisvga_engine; 6221da177e4SLinus Torvalds int hwcursor_size; 6231da177e4SLinus Torvalds int CRT2_write_enable; 6241da177e4SLinus Torvalds u8 caps; 6251da177e4SLinus Torvalds 6261da177e4SLinus Torvalds u8 detectedpdc; 6271da177e4SLinus Torvalds u8 detectedpdca; 6281da177e4SLinus Torvalds u8 detectedlcda; 6291da177e4SLinus Torvalds 63014aefd1bSAdrian Bunk void __iomem *hwcursor_vbase; 6311da177e4SLinus Torvalds 6321da177e4SLinus Torvalds int chronteltype; 6331da177e4SLinus Torvalds int tvxpos, tvypos; 6341da177e4SLinus Torvalds u8 p2_1f,p2_20,p2_2b,p2_42,p2_43,p2_01,p2_02; 6351da177e4SLinus Torvalds int tvx, tvy; 6361da177e4SLinus Torvalds 6371da177e4SLinus Torvalds u8 sisfblocked; 6381da177e4SLinus Torvalds 639544393feSThomas Winischhofer struct sisfb_info sisfb_infoblock; 640544393feSThomas Winischhofer 641544393feSThomas Winischhofer struct sisfb_cmd sisfb_command; 642544393feSThomas Winischhofer 643544393feSThomas Winischhofer u32 sisfb_id; 644544393feSThomas Winischhofer 645544393feSThomas Winischhofer u8 sisfb_can_post; 646544393feSThomas Winischhofer u8 sisfb_card_posted; 647544393feSThomas Winischhofer u8 sisfb_was_boot_device; 648544393feSThomas Winischhofer 6491da177e4SLinus Torvalds struct sis_video_info *next; 6501da177e4SLinus Torvalds }; 6511da177e4SLinus Torvalds 6525908986eSArnd Bergmann /* from sis_accel.c */ 6535908986eSArnd Bergmann extern void fbcon_sis_fillrect(struct fb_info *info, 6545908986eSArnd Bergmann const struct fb_fillrect *rect); 6555908986eSArnd Bergmann extern void fbcon_sis_copyarea(struct fb_info *info, 6565908986eSArnd Bergmann const struct fb_copyarea *area); 6575908986eSArnd Bergmann extern int fbcon_sis_sync(struct fb_info *info); 6585908986eSArnd Bergmann 6595908986eSArnd Bergmann /* Internal 2D accelerator functions */ 6605908986eSArnd Bergmann extern int sisfb_initaccel(struct sis_video_info *ivideo); 6615908986eSArnd Bergmann extern void sisfb_syncaccel(struct sis_video_info *ivideo); 6625908986eSArnd Bergmann 6635908986eSArnd Bergmann /* Internal general routines */ 6645908986eSArnd Bergmann #ifdef CONFIG_FB_SIS_300 6655908986eSArnd Bergmann unsigned int sisfb_read_nbridge_pci_dword(struct SiS_Private *SiS_Pr, int reg); 6665908986eSArnd Bergmann void sisfb_write_nbridge_pci_dword(struct SiS_Private *SiS_Pr, int reg, unsigned int val); 6675908986eSArnd Bergmann unsigned int sisfb_read_lpc_pci_dword(struct SiS_Private *SiS_Pr, int reg); 6685908986eSArnd Bergmann #endif 6695908986eSArnd Bergmann #ifdef CONFIG_FB_SIS_315 6705908986eSArnd Bergmann void sisfb_write_nbridge_pci_byte(struct SiS_Private *SiS_Pr, int reg, unsigned char val); 6715908986eSArnd Bergmann unsigned int sisfb_read_mio_pci_word(struct SiS_Private *SiS_Pr, int reg); 6725908986eSArnd Bergmann #endif 6735908986eSArnd Bergmann 6745908986eSArnd Bergmann /* SiS-specific exported functions */ 6755908986eSArnd Bergmann void sis_malloc(struct sis_memreq *req); 6765908986eSArnd Bergmann void sis_free(u32 base); 6775908986eSArnd Bergmann 6785908986eSArnd Bergmann /* Routines from init.c/init301.c */ 6795908986eSArnd Bergmann extern unsigned short SiS_GetModeID_LCD(int VGAEngine, unsigned int VBFlags, int HDisplay, 6805908986eSArnd Bergmann int VDisplay, int Depth, bool FSTN, unsigned short CustomT, 6815908986eSArnd Bergmann int LCDwith, int LCDheight, unsigned int VBFlags2); 6825908986eSArnd Bergmann extern unsigned short SiS_GetModeID_TV(int VGAEngine, unsigned int VBFlags, int HDisplay, 6835908986eSArnd Bergmann int VDisplay, int Depth, unsigned int VBFlags2); 6845908986eSArnd Bergmann extern unsigned short SiS_GetModeID_VGA2(int VGAEngine, unsigned int VBFlags, int HDisplay, 6855908986eSArnd Bergmann int VDisplay, int Depth, unsigned int VBFlags2); 6865908986eSArnd Bergmann extern void SiSRegInit(struct SiS_Private *SiS_Pr, SISIOADDRESS BaseAddr); 6875908986eSArnd Bergmann extern bool SiSSetMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo); 6885908986eSArnd Bergmann extern void SiS_SetEnableDstn(struct SiS_Private *SiS_Pr, int enable); 6895908986eSArnd Bergmann extern void SiS_SetEnableFstn(struct SiS_Private *SiS_Pr, int enable); 6905908986eSArnd Bergmann 6915908986eSArnd Bergmann extern bool SiSDetermineROMLayout661(struct SiS_Private *SiS_Pr); 6925908986eSArnd Bergmann 6935908986eSArnd Bergmann extern bool sisfb_gettotalfrommode(struct SiS_Private *SiS_Pr, unsigned char modeno, 6945908986eSArnd Bergmann int *htotal, int *vtotal, unsigned char rateindex); 6955908986eSArnd Bergmann extern int sisfb_mode_rate_to_dclock(struct SiS_Private *SiS_Pr, 6965908986eSArnd Bergmann unsigned char modeno, unsigned char rateindex); 6975908986eSArnd Bergmann extern int sisfb_mode_rate_to_ddata(struct SiS_Private *SiS_Pr, unsigned char modeno, 6985908986eSArnd Bergmann unsigned char rateindex, struct fb_var_screeninfo *var); 6995908986eSArnd Bergmann 7005908986eSArnd Bergmann 7011da177e4SLinus Torvalds #endif 702