Initial revision

parents
<!DOCTYPE linuxdoc PUBLIC "-//XFree86//DTD linuxdoc//EN" [
<!ENTITY % defs SYSTEM "defs.ent"> %defs;
]>
<article>
<title>Information for i810 Users
<author>Precision Insight, Inc.
<date>3 March 2000
<ident>
$XFree86: xc/programs/Xserver/hw/xfree86/doc/sgml/i810.sgml,v 1.3 2001/04/04 01:34:18 dawes Exp $
</ident>
<toc>
<sect>Supported Hardware
<p>
<itemize>
<item>Intel 810 motherboards:
<itemize>
<item>i810,
<item>i810-dc100,
<item>i810e
<item>i815
</itemize>
</itemize>
<sect>Features
<p>
<itemize>
<item>Full support for 8, 15, 16, and 24 bit pixel depths.
<item>Hardware cursor support to reduce sprite flicker.
<item>Hardware accelerated 2D drawing engine support for 8, 15, 16 and
24 bit pixel depths.
<item>Support for high resolution video modes up to 1600x1200.
<item>Fully programmable clock supported.
<item>Robust text mode restore for VT switching.
</itemize>
<sect>Technical Notes
<p>
<itemize>
<item>Hardware acceleration is not possible when using the framebuffer
in 32 bit per pixel format, and this mode is not supported by
this driver.
<item>Interlace modes cannot be supported.
<item>This driver currently only works for Linux/ix86 and recent versions
of FreeBSD. It requires the agpgart kernel support, which is
included in Linux kernels 2.3.42 and higher, and FreeBSD 4.1
and higher.
</itemize>
<sect>Reported Working Video Cards
<p>
<itemize>
<item>Intel evaluation hardware - i810, i810-dc100, i810e and i815.
<item>Tyan Tomcat Motherboard.
<item>HappyPC set-top box.
</itemize>
<sect>Configuration
<p>
The driver auto-detects all device information necessary to
initialize the card. The only lines you need in the "Device"
section of your XF86Config file are:
<verb>
Section "Device"
Identifier "Intel i810"
Driver "i810"
EndSection
</verb>
or let <tt>xf86config</tt> do this for you.
However, if you have problems with auto-detection, you can specify:
<itemize>
<item>DacSpeed - in MHz
<item>MemBase - physical address of the linear framebuffer
<item>IOBase - physical address of the memory mapped IO registers
</itemize>
In order to use most resolutions, it is necessary to install the
'agpgart.o' module. You will probably have to compile the module yourself
(see the notes in the module).
Note: the i810 driver detects whether your motherboard has display cache
video memory. This memory is has reduced bandwidth compared to normal
system memory, and isn't used by the server. The main function of this
memory is for ancillary buffers (eg. z buffer) in a forthcoming 3d
capable server.
<sect>Driver Options
<p>
<itemize>
<item>"NoAccel" - Turn off hardware acceleration
<item>"SWCursor" - Request a software cursor (hardware is default)
<item>"Dac6Bit" - Force the use of a 6 Bit Dac (8 Bit is the default)
</itemize>
<sect>Known Limitations
<p>
<itemize>
<item>No 3D support in this release.
<item>Running two X servers on different VTs is not supported at this time.
</itemize>
<sect>Author
<p>
<itemize>
<item>Keith Whitwell
</itemize>
This driver was donated to The XFree86 Project by:
<verb>
Precision Insight, Inc.
Cedar Park, TX
USA
</verb>
<htmlurl name="http://www.precisioninsight.com"
url="http://www.precisioninsight.com">
</article>
.\" $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i810.man,v 1.3 2003/02/17 19:19:02 dawes Exp $
.\" shorthand for double quote that works everywhere.
.ds q \N'34'
.TH I810 __drivermansuffix__ __vendorversion__
.SH NAME
i810 \- Intel 8xx integrated graphics chipsets
.SH SYNOPSIS
.nf
.B "Section \*qDevice\*q"
.BI " Identifier \*q" devname \*q
.B " Driver \*qi810\*q"
\ \ ...
.B EndSection
.fi
.SH DESCRIPTION
.B i810
is an XFree86 driver for Intel integrated graphics chipsets.
The driver supports depths 8, 15, 16 and 24. All visual types are
supported in depth 8, other depths only support TrueColor. The driver
supports hardware accelerated 3D via the Direct Rendering Infrastructure (DRI),
but only in depth 16 for the i810/i815 and depths 16 and 24 for later chipsets.
.SH SUPPORTED HARDWARE
.B i810
supports the i810, i810-DC100, i810e, i815, 830M, 845G, 852GM, 855GM,
and 865G chipsets.
.SH CONFIGURATION DETAILS
Please refer to XF86Config(__filemansuffix__) for general configuration
details. This section only covers configuration details specific to this
driver.
.PP
The Intel 8xx family of integrated graphics chipsets has a unified memory
architecture and uses system memory for video ram. By default 8 Megabytes
of system memory are used for graphics. For the 830M and later, the
default is 8 Megabytes when DRI is not enabled and 32 Megabytes with
DRI is enabled. This amount may be changed with the
.B VideoRam
entry in the config file
.B "Device"
section. It may be set to any reasonable value up to 64MB for older
chipsets or 128MB for newer chipets. Note that increasing this value
will reduce the amount of system memory available for other applications.
.PP
The following driver
.B Options
are supported
.TP
.BI "Option \*qNoAccel\*q \*q" boolean \*q
Disable or enable acceleration. Default: acceleration is enabled.
.TP
.BI "Option \*qSWCursor\*q \*q" boolean \*q
Disable or enable software cursor. Default: software cursor is disable
and a hardware cursor is used.
.TP
.BI "Option \*qColorKey\*q \*q" integer \*q
This sets the default pixel value for the YUV video overlay key.
Default: undefined.
.TP
.BI "Option \*qCacheLines\*q \*q" integer \*q
This allows the user to change the amount of graphics memory used for
2D acceleration and video. Decreasing this amount leaves more for 3D
textures. Increasing it can improve 2D performance at the expense of
3D performance.
Default: 256 to 768 depending on the resolution and depth.
.SH "SEE ALSO"
XFree86(1), XF86Config(__filemansuffix__), xf86config(1), Xserver(1), X(__miscmansuffix__)
.SH AUTHORS
Authors include: Keith Whitwell, and also Jonathan Bian, Matthew J Sottek,
Jeff Hartmann, Mark Vojkovich, Alan Hourihane, H. J. Lu. 830M and 845G
support reworked for XFree86 4.3 by David Dawes and Keith Whitwell.
852GM, 855GM, and 865G support added by David Dawes and Keith Whitwell.
/**************************************************************************
Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
Copyright 2002 David Dawes
All Rights Reserved.
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sub license, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice (including the
next paragraph) shall be included in all copies or substantial portions
of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
**************************************************************************/
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/common.h,v 1.6 2003/02/06 04:18:04 dawes Exp $ */
/*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
* David Dawes <dawes@tungstengraphics.com>
*
*/
#ifndef _INTEL_COMMON_H_
#define _INTEL_COMMON_H_
#ifdef __GNUC__
#define PFX __FILE__,__LINE__,__FUNCTION__
#define FUNCTION_NAME __FUNCTION__
#else
#define PFX __FILE__,__LINE__,""
#define FUNCTION_NAME ""
#endif
#ifdef I830DEBUG
#define MARKER() ErrorF("\n### %s:%d: >>> %s <<< ###\n\n", \
__FILE__, __LINE__,__FUNCTION__)
#define DPRINTF I830DPRINTF_stub
#else /* #ifdef I830DEBUG */
#define MARKER()
/* this is a real ugly hack to get the compiler to optimize the debugging statements into oblivion */
#define DPRINTF if(0) I830DPRINTF_stub
#endif /* #ifdef I830DEBUG */
#define KB(x) ((x) * 1024)
#define MB(x) ((x) * KB(1024))
/* Using usleep() makes things noticably slow. */
#if 0
#define DELAY(x) usleep(x)
#else
#define DELAY(x) do {;} while (0)
#endif
/* I830 hooks for the I810 driver setup/probe. */
extern const OptionInfoRec *I830BIOSAvailableOptions(int chipid, int busid);
extern void I830InitpScrn(ScrnInfoPtr pScrn);
/* Symbol lists shared by the i810 and i830 parts. */
extern const char *I810vgahwSymbols[];
extern const char *I810ramdacSymbols[];
extern const char *I810int10Symbols[];
extern const char *I810vbeSymbols[];
extern const char *I810ddcSymbols[];
extern const char *I810fbSymbols[];
extern const char *I810xaaSymbols[];
extern const char *I810shadowSymbols[];
extern void I830DPRINTF_stub(const char *filename, int line,
const char *function, const char *fmt, ...);
#ifdef _I830_H_
#define PrintErrorState I830PrintErrorState
#define WaitRingFunc I830WaitLpRing
#define RecPtr pI830
#else
#define PrintErrorState I810PrintErrorState
#define WaitRingFunc I810WaitLpRing
#define RecPtr pI810
#endif
/* BIOS debug macro */
#define xf86ExecX86int10_wrapper(pInt, pScrn) do { \
if (I810_DEBUG & DEBUG_VERBOSE_BIOS) { \
ErrorF("\n\n\n\nExecuting (ax == 0x%x) BIOS call\n", pInt->ax); \
ErrorF("Checking Error state before execution\n"); \
PrintErrorState(pScrn); \
} \
xf86ExecX86int10(pInt); \
if(I810_DEBUG & DEBUG_VERBOSE_BIOS) { \
ErrorF("Checking Error state after execution\n"); \
usleep(50000); \
PrintErrorState(pScrn); \
} \
} while (0)
#define OUT_RING(n) do { \
if (I810_DEBUG & DEBUG_VERBOSE_RING) \
ErrorF( "OUT_RING %x: %x, (mask %x)\n", outring, n, ringmask); \
*(volatile unsigned int *)(virt + outring) = n; \
outring += 4; \
outring &= ringmask; \
} while (0)
#if 1
#define ADVANCE_LP_RING() do { \
RecPtr->LpRing.tail = outring; \
if (outring & 0x07) \
ErrorF("ADVANCE_LP_RING: " \
"outring (0x%x) isn't on a QWord boundary", outring); \
OUTREG(LP_RING + RING_TAIL, outring); \
} while (0)
#else
#define ADVANCE_LP_RING() { \
RecPtr->LpRing.tail = outring; \
if (outring & 0x07) \
ErrorF("ADVANCE_LP_RING: " \
"outring (0x%x) isn't on a QWord boundary", outring); \
ErrorF("head is %d, tail is %d [%d]\n", INREG(LP_RING + RING_HEAD), INREG(LP_RING + RING_TAIL), outring); \
OUTREG(LP_RING + RING_TAIL, outring); \
ErrorF("head is %d, tail is %d [%d]\n", INREG(LP_RING + RING_HEAD), INREG(LP_RING + RING_TAIL), outring); \
}
#endif
/*
* XXX Note: the head/tail masks are different for 810 and i830.
* If the i810 always sets the higher bits to 0, then this shouldn't be
* a problem. Check this!
*/
#define DO_RING_IDLE() do { \
int _head; \
int _tail; \
do { \
_head = INREG(LP_RING + RING_HEAD) & I830_HEAD_MASK; \
_tail = INREG(LP_RING + RING_TAIL) & I830_TAIL_MASK; \
DELAY(10); \
} while (_head != _tail); \
} while( 0)
/*
* This is for debugging a potential problem writing the tail pointer
* close to the end of the ring buffer.
*/
#ifndef AVOID_TAIL_END
#define AVOID_TAIL_END 0
#endif
#ifndef AVOID_SIZE
#define AVOID_SIZE 64
#endif
#if AVOID_TAIL_END
#define BEGIN_LP_RING(n) \
unsigned int outring, ringmask; \
volatile unsigned char *virt; \
unsigned int needed; \
if ((n) & 1) \
ErrorF("BEGIN_LP_RING called with odd argument: %d\n", n); \
if ((n) > 2 && (I810_DEBUG&DEBUG_ALWAYS_SYNC)) \
DO_RING_IDLE(); \
needed = (n) * 4; \
if ((RecPtr->LpRing.tail > RecPtr->LpRing.tail_mask - AVOID_SIZE) || \
(RecPtr->LpRing.tail + needed) > \
RecPtr->LpRing.tail_mask - AVOID_SIZE) { \
needed += RecPtr->LpRing.tail_mask + 1 - RecPtr->LpRing.tail; \
ErrorF("BEGIN_LP_RING: skipping last 64 bytes of " \
"ring (%d vs %d)\n", needed, (n) * 4); \
} \
if (RecPtr->LpRing.space < needed) \
WaitRingFunc(pScrn, needed, 0); \
RecPtr->LpRing.space -= needed; \
outring = RecPtr->LpRing.tail; \
ringmask = RecPtr->LpRing.tail_mask; \
virt = RecPtr->LpRing.virtual_start; \
while (needed > (n) * 4) { \
ErrorF("BEGIN_LP_RING: putting MI_NOOP at 0x%x (remaining %d)\n", \
outring, needed - (n) * 4); \
OUT_RING(MI_NOOP); \
needed -= 4; \
} \
if (I810_DEBUG & DEBUG_VERBOSE_RING) \
ErrorF( "BEGIN_LP_RING %d in %s\n", n, FUNCTION_NAME);
#else /* AVOID_TAIL_END */
#define BEGIN_LP_RING(n) \
unsigned int outring, ringmask; \
volatile unsigned char *virt; \
unsigned int needed; \
if ((n) & 1) \
ErrorF("BEGIN_LP_RING called with odd argument: %d\n", n); \
if ((n) > 2 && (I810_DEBUG&DEBUG_ALWAYS_SYNC)) \
DO_RING_IDLE(); \
needed = (n) * 4; \
if (RecPtr->LpRing.space < needed) \
WaitRingFunc(pScrn, needed, 0); \
RecPtr->LpRing.space -= needed; \
outring = RecPtr->LpRing.tail; \
ringmask = RecPtr->LpRing.tail_mask; \
virt = RecPtr->LpRing.virtual_start; \
if (I810_DEBUG & DEBUG_VERBOSE_RING) \
ErrorF( "BEGIN_LP_RING %d in %s\n", n, FUNCTION_NAME);
#endif /* AVOID_TAIL_END */
/* Memory mapped register access macros */
#define INREG8(addr) *(volatile CARD8 *)(RecPtr->MMIOBase + (addr))
#define INREG16(addr) *(volatile CARD16 *)(RecPtr->MMIOBase + (addr))
#define INREG(addr) *(volatile CARD32 *)(RecPtr->MMIOBase + (addr))
#define OUTREG8(addr, val) do { \
*(volatile CARD8 *)(RecPtr->MMIOBase + (addr)) = (val); \
if (I810_DEBUG&DEBUG_VERBOSE_OUTREG) { \
ErrorF("OUTREG8(0x%x, 0x%x) in %s\n", addr, val, FUNCTION_NAME); \
} \
} while (0)
#define OUTREG16(addr, val) do { \
*(volatile CARD16 *)(RecPtr->MMIOBase + (addr)) = (val); \
if (I810_DEBUG&DEBUG_VERBOSE_OUTREG) { \
ErrorF("OUTREG16(0x%x, 0x%x) in %s\n", addr, val, FUNCTION_NAME); \
} \
} while (0)
#define OUTREG(addr, val) do { \
*(volatile CARD32 *)(RecPtr->MMIOBase + (addr)) = (val); \
if (I810_DEBUG&DEBUG_VERBOSE_OUTREG) { \
ErrorF("OUTREG(0x%x, 0x%x) in %s\n", addr, val, FUNCTION_NAME); \
} \
} while (0)
/* To remove all debugging, make sure I810_DEBUG is defined as a
* preprocessor symbol, and equal to zero.
*/
#if 1
#define I810_DEBUG 0
#endif
#ifndef I810_DEBUG
#warning "Debugging enabled - expect reduced performance"
extern int I810_DEBUG;
#endif
#define DEBUG_VERBOSE_ACCEL 0x1
#define DEBUG_VERBOSE_SYNC 0x2
#define DEBUG_VERBOSE_VGA 0x4
#define DEBUG_VERBOSE_RING 0x8
#define DEBUG_VERBOSE_OUTREG 0x10
#define DEBUG_VERBOSE_MEMORY 0x20
#define DEBUG_VERBOSE_CURSOR 0x40
#define DEBUG_ALWAYS_SYNC 0x80
#define DEBUG_VERBOSE_DRI 0x100
#define DEBUG_VERBOSE_BIOS 0x200
/* Size of the mmio region.
*/
#define I810_REG_SIZE 0x80000
#ifndef PCI_CHIP_I810
#define PCI_CHIP_I810 0x7121
#define PCI_CHIP_I810_DC100 0x7123
#define PCI_CHIP_I810_E 0x7125
#define PCI_CHIP_I815 0x1132
#define PCI_CHIP_I810_BRIDGE 0x7120
#define PCI_CHIP_I810_DC100_BRIDGE 0x7122
#define PCI_CHIP_I810_E_BRIDGE 0x7124
#define PCI_CHIP_I815_BRIDGE 0x1130
#endif
#ifndef PCI_CHIP_I855_GM
#define PCI_CHIP_I855_GM 0x3582
#define PCI_CHIP_I855_GM_BRIDGE 0x3580
#endif
#ifndef PCI_CHIP_I865_G
#define PCI_CHIP_I865_G 0x2572
#define PCI_CHIP_I865_G_BRIDGE 0x2570
#endif
#define IS_I810(pI810) (pI810->PciInfo->chipType == PCI_CHIP_I810 || \
pI810->PciInfo->chipType == PCI_CHIP_I810_DC100 || \
pI810->PciInfo->chipType == PCI_CHIP_I810_E)
#define IS_I815(pI810) (pI810->PciInfo->chipType == PCI_CHIP_I815)
#define IS_I830(pI810) (pI810->PciInfo->chipType == PCI_CHIP_I830_M)
#define IS_845G(pI810) (pI810->PciInfo->chipType == PCI_CHIP_845_G)
#define IS_I85X(pI810) (pI810->PciInfo->chipType == PCI_CHIP_I855_GM)
#define IS_I865G(pI810) (pI810->PciInfo->chipType == PCI_CHIP_I865_G)
#define IS_MOBILE(pI810) (IS_I830(pI810) || IS_I85X(pI810))
#define GTT_PAGE_SIZE KB(4)
#define ROUND_TO(x, y) (((x) + (y) - 1) / (y) * (y))
#define ROUND_DOWN_TO(x, y) ((x) / (y) * (y))
#define ROUND_TO_PAGE(x) ROUND_TO((x), GTT_PAGE_SIZE)
#define ROUND_TO_MB(x) ROUND_TO((x), MB(1))
#define PRIMARY_RINGBUFFER_SIZE KB(128)
#define MIN_SCRATCH_BUFFER_SIZE KB(16)
#define MAX_SCRATCH_BUFFER_SIZE KB(64)
#define HWCURSOR_SIZE GTT_PAGE_SIZE
#define OVERLAY_SIZE GTT_PAGE_SIZE
/* Use a 64x64 HW cursor */
#define I810_CURSOR_X 64
#define I810_CURSOR_Y I810_CURSOR_X
/* XXX Need to check if these are reasonable. */
#define MAX_DISPLAY_PITCH 2048
#define MAX_DISPLAY_HEIGHT 2048
#define PIPE_NAME(n) ('A' + (n))
#endif /* _INTEL_COMMON_H_ */
/**************************************************************************
Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
Copyright 2002 David Dawes
All Rights Reserved.
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sub license, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice (including the
next paragraph) shall be included in all copies or substantial portions
of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
**************************************************************************/
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i810.h,v 1.38 2003/02/26 04:19:36 dawes Exp $ */
/*
* Authors:
* Keith Whitwell <keith@tungstengraphics.com>
* David Dawes <dawes@tungstengraphics.com>
*
*/
#ifndef _I810_H_
#define _I810_H_
#include "xf86_ansic.h"
#include "compiler.h"
#include "xf86PciInfo.h"
#include "xf86Pci.h"
#include "i810_reg.h"
#include "xaa.h"
#include "xf86Cursor.h"
#include "xf86xv.h"
#include "xf86int10.h"
#include "vbe.h"
#include "vgaHW.h"
#ifdef XF86DRI
#include "xf86drm.h"
#include "sarea.h"
#define _XF86DRI_SERVER_
#include "xf86dri.h"
#include "dri.h"
#include "GL/glxint.h"
#include "i810_dri.h"
#endif
#include "common.h"
#define I810_VERSION 4000
#define I810_NAME "I810"
#define I810_DRIVER_NAME "i810"
#define I810_MAJOR_VERSION 1
#define I810_MINOR_VERSION 3
#define I810_PATCHLEVEL 0
/* HWMC Surfaces */
#define I810_MAX_SURFACES 7
#define I810_MAX_SUBPICTURES 2
#define I810_TOTAL_SURFACES 9
/* Globals */
typedef struct _I810Rec *I810Ptr;
typedef void (*I810WriteIndexedByteFunc)(I810Ptr pI810, IOADDRESS addr,
CARD8 index, CARD8 value);
typedef CARD8(*I810ReadIndexedByteFunc)(I810Ptr pI810, IOADDRESS addr,
CARD8 index);
typedef void (*I810WriteByteFunc)(I810Ptr pI810, IOADDRESS addr, CARD8 value);
typedef CARD8(*I810ReadByteFunc)(I810Ptr pI810, IOADDRESS addr);
extern void I810SetTiledMemory(ScrnInfoPtr pScrn, int nr, unsigned start,
unsigned pitch, unsigned size);
typedef struct {
unsigned long Start;
unsigned long End;
unsigned long Size;
} I810MemRange;
typedef struct {
int tail_mask;
I810MemRange mem;
unsigned char *virtual_start;
int head;
int tail;
int space;
} I810RingBuffer;
typedef struct {
unsigned char DisplayControl;
unsigned char PixelPipeCfg0;
unsigned char PixelPipeCfg1;
unsigned char PixelPipeCfg2;
unsigned short VideoClk2_M;
unsigned short VideoClk2_N;
unsigned char VideoClk2_DivisorSel;
unsigned char AddressMapping;
unsigned char IOControl;
unsigned char BitBLTControl;
unsigned char ExtVertTotal;
unsigned char ExtVertDispEnd;
unsigned char ExtVertSyncStart;
unsigned char ExtVertBlankStart;
unsigned char ExtHorizTotal;
unsigned char ExtHorizBlank;
unsigned char ExtOffset;
unsigned char InterlaceControl;
unsigned int LMI_FIFO_Watermark;
unsigned int LprbTail;
unsigned int LprbHead;
unsigned int LprbStart;
unsigned int LprbLen;
unsigned int Fence[8];
unsigned short OverlayActiveStart;
unsigned short OverlayActiveEnd;
} I810RegRec, *I810RegPtr;
typedef struct _I810Rec {
unsigned char *MMIOBase;
unsigned char *FbBase;
long FbMapSize;
long DepthOffset;
long BackOffset;
int cpp;
int MaxClock;
unsigned int bufferOffset; /* for I810SelectBuffer */
Bool DoneFrontAlloc;
BoxRec FbMemBox;
I810MemRange FrontBuffer;
I810MemRange BackBuffer;
I810MemRange DepthBuffer;
I810MemRange TexMem;
I810MemRange Scratch;
I810MemRange BufferMem;
I810MemRange ContextMem;
I810MemRange MC;
int auxPitch;
int auxPitchBits;
int CursorOffset;
unsigned long CursorPhysical;
unsigned long CursorStart;
unsigned long OverlayPhysical;
unsigned long OverlayStart;
int colorKey;
int surfaceAllocation[I810_TOTAL_SURFACES];
int numSurfaces;
DGAModePtr DGAModes;
int numDGAModes;
Bool DGAactive;
int DGAViewportStatus;
int Chipset;
unsigned long LinearAddr;
unsigned long MMIOAddr;
IOADDRESS ioBase;
EntityInfoPtr pEnt;
pciVideoPtr PciInfo;
PCITAG PciTag;
I810RingBuffer LpRing;
unsigned int BR[20];
int LmFreqSel;