![apatard@mandriva.com](/assets/img/avatar_default.png)
This driver handles XG20, XG21, XG40, XG42 chipsets from XGI. They're also known as Z7,Z9,Z11 chipsets. It's based on the SiS fb driver but has been heavily modified by XGI to support their newer chipsets. Signed-off-by: Arnaud Patard <apatard@mandriva.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
326 lines
7.1 KiB
C
326 lines
7.1 KiB
C
|
|
#ifndef _VGATYPES_
|
|
#define _VGATYPES_
|
|
|
|
#include "osdef.h"
|
|
|
|
#ifdef LINUX_XF86
|
|
#include "xf86Version.h"
|
|
#include "xf86Pci.h"
|
|
#endif
|
|
|
|
#ifdef LINUX_KERNEL /* We don't want the X driver to depend on kernel source */
|
|
#include <linux/ioctl.h>
|
|
#endif
|
|
|
|
#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
|
|
|
|
#ifndef PUCHAR
|
|
typedef UCHAR *PUCHAR;
|
|
#endif
|
|
|
|
#ifndef PUSHORT
|
|
typedef USHORT *PUSHORT;
|
|
#endif
|
|
|
|
#ifndef PLONGU
|
|
typedef ULONG *PULONG;
|
|
#endif
|
|
|
|
#ifndef VOID
|
|
typedef void VOID;
|
|
#endif
|
|
|
|
#ifndef PVOID
|
|
typedef void *PVOID;
|
|
#endif
|
|
|
|
#ifndef BOOLEAN
|
|
typedef UCHAR BOOLEAN;
|
|
#endif
|
|
/*
|
|
#ifndef bool
|
|
typedef UCHAR bool;
|
|
#endif
|
|
*/
|
|
#ifdef LINUX_KERNEL
|
|
typedef unsigned long XGIIOADDRESS;
|
|
#endif
|
|
|
|
#ifdef LINUX_XF86
|
|
#if XF86_VERSION_CURRENT < XF86_VERSION_NUMERIC(4,2,0,0,0)
|
|
typedef unsigned char IOADDRESS;
|
|
typedef unsigned char XGIIOADDRESS;
|
|
#else
|
|
typedef IOADDRESS XGIIOADDRESS;
|
|
#endif
|
|
#endif
|
|
|
|
#ifndef VBIOS_VER_MAX_LENGTH
|
|
#define VBIOS_VER_MAX_LENGTH 4
|
|
#endif
|
|
|
|
#ifndef WIN2000
|
|
|
|
#ifndef LINUX_KERNEL /* For the linux kernel, this is defined in xgifb.h */
|
|
#ifndef XGI_CHIP_TYPE
|
|
typedef enum _XGI_CHIP_TYPE {
|
|
XGI_VGALegacy = 0,
|
|
#ifdef LINUX_XF86
|
|
XGI_530,
|
|
XGI_OLD,
|
|
#endif
|
|
XGI_300,
|
|
XGI_630,
|
|
XGI_640,
|
|
XGI_315H,
|
|
XGI_315,
|
|
XGI_315PRO,
|
|
XGI_550,
|
|
XGI_650,
|
|
XGI_650M,
|
|
XGI_740,
|
|
XGI_330,
|
|
XGI_661,
|
|
XGI_660,
|
|
XGI_760,
|
|
XG40 = 32,
|
|
XG41,
|
|
XG42,
|
|
XG45,
|
|
XG20 = 48,
|
|
XG21,
|
|
XG27,
|
|
MAX_XGI_CHIP
|
|
} XGI_CHIP_TYPE;
|
|
#endif
|
|
#endif
|
|
|
|
#ifndef XGI_VB_CHIP_TYPE
|
|
typedef enum _XGI_VB_CHIP_TYPE {
|
|
VB_CHIP_Legacy = 0,
|
|
VB_CHIP_301,
|
|
VB_CHIP_301B,
|
|
VB_CHIP_301LV,
|
|
VB_CHIP_302,
|
|
VB_CHIP_302B,
|
|
VB_CHIP_302LV,
|
|
VB_CHIP_301C,
|
|
VB_CHIP_302ELV,
|
|
VB_CHIP_UNKNOWN, /* other video bridge or no video bridge */
|
|
MAX_VB_CHIP
|
|
} XGI_VB_CHIP_TYPE;
|
|
#endif
|
|
|
|
#ifndef XGI_LCD_TYPE
|
|
typedef enum _XGI_LCD_TYPE {
|
|
LCD_INVALID = 0,
|
|
LCD_320x480, /* FSTN, DSTN */
|
|
LCD_640x480,
|
|
LCD_640x480_2, /* FSTN, DSTN */
|
|
LCD_640x480_3, /* FSTN, DSTN */
|
|
LCD_800x600,
|
|
LCD_848x480,
|
|
LCD_1024x600,
|
|
LCD_1024x768,
|
|
LCD_1152x768,
|
|
LCD_1152x864,
|
|
LCD_1280x720,
|
|
LCD_1280x768,
|
|
LCD_1280x800,
|
|
LCD_1280x960,
|
|
LCD_1280x1024,
|
|
LCD_1400x1050,
|
|
LCD_1600x1200,
|
|
LCD_1680x1050,
|
|
LCD_1920x1440,
|
|
LCD_2048x1536,
|
|
LCD_CUSTOM,
|
|
LCD_UNKNOWN
|
|
} XGI_LCD_TYPE;
|
|
#endif
|
|
|
|
#endif /* not WIN2000 */
|
|
|
|
#ifndef PXGI_DSReg
|
|
typedef struct _XGI_DSReg
|
|
{
|
|
UCHAR jIdx;
|
|
UCHAR jVal;
|
|
} XGI_DSReg, *PXGI_DSReg;
|
|
#endif
|
|
|
|
#ifndef XGI_HW_DEVICE_INFO
|
|
|
|
typedef struct _XGI_HW_DEVICE_INFO XGI_HW_DEVICE_INFO, *PXGI_HW_DEVICE_INFO;
|
|
|
|
typedef BOOLEAN (*PXGI_QUERYSPACE) (PXGI_HW_DEVICE_INFO, ULONG, ULONG, ULONG *);
|
|
|
|
struct _XGI_HW_DEVICE_INFO
|
|
{
|
|
ULONG ulExternalChip; /* NO VB or other video bridge*/
|
|
/* if ujVBChipID = VB_CHIP_UNKNOWN, */
|
|
#ifdef LINUX_XF86
|
|
PCITAG PciTag; /* PCI Tag */
|
|
#endif
|
|
|
|
PUCHAR pjVirtualRomBase; /* ROM image */
|
|
|
|
BOOLEAN UseROM; /* Use the ROM image if provided */
|
|
|
|
PVOID pDevice;
|
|
|
|
PUCHAR pjVideoMemoryAddress;/* base virtual memory address */
|
|
/* of Linear VGA memory */
|
|
|
|
ULONG ulVideoMemorySize; /* size, in bytes, of the memory on the board */
|
|
|
|
PUCHAR pjIOAddress; /* base I/O address of VGA ports (0x3B0) */
|
|
|
|
PUCHAR pjCustomizedROMImage;
|
|
|
|
PUCHAR pj2ndVideoMemoryAddress;
|
|
ULONG ul2ndVideoMemorySize;
|
|
|
|
PUCHAR pj2ndIOAddress;
|
|
/*#ifndef WIN2000
|
|
XGIIOADDRESS pjIOAddress; // base I/O address of VGA ports (0x3B0)
|
|
#endif */
|
|
UCHAR jChipType; /* Used to Identify Graphics Chip */
|
|
/* defined in the data structure type */
|
|
/* "XGI_CHIP_TYPE" */
|
|
|
|
UCHAR jChipRevision; /* Used to Identify Graphics Chip Revision */
|
|
|
|
UCHAR ujVBChipID; /* the ID of video bridge */
|
|
/* defined in the data structure type */
|
|
/* "XGI_VB_CHIP_TYPE" */
|
|
|
|
BOOLEAN bNewScratch;
|
|
|
|
ULONG ulCRT2LCDType; /* defined in the data structure type */
|
|
|
|
ULONG usExternalChip; /* NO VB or other video bridge (other than */
|
|
/* video bridge) */
|
|
|
|
BOOLEAN bIntegratedMMEnabled;/* supporting integration MM enable */
|
|
|
|
BOOLEAN bSkipDramSizing; /* True: Skip video memory sizing. */
|
|
|
|
BOOLEAN bSkipSense;
|
|
|
|
BOOLEAN bIsPowerSaving; /* True: XGIInit() is invoked by power management,
|
|
otherwise by 2nd adapter's initialzation */
|
|
|
|
PXGI_DSReg pSR; /* restore SR registers in initial function. */
|
|
/* end data :(idx, val) = (FF, FF). */
|
|
/* Note : restore SR registers if */
|
|
/* bSkipDramSizing = TRUE */
|
|
|
|
PXGI_DSReg pCR; /* restore CR registers in initial function. */
|
|
/* end data :(idx, val) = (FF, FF) */
|
|
/* Note : restore cR registers if */
|
|
/* bSkipDramSizing = TRUE */
|
|
/*
|
|
#endif
|
|
*/
|
|
|
|
PXGI_QUERYSPACE pQueryVGAConfigSpace;
|
|
|
|
PXGI_QUERYSPACE pQueryNorthBridgeSpace;
|
|
|
|
UCHAR szVBIOSVer[VBIOS_VER_MAX_LENGTH];
|
|
|
|
};
|
|
#endif
|
|
|
|
/* Addtional IOCTL for communication xgifb <> X driver */
|
|
/* If changing this, xgifb.h must also be changed (for xgifb) */
|
|
|
|
#ifdef LINUX_XF86 /* We don't want the X driver to depend on the kernel source */
|
|
|
|
/* ioctl for identifying and giving some info (esp. memory heap start) */
|
|
#define XGIFB_GET_INFO 0x80046ef8 /* Wow, what a terrible hack... */
|
|
|
|
/* Structure argument for XGIFB_GET_INFO ioctl */
|
|
typedef struct _XGIFB_INFO xgifb_info, *pxgifb_info;
|
|
|
|
struct _XGIFB_INFO {
|
|
CARD32 xgifb_id; /* for identifying xgifb */
|
|
#ifndef XGIFB_ID
|
|
#define XGIFB_ID 0x53495346 /* Identify myself with 'XGIF' */
|
|
#endif
|
|
CARD32 chip_id; /* PCI ID of detected chip */
|
|
CARD32 memory; /* video memory in KB which xgifb manages */
|
|
CARD32 heapstart; /* heap start (= xgifb "mem" argument) in KB */
|
|
CARD8 fbvidmode; /* current xgifb mode */
|
|
|
|
CARD8 xgifb_version;
|
|
CARD8 xgifb_revision;
|
|
CARD8 xgifb_patchlevel;
|
|
|
|
CARD8 xgifb_caps; /* xgifb's capabilities */
|
|
|
|
CARD32 xgifb_tqlen; /* turbo queue length (in KB) */
|
|
|
|
CARD32 xgifb_pcibus; /* The card's PCI ID */
|
|
CARD32 xgifb_pcislot;
|
|
CARD32 xgifb_pcifunc;
|
|
|
|
CARD8 xgifb_lcdpdc;
|
|
|
|
CARD8 xgifb_lcda;
|
|
|
|
CARD32 xgifb_vbflags;
|
|
CARD32 xgifb_currentvbflags;
|
|
|
|
CARD32 xgifb_scalelcd;
|
|
CARD32 xgifb_specialtiming;
|
|
|
|
CARD8 xgifb_haveemi;
|
|
CARD8 xgifb_emi30,xgifb_emi31,xgifb_emi32,xgifb_emi33;
|
|
CARD8 xgifb_haveemilcd;
|
|
|
|
CARD8 xgifb_lcdpdca;
|
|
|
|
CARD8 reserved[212]; /* for future use */
|
|
};
|
|
#endif
|
|
|
|
#endif
|
|
|