vgatypes.h 11.8 KB
Newer Older
1
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sis/vgatypes.h,v 1.9 2003/08/26 20:40:24 twini Exp $ */
2 3 4
/*
 * General type definitions for universal mode switching modules
 *
5
 * Copyright 2002, 2003 by Thomas Winischhofer, Vienna, Austria
6
 *
7 8
 * If distributed as part of the linux kernel, the contents of this file
 * is entirely covered by the GPL.
9
 *
10
 * Otherwise, the following terms apply:
11
 *
12 13 14 15 16 17 18 19 20
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
 * the above copyright notice appear in all copies and that both that
 * copyright notice and this permission notice appear in supporting
 * documentation, and that the name of the copyright holder not be used in
 * advertising or publicity pertaining to distribution of the software without
 * specific, written prior permission.  The copyright holder makes no representations
 * about the suitability of this software for any purpose.  It is provided
 * "as is" without express or implied warranty.
21
 *
22 23 24 25 26 27 28
 * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
 * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
29
 *
30 31
 * Authors: 	Thomas Winischhofer <thomas@winischhofer.net>
 *		Silicon Integrated Systems
32 33
 *
 */
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
34 35 36 37 38 39 40
#ifndef _VGATYPES_
#define _VGATYPES_

#ifdef LINUX_XF86
#include "xf86Pci.h"
#endif

41
#ifdef LINUX_KERNEL  /* We don't want the X driver to depend on kernel source */
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
42 43 44
#include <linux/ioctl.h>
#endif

45 46 47 48
#ifndef TC
#define far
#endif

Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
#ifndef FALSE
#define FALSE   0
#endif

#ifndef TRUE
#define TRUE    1
#endif

#ifndef NULL
#define NULL    0
#endif

#ifndef CHAR
typedef char CHAR;
#endif

#ifndef SHORT
typedef short SHORT;
#endif

#ifndef LONG
typedef long  LONG;
#endif

#ifndef UCHAR
typedef unsigned char UCHAR;
#endif

#ifndef USHORT
typedef unsigned short USHORT;
#endif

#ifndef ULONG
typedef unsigned long ULONG;
#endif

85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
#ifndef PUCHAR
typedef UCHAR far *PUCHAR;
#endif

#ifndef PUSHORT
typedef USHORT far *PUSHORT;
#endif

#ifndef PULONG
typedef ULONG far *PULONG;
#endif

#ifndef PVOID
typedef void far *PVOID;
#endif
#ifndef VOID
typedef void VOID;
#endif

Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
104 105 106 107 108 109 110 111
#ifndef BOOLEAN
typedef UCHAR BOOLEAN;
#endif

#ifndef bool
typedef UCHAR bool;
#endif

112 113
#ifndef VBIOS_VER_MAX_LENGTH
#define VBIOS_VER_MAX_LENGTH         4
114 115
#endif

116
#ifndef LINUX_KERNEL   /* For kernel, this is defined in sisfb.h */
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
117 118 119 120
#ifndef SIS_CHIP_TYPE
typedef enum _SIS_CHIP_TYPE {
    SIS_VGALegacy = 0,
#ifdef LINUX_XF86
121 122
    SIS_530,	/* TW */
    SIS_OLD,	/* TW */
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
123 124 125 126 127 128 129 130 131 132 133
#endif
    SIS_300,
    SIS_630,
    SIS_730,
    SIS_540,
    SIS_315H,   /* SiS 310 */
    SIS_315,
    SIS_315PRO, /* SiS 325 */
    SIS_550,
    SIS_650,
    SIS_740,
134 135 136
    SIS_330,
    SIS_660,
    SIS_760,
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
137 138 139 140 141 142 143 144 145
    MAX_SIS_CHIP
} SIS_CHIP_TYPE;
#endif
#endif

#ifndef SIS_VB_CHIP_TYPE
typedef enum _SIS_VB_CHIP_TYPE {
    VB_CHIP_Legacy = 0,
    VB_CHIP_301,
146
    VB_CHIP_301B,
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
147 148 149 150
    VB_CHIP_301LV,
    VB_CHIP_302,
    VB_CHIP_302B,
    VB_CHIP_302LV,
151
    VB_CHIP_301C,
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
    VB_CHIP_UNKNOWN, /* other video bridge or no video bridge */
    MAX_VB_CHIP
} SIS_VB_CHIP_TYPE;
#endif

#ifndef SIS_LCD_TYPE
typedef enum _SIS_LCD_TYPE {
    LCD_INVALID = 0,
    LCD_800x600,
    LCD_1024x768,
    LCD_1280x1024,
    LCD_1280x960,
    LCD_640x480,
    LCD_1600x1200,
    LCD_1920x1440,
    LCD_2048x1536,
168
    LCD_320x480,       /* FSTN, DSTN */
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
169 170 171 172 173
    LCD_1400x1050,
    LCD_1152x864,
    LCD_1152x768,
    LCD_1280x768,
    LCD_1024x600,
174 175 176 177
    LCD_640x480_2,     /* FSTN, DSTN */
    LCD_640x480_3,     /* FSTN, DSTN */
    LCD_848x480,
    LCD_CUSTOM,
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
178 179 180 181 182 183 184 185 186 187 188 189
    LCD_UNKNOWN
} SIS_LCD_TYPE;
#endif

#ifndef PSIS_DSReg
typedef struct _SIS_DSReg
{
  UCHAR  jIdx;
  UCHAR  jVal;
} SIS_DSReg, *PSIS_DSReg;
#endif

190
#ifndef SIS_HW_DEVICE_INFO
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
191

192
typedef struct _SIS_HW_DEVICE_INFO  SIS_HW_DEVICE_INFO, *PSIS_HW_DEVICE_INFO;
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
193

194
typedef BOOLEAN (*PSIS_QUERYSPACE)   (PSIS_HW_DEVICE_INFO, ULONG, ULONG, ULONG *);
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
195

196
struct _SIS_HW_DEVICE_INFO
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
197
{
198 199 200 201 202 203 204 205 206 207 208 209 210 211 212
    PVOID  pDevice;              /* The pointer to the physical device data structure
                                    in each OS or NULL for unused. */
    UCHAR  *pjVirtualRomBase;    /* base virtual address of VBIOS ROM Space */
                                 /* or base virtual address of ROM image file. */
                                 /* if NULL, then read from pjROMImage; */
                                 /* Note:ROM image file is the file of VBIOS ROM */

    BOOLEAN UseROM;		 /* TW: Use the ROM image if provided */

    UCHAR  *pjCustomizedROMImage;/* base virtual address of ROM image file. */
                                 /* wincE:ROM image file is the file for OEM */
                                 /*       customized table */
                                 /* Linux: not used */
                                 /* NT   : not used  */
                                 /* Note : pjCustomizedROMImage=NULL if no ROM image file */
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
213 214 215 216 217

    UCHAR  *pjVideoMemoryAddress;/* base virtual memory address */
                                 /* of Linear VGA memory */

    ULONG  ulVideoMemorySize;    /* size, in bytes, of the memory on the board */
218
    ULONG  ulIOAddress;          /* base I/O address of VGA ports (0x3B0) */
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
219 220 221 222 223 224 225 226 227
    UCHAR  jChipType;            /* Used to Identify SiS Graphics Chip */
                                 /* defined in the data structure type  */
                                 /* "SIS_CHIP_TYPE" */

    UCHAR  jChipRevision;        /* Used to Identify SiS Graphics Chip Revision */
    UCHAR  ujVBChipID;           /* the ID of video bridge */
                                 /* defined in the data structure type */
                                 /* "SIS_VB_CHIP_TYPE" */

228
    USHORT usExternalChip;       /* NO VB or other video bridge (other than  */
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
229
                                 /* SiS video bridge) */
230 231 232 233 234 235 236 237 238 239 240
                                 /* if ujVBChipID = VB_CHIP_UNKNOWN, */
                                 /* then bit0=1 : LVDS,bit1=1 : trumpion, */
                                 /* bit2=1 : CH7005 & no video bridge if */
                                 /* usExternalChip = 0. */
                                 /* Note: CR37[3:1]: */
                                 /*             001:SiS 301 */
                                 /*             010:LVDS */
                                 /*             011:Trumpion LVDS Scaling Chip */
                                 /*             100:LVDS(LCD-out)+Chrontel 7005 */
                                 /*             101:Single Chrontel 7005 */
				 /* TW: This has changed on 315 series! */
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
241

242 243 244
    ULONG  ulCRT2LCDType;        /* defined in the data structure type */
                                 /* "SIS_LCD_TYPE" */
                                     
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
245 246 247 248 249 250 251 252 253 254 255 256
    BOOLEAN bIntegratedMMEnabled;/* supporting integration MM enable */
                                      
    BOOLEAN bSkipDramSizing;     /* True: Skip video memory sizing. */
    PSIS_DSReg  pSR;             /* restore SR registers in initial function. */
                                 /* end data :(idx, val) =  (FF, FF). */
                                 /* Note : restore SR registers if  */
                                 /* bSkipDramSizing = TRUE */

    PSIS_DSReg  pCR;             /* restore CR registers in initial function. */
                                 /* end data :(idx, val) =  (FF, FF) */
                                 /* Note : restore cR registers if  */
                                 /* bSkipDramSizing = TRUE */
257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273

    PSIS_QUERYSPACE  pQueryVGAConfigSpace; /* Get/Set VGA Configuration  */
                                           /* space */
 
    PSIS_QUERYSPACE  pQueryNorthBridgeSpace;/* Get/Set North Bridge  */
                                            /* space  */

    UCHAR  szVBIOSVer[VBIOS_VER_MAX_LENGTH];

    UCHAR  pdc;			/* TW: PanelDelayCompensation */
    
#ifdef LINUX_KERNEL
    BOOLEAN Is301BDH;
#endif        

#ifdef LINUX_XF86
    PCITAG PciTag;		/* PCI Tag for Linux XF86 */
274
#endif
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
275 276 277
};
#endif

278 279 280

/* TW: Addtional IOCTL for communication sisfb <> X driver        */
/*     If changing this, sisfb.h must also be changed (for sisfb) */
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
281 282 283

#ifdef LINUX_XF86  /* We don't want the X driver to depend on the kernel source */

284
/* TW: ioctl for identifying and giving some info (esp. memory heap start) */
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
285 286
#define SISFB_GET_INFO    0x80046ef8  /* Wow, what a terrible hack... */

287
/* TW: Structure argument for SISFB_GET_INFO ioctl  */
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
288 289 290
typedef struct _SISFB_INFO sisfb_info, *psisfb_info;

struct _SISFB_INFO {
291
	unsigned long sisfb_id;         /* for identifying sisfb */
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
292 293 294
#ifndef SISFB_ID
#define SISFB_ID	  0x53495346    /* Identify myself with 'SISF' */
#endif
295 296 297 298
 	int    chip_id;			/* PCI ID of detected chip */
	int    memory;			/* video memory in KB which sisfb manages */
	int    heapstart;               /* heap start (= sisfb "mem" argument) in KB */
	unsigned char fbvidmode;	/* current sisfb mode */
299

300 301 302
	unsigned char sisfb_version;
	unsigned char sisfb_revision;
	unsigned char sisfb_patchlevel;
303

304
	unsigned char sisfb_caps;	/* sisfb's capabilities */
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
305

306
	int    sisfb_tqlen;		/* turbo queue length (in KB) */
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
307

308 309 310
	unsigned int sisfb_pcibus;      /* The card's PCI ID */
	unsigned int sisfb_pcislot;
	unsigned int sisfb_pcifunc;
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
311

312 313 314
	unsigned char sisfb_lcdpdc;
	
	unsigned char sisfb_lcda;
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
315

316 317
	unsigned long sisfb_vbflags;
	unsigned long sisfb_currentvbflags;
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
318

319 320
	int sisfb_scalelcd;
	unsigned long sisfb_specialtiming;
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
321

322 323 324
	char reserved[219]; 		/* for future use */
};
#endif
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
325

326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342
#ifndef BUS_DATA_TYPE
typedef enum _BUS_DATA_TYPE {
    ConfigurationSpaceUndefined = -1,
    Cmos,
    EisaConfiguration,
    Pos,
    CbusConfiguration,
    PCIConfiguration,
    VMEConfiguration,
    NuBusConfiguration,
    PCMCIAConfiguration,
    MPIConfiguration,
    MPSAConfiguration,
    PNPISAConfiguration,
    MaximumBusDataType
} BUS_DATA_TYPE, *PBUS_DATA_TYPE;
#endif
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
343

344 345 346
#ifndef PCI_TYPE0_ADDRESSES
#define PCI_TYPE0_ADDRESSES             6
#endif
347

348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395
#ifndef PCI_TYPE1_ADDRESSES
#define PCI_TYPE1_ADDRESSES             2
#endif

#ifndef PCI_COMMON_CONFIG
typedef struct _PCI_COMMON_CONFIG {
    USHORT  VendorID;                   /* (ro)                 */
    USHORT  DeviceID;                   /* (ro)                 */
    USHORT  Command;                    /* Device control       */
    USHORT  Status;
    UCHAR   RevisionID;                 /* (ro)                 */
    UCHAR   ProgIf;                     /* (ro)                 */
    UCHAR   SubClass;                   /* (ro)                 */
    UCHAR   BaseClass;                  /* (ro)                 */
    UCHAR   CacheLineSize;              /* (ro+)                */
    UCHAR   LatencyTimer;               /* (ro+)                */
    UCHAR   HeaderType;                 /* (ro)                 */
    UCHAR   BIST;                       /* Built in self test   */

    union {
        struct _PCI_HEADER_TYPE_0 {
            ULONG   BaseAddresses[PCI_TYPE0_ADDRESSES];
            ULONG   CIS;
            USHORT  SubVendorID;
            USHORT  SubSystemID;
            ULONG   ROMBaseAddress;
            ULONG   Reserved2[2];

            UCHAR   InterruptLine;      /*                    */
            UCHAR   InterruptPin;       /* (ro)               */
            UCHAR   MinimumGrant;       /* (ro)               */
            UCHAR   MaximumLatency;     /* (ro)               */
        } type0;


    } u;

    UCHAR   DeviceSpecific[192];

} PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
#endif

#ifndef FIELD_OFFSET
#define FIELD_OFFSET(type, field)    ((LONG)&(((type *)0)->field))
#endif

#ifndef PCI_COMMON_HDR_LENGTH
#define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET (PCI_COMMON_CONFIG, DeviceSpecific))
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
396 397 398 399
#endif

#endif