summaryrefslogtreecommitdiff
path: root/src/xgi.h
blob: 10bc6b38e0e90250dbf51280f8eb6580fdc8215c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
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
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
/***************************************************************************
 * Copyright (C) 2003-2006 by XGI Technology, Taiwan.			   *
 *									   *
 * 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 on the rights to use, copy, modify, merge,	   *
 * publish, distribute, sublicense, 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 XGI 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.						   *
 ***************************************************************************/

#ifndef _XGI_H_
#define _XGI_H_

#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <fcntl.h>
#include <math.h>
#include <sys/mman.h>
/*#include <sys/ioctl.h>*/

#include "xf86str.h"        /* ScrnInfoPtr */
#ifdef XSERVER_LIBPCIACCESS
#include <pciaccess.h>
#else
#include "xf86Pci.h"        /* PCI config space */
#endif
#ifdef HAVE_XAA_H
#include "xaa.h"            /* XAA and Cursor Support */
#endif
#include "xf86fbman.h"
#include "xf86Cursor.h"
#include "xf86DDC.h"        /* DDC support */
#include "xf86xv.h"         /* Xv support */
#include "shadowfb.h"       /* RefreshAreaFuncPtr */
#include "xf86RamDac.h"     /* RamDacRecPtr */
#include "xf86int10.h"      /* xf86Int10InfoPtr */
#include "vbe.h"            /* vbeInfoPtr */
#include "shadow.h"         /* shadowBufPtr */
#include "vgaHW.h"          /* VGAHWPTR */
#include "xf86.h"           /* xf86Screens */

#define _XF86DRI_SERVER_
#include <GL/glxint.h>
#include "dri.h"

#include "compat-api.h"
/* Jong 09/06/2006; support dual view */
#define	XGIDUALVIEW

#ifndef PCI_CHIP_0047
#define PCI_CHIP_0047   0x0047
#endif

#ifndef PCI_VENDOR_XGI
#define PCI_VENDOR_XGI  0x18CA

#endif

#define XGI_MMIO_SIZE   0x20000

#define XGI_CURSOR_BUF_SIZE (128 * 128 * 4)

#define MAX_VGA_MODE_NO 13

#define NTSC            14.31818
#define PAL             17.73448

#define __DEBUG_FUNC__	

#ifdef __DEBUG_FUNC__
#define ENABLE_HW_SOLIDLINE  (pXGI->EnableSolidLine)
#define ENABLE_HW_SOLIDFILL  (pXGI->EnableSolidFill)
#define ENABLE_HW_SRC2SRC    (pXGI->EnableSrc2Src)
#define ENABLE_HW_8X8PATTERN (pXGI->Enable8x8Pattern)
#define ENABLE_HW_8X8MONOPAT (pXGI->Enable8x8MonoPat)
#define ENABLE_HW_IMAGEWRITE (pXGI->EnableImageWrite)
#else
#define ENABLE_HW_SOLIDLINE   1
#define ENABLE_HW_SOLIDFILL   1
#define ENABLE_HW_SRC2SRC     1
#define ENABLE_HW_8X8PATTERN  1
#define ENABLE_HW_8X8MONOPAT  1
#define ENABLE_HW_IMAGEWRITE  1
#endif

/* Jong 07/26/2006; enable DPMS */
/* #define DPMSExtension */

/* Jong 09/21/2006; support dual view */
/* #define XGI_DUMP_DUALVIEW */
/* #define CURSOR_DEBUG */

/* #ifndef XGI_DUMP
#define XGI_DUMP
#endif */

/*#ifndef XGI_DEBUG
#define XGI_DEBUG
#endif*/

/* Jong 11/28/2006; enable XvExtension */
/* #define XvExtension */

#ifdef XGI_DEBUG
#define XGITRACE(x) \
    do \
    { \
        ErrorF("(**) %s(%d): ", XGI_NAME, pScrn->scrnIndex); \
        ErrorF x; \
    } while (0);
#else
#define XGITRACE(x)
#endif


/*
 * XGI chipset Definitions
 */

/* Supported chipsets */
typedef enum {
    XG47
} XGIChipType;

/*
 * Child device define
 * MAX device numbers
 */
#define MAX_DEVICE_NUM      4
#define LCD_DEVICE_INDEX    0
#define CRT_DEVICE_INDEX    1
#define TV_DEVICE_INDEX     2
#define DVI_DEVICE_INDEX    3
#define DEVICE_INDEX_FLAG   0x80000000

/* Jong 09/11/2006; use low nible of first byte */
#define ST_DISP_LCD         0x00000001
#define ST_DISP_CRT         0x00000002
#define ST_DISP_TV          0x00000004
#define ST_DISP_DVI         0x00000008

/* Jong 09/11/2006; use high nible of first byte */
#define ST_DISP_LCD_MV      (ST_DISP_LCD << MAX_DEVICE_NUM)
#define ST_DISP_CRT_MV      (ST_DISP_CRT << MAX_DEVICE_NUM)
#define ST_DISP_TV_MV       (ST_DISP_TV << MAX_DEVICE_NUM)
#define ST_DISP_DVI_MV      (ST_DISP_DVI << MAX_DEVICE_NUM)
#define ST_DISP_VID         (1 << (2 * MAX_DEVICE_NUM))

#define ST_DISP_SINGLE      ((1 << MAX_DEVICE_NUM) - 1)
#define ST_DISP_DUALVIEW    (((1 << MAX_DEVICE_NUM) - 1) << MAX_DEVICE_NUM)
#define ST_DISP_MASK        (ST_DISP_DUALVIEW | ST_DISP_SINGLE)

/* Define DevStatus
   Two HWDeviceExtensions have different status. */
typedef unsigned long DEVSTATUS;

#define DEVST_MHS_DUALVIEW_ENABLE       0x00000001         /* DualView(MHS) enabled. */

/* For Set Mode */
#define DEVST_SIMULATE_MODE             0x00000010
#define DEVST_DOS_FULL_SCREEN           0x00000020

/* For Device */
#define DEVST_PANEL_EXPANSION           0x00000040       /*Full screen expansion mode */
#define DEVST_PANEL_CENTERING           0x00000080       /*Screen centering mode */
#define DEVST_PANEL_V_EXPANSION         0x00000100       /*Aspect ratio expansion mode */
#define DEVST_PANEL_EXPANSION_MASK      (DEVST_PANEL_EXPANSION | DEVST_PANEL_CENTERING | DEVST_PANEL_V_EXPANSION)
#define DEVST_LCDTVONDESKTOP            0x00000200       /* LCD+TV when enter DOS full screen */

/* Misc */
#define DEVST_GAMMA_ENABLED             0x00000400
/* End DEVSTATUS */

/* Define HwStatus */
/* The current display adapter status */
typedef unsigned long HWSTATUS;

/*#define HWST_OVERLAY_PDEV_IDX_MASK  0x00000003*/       /* two bits for PdevIdx (0 to 3), support up to  four indices */
/*#define HWST_OVERLAY_USED           0x00000004*/       /* overlay running */

/* Set / Use just in display driver */

/* Set / Use just in miniport */
#define HWST_RESUME_FROM_STANDBY    0x00010000       /* Resume From Standby */
#define HWST_NEED_INITIALIZE_DTV    0x00040000
#define HWST_POWER_BOOTRESUME       0x00100000

#define HWST_GE_DISABLED            0x20000000
/* End HwStatus */

/* Define GraCaps */
/* caps */
typedef unsigned long GRACAPS;

/* For HW      (0  --- 11) */
#define GRACAPS_PANNING                 0x00000001       /* Enable/Disable PANNING ablility */
#define GRACAPS_CURSOR64                0x00000002       /* Is hw support 32*32 bits cursor? Michael for Monterey */
#define GRACAPS_MMX                     0x00000004       /* actually CPU's cap. */
#define GRACAPS_PCI_CMDLIST_OFF_BY_REG  0x00000008       /* PCI CommandList Off */
#define GRACAPS_GAMMA_BY_REG            0x00000010       /* Enable gamma correction */
#define GRACAPS_POWER_SAVING_ON_BY_REG  0x00000020       /* Enable Power Saving Mode */

/* For utility (12 --- 31) */
#define GRACAPS_MODE_FOR_EACH_USER      0x00001000       /* different resolution for each user */
#define GRACAPS_OVERLAY_FULLSCREEN      0x00002000       /* overlay fullscreen in secondary device under contain mode */
#define GRACAPS_HOTKEY_ROTATION         0x00004000       /* enable hotkey loop under rotation mode */
#define GRACAPS_SWAP_HEAD               0x00008000       /* swap head under MHS */
#define GRACAPS_HOTKEY_MHS              0x00020000       /* enable hotkey under MHS */
#define GRACAPS_LCDLID_CLOSED           0x00040000       /* close LCD when LCD lid closes */
#define GRACAPS_DISABLE_PANNING_BY_REG  0x00080000       /* If this bit set, we do not report modes bigger than device physical size on LCD & DVI */
#define GRACAPS_TABLET_PC_BY_REG        0x00100000       /* Tablet PC. */
#define GRACAPS_3D_TEXTURE_CAPS_BY_REG  0x00200000       /* Adjust texture capability */

#ifdef T_ROTATION
#define GRACAPS_ROTATION_BY_REG         0x00400000       /* Adjust texture capability */
#endif

#define GRACAPS_CONTROL_HSCB            0x00800000       /* If the Utility can adjust HSCB */

/* End GRACAPS */

/* Define HwCaps */
typedef unsigned long HWCAPS;

#define HWCAPS_NONE                    0x00000000

/* For PCI configuration */
#define HWCAPS_AGP                     0x00000001       /* AGP caps */
#define HWCAPS_INTERNALBUS_64          0x00000002       /* Force 64 Bits Internal Bus only */
#define HWCAPS_INTERNALBUS_128         0x00000004       /* Using 64/128 Bit Internal Bus */
#define HWCAPS_DUAL_PORT               0x00000008       /* Enable/Disable Dual Port */
#define HWCAPS_LOW_LEVEL_PRODUCT       0x00000010       /* Low level product (<= 32M video memory) */

/* For Device */
#define HWCAPS_CRT                     0x00000100       /* support CRT output */
#define HWCAPS_LCD                     0x00000200       /* LCD chips, we can ask BIOS. */
#define HWCAPS_TV                      0x00000400       /* TV display */
#define HWCAPS_DVI                     0x00000800       /* DVI display */
#define HWCAPS_MUTEX_DVI_CRT           0x00001000       /* We can't turn on DVI+CRT together */
                                                        /* For example, 7116 card */

/* For D3D */
#define HWCAPS_PURE_DEVICE             0x00010000       /* Enable/Disable Pure Device */

/* Others */
#define HWCAPS_CURSOR_IN_DUALVIEW      0x01000000       /* For HW cursor support at LCD view of DUAL VIEW mode. */
#define HWCAPS_ALPHA_HW_MAX            0x02000000       /* Full Hardware Alpha cursor support */
#define HWCAPS_POWER_SAVING            0x04000000       /* Power Saving enable. */
#define HWCAPS_GAMMA                   0x08000000       /* Support Gamma */

/* End DEVCAPS */

/* Define GRASTATUS */
typedef unsigned long GRASTATUS;

/* Graphic Status */
#define GST_NO_ACCELERATOR              0x00000001          /* No accelerator */
#define GST_SW_CURSOR                   0x00000002          /* no hardware pointer. */
#define GST_INTERLACED                  0x00000004
#define GST_DDRAW                       0x00000008          /* directDraw enable. */
#define GST_HWSP_ENABLED                0x00000010          /* h/w subpicture feature enabled */
#define GST_ALPHA_CURSOR                0x00000020          /* Alpha cursor enabled. */
#define GST_ROTATION                    0x00000040          /* Rotation definition */
#define GST_DIB                         0x00000080
#define GST_AGP_ENABLE                  0x00000100          /* AGP version */
#define GST_PCIE_ENABLE                 0x00000200          /* PCI-E version */

/* End GRASTATUS */

typedef struct xgi_regs {
    /**
     * Extended registers at 0x3cf
     */
    uint8_t gra[0x10];


    /**
     * Extended CRTC control registers
     */
    uint8_t crtc[0x100];


    /**
     * Extended sequencer registers
     */
    uint8_t seq[0x29];


    /**
     * Alternate clock select
     * 
     * [7  ] - Enable display memory clock divide by 2
     * [6:5] - Video clock divide
     *     0 0 = divide by 1
     *     0 1 = divide by 2
     *     1 0 = divide by 3
     *     1 1 = divide by 4
     * [4:2] - Reserved
     * [1:0] - Video clock select
     *
     * Stored at 0x3db
     */
    uint8_t alt_clock_select;


    /**
     * SYNDAC command register
     */
    uint8_t syndac_command;
} *XGIRegPtr;

/* modeNo:
 * |--------'--------|
 *  |||||||| ||||||||
 *  |||||||| |'''''''- TVGA video mode number.
 *  |||||||| '-------- flag of clear screen.
 *  |'''''''---------- Base video mode number.
 *  '----------------- reserved.
 *
 * condition:
 * |--------'--------|--------'--------|
 *  |||||||| |||||||| |||||||| ||||||||
 *  |||||||| |||||||| |||||||| |||||||'- support with LCD.
 *  |||||||| |||||||| |||||||| ||||||'-- support with CRT.
 *  |||||||| |||||||| |||||||| |||||'--- support with LCD & CRT.
 *  |||||||| |||||||| |||||||| ||||'---- support with TV.
 *  |||||||| |||||||| |||||||| |||'----- support with LCD & TV.
 *  |||||||| |||||||| |||||||| ||'------ support with TV & CRT.
 *  |||||||| |||||||| |||||||| |'------- support with LCD & CRT & TV.
 *  |||||||| |||||||| |||||||| '-------- Dual view support.
 *  |||||||| |||||||| |||||||'---------- LCD standard (TFT/STN).
 *  |||||||| |||||||| ||||||'----------- Centering/Expansion
 *  |||||||| |||||||| ''''''------------ reserved for LCD.
 *  |||||||| |||||||'------------------- TV standard (NTSC).
 *  |||||||| ||||||'-------------------- TV standard (PAL).
 *  |||||||| |||||'--------------------- TV scanline (underscan).
 *  |||||||| ||||'---------------------- TV scanline (overscan).
 *  |||||||| ''''----------------------- reserved for TV.
 *  |'''''''---------------------------- reserved.
 *  '----------------------------------- Extended/Standard set mode method(1200/mode no).
 */
typedef struct {
    CARD16  width;              /* width of the graphic mode in pixel. */
    CARD16  height;             /* height of the graphic mode in scanline.*/
    CARD16  pixelSize;          /* bits/pixel of the graphic mode. */
    CARD16  refRate;
    CARD16  refSupport;         /* bios will fill this field when call bios */
    CARD16  modeNo;             /* video mode number. */
    CARD32  condition;
} XGIAskModeRec, *XGIAskModePtr;


/*
 * DTV_INFO : Data type for control the TVX
 *          : CARD16, CARD16 - Save the BIOS default value
 *          : CARD8       - Total swing width
 *          : CARD8       - Logical default value
 *          : CARD8       - Current offset (Registry save value)
 *          : CARD8       - Delta
 *          0----------------+----------|----------N
 *      Bios default    defoffset   Curoffset
 *          |<-----------  Swing value ----------->|
 */
typedef struct {
    CARD16      low;                /* BIOS Default */
    CARD16      high;
    CARD8       swingwid;           /* Swing Width */
    CARD8       defoffset;          /* Default Offset */
    CARD8       curoffset;          /* Current Offset */
    CARD8       delta;              /* Delta unit */
} XGIDigitalTVInfoRec, *XGIDigitalTVInfoPtr;

typedef enum
{
    DISPHEAD_CRTC = 1,
    DISPHEAD_WIN2 = 2
} XGIHeadID;


/* HWMC Surfaces */
#define XGI_MAX_SURFACES        8
#define XGI_MAX_SUBPICTURES     2
#define XGI_TOTAL_SURFACES      10

typedef struct {
    /* DVDATTR       dvdAttr; */

    unsigned long IOAddr;
    unsigned long fbAddr;
    unsigned long IOSize;
    unsigned long fbSize;

    /* temp data */
    int           bobFlag;            /* bob or weave mode */

} XGIXvMCCreateContextRec, *XGIXvMCCreateContextPtr;

typedef struct {
    int             index;
    unsigned long   pitch;
    unsigned long   size;
    unsigned long   hwAddr;

    unsigned long   offsetY;
    unsigned long   offsetV;
    unsigned long   offsetU;
} XGIXvMCCreateSurfaceRec, *XGIXvMCCreateSurfacePtr;

/*
typedef struct {
    int             index;
    unsigned int    width;
    unsigned int    pitch;
    unsigned int    size;
    unsigned int    hwAddr;
} XGIXvMCSubpicSurfaceRec, *XGIXvMCSubpicSurfacePtr;
*/
typedef struct {
    unsigned int    pitch;
    unsigned int    size;
    unsigned int    hwAddr;
} XGIXvMCSubpictureRec, *XGIXvMCSubpicturePtr;


typedef unsigned long DVDATTR;

/* Jong 09/11/2006; Private Entity structure for dual view */
#ifdef XGIDUALVIEW
typedef struct {
    int			lastInstance;		/* number of entities */
} XGIEntityRec, *XGIEntityPtr;
#endif

typedef struct {
    ScrnInfoPtr         pScrn;
#ifdef XSERVER_LIBPCIACCESS
    struct pci_device * pPciInfo;
#else
    pciVideoPtr         pPciInfo;
    PCITAG              pciTag;
#endif
    EntityInfoPtr       pEnt;

    int                 chipset;

    int                 dacType;
    int                 dacSpeed;
    int                 pix24bpp;       /* Depth of pixmap for 24bpp framebuffer */
    Bool                isDac8bits;     /* Use 8 bit DAC? */

#ifndef XSERVER_LIBPCIACCESS
    unsigned long       IOAddr;
    unsigned long       fbAddr;
#endif
    unsigned char *     IOBase;
    unsigned char *     fbBase;
    unsigned long       fbSize;
    unsigned long       PIOBase;

    int                 drm_fd;
    DRIInfoPtr          dri_info;

    drm_handle_t        fb_handle;
    drm_handle_t        gart_handle;
    drm_handle_t        mmio_handle;

    uint8_t           * gart_vaddr;
    drmSize             gart_size;

    Bool                (*DRICloseScreen)(int, ScreenPtr);
    Bool                directRenderingEnabled;
    Bool                dri_screen_open;


    CARD32              biosFbSize;     /* bios report frame buffer size */
    CARD32              freeFbSize;
    CARD16              maxBandwidth;
    Bool                isInterpolation;

    Bool                isFBDev;
    Bool                isDDRAM;

    OptionInfoPtr       pOptionInfo;
    Bool                noAccel;
    Bool                noMMIO;
    Bool                isHWCursor;
    Bool                isMmioOnly;
    Bool                isShadowFB;

    CARD32              displayDevice;            /* the current display device */
    DEVSTATUS           deviceStatus;             /* Device status, like DualViewLoop, DualView, ... */
    GRASTATUS           graStatus;                /* Engine status */

    Bool                isGammaBrightnessOn;
    int                 brightness;
    double              gamma;

    Bool                isNeedShadow;
    Bool                isNeedStretch;

    int                 minClock;
    int                 maxClock;

    XGIDigitalTVInfoPtr pDtvInfo;

    int                 currentClock;
    int                 rotate;
    float               frequency;

    CARD8 *             pShadow;
    int                 shadowPitch;
    int                 numDgaModes;
    DGAModePtr          pDgaModes;
    Bool                isDgaActive;
    int                 dgaViewportStatus;

    RefreshAreaFuncPtr  RefreshArea;
    CloseScreenProcPtr  CloseScreen;
    ScreenBlockHandlerProcPtr   BlockHandler;
    CreateScreenResourcesProcPtr CreateScreenResources;
    xf86PointerMovedProc        *PointerMoved;

    struct xgi_regs           savedReg;
    struct xgi_regs           modeReg;

    I2CBusPtr           pI2C;
    I2CBusPtr           pI2C_dvi;

    CARD16              engineOperation;
    CARD32              bltScanDirection;

    CARD32              patternLocation;
    CARD32              drawFlag;
    CARD16              linePattern;

    RamDacRecPtr        pRamDac;

    /**
     * \name Cursor related data.
     */
    /*@{*/
    Bool                cursor_argb;    /**< Is ARGB cursor in use? */
    xf86CursorInfoPtr   pCursorInfo;    /**< Current core cursor info. */
    uint32_t            cursorStart;    /**< Hardware cursor start addr. */
    uint32_t            cursorEnd;      /**< Hardware cursor end addr. */
    /*@}*/

    xf86Int10InfoPtr    pInt10;
    vbeInfoPtr          pVbe;

    XGIHeadID           headID;
#ifdef HAVE_XAA_H
    XAAInfoRecPtr       pXaaInfo;
#endif
    struct xg47_CmdList *cmdList;

#ifdef XvExtension 
    void                (*VideoTimerCallback)(ScrnInfoPtr, Time);
    XF86VideoAdaptorPtr pAdaptor;
    int                 videoKey;
    CARD32              ovlAttr;    /* overlay attribute */
#endif 

    /* XvMC */
    DVDATTR                     dvdAttr;
    XGIXvMCCreateContextRec     xvmcContext;
    XGIXvMCCreateSurfaceRec     xvmcSurface[XGI_MAX_SURFACES];
    XID                         surfID[XGI_MAX_SURFACES];
    XGIXvMCSubpictureRec        xvmcSubpic;
    XID                         spID;

#ifdef __DEBUG_FUNC__
    Bool              EnableSolidLine;
    Bool              EnableSolidFill;
    Bool              EnableSrc2Src;
    Bool              Enable8x8Pattern;
    Bool              Enable8x8MonoPat;
    Bool              EnableImageWrite;
#endif

#ifdef XGIDUALVIEW
    XGIEntityPtr	  pEntityPrivate;		
	Bool			  FirstView; /* Jong 09/11/2006; support dual view */
	unsigned int	  ScreenIndex; /* 0:first view; 1:second view */
#endif
} XGIRec, *XGIPtr;

struct XGIDRIContext {
    int    dummy;
};

#define XGIPTR(p)   ((XGIPtr)((p)->driverPrivate))

extern Bool XGIDRIScreenInit(ScreenPtr pScreen);
extern Bool XGIDRIFinishScreenInit(ScreenPtr pScreen);
extern void XGIDRICloseScreen(ScreenPtr pScreen);

#endif