summaryrefslogtreecommitdiff
path: root/xc/programs/Xserver/hw/xfree86/drivers/cyrix/cyrix.h
blob: ff0ba00d88d42e35f5a93ef9fcd1e0c22e6154e6 (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
/*
 * Copyright 2000 by Richard A. Hecker, California, United States
 *
 * 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 Alan Hourihane not be used in
 * advertising or publicity pertaining to distribution of the software without
 * specific, written prior permission.  Alan Hourihane makes no representations
 * about the suitability of this software for any purpose.  It is provided
 * "as is" without express or implied warranty.
 *
 * RICHARD HECKER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
 * EVENT SHALL RICHARD HECKER 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.
 *
 * Author:  Richard Hecker, hecker@cat.dfrc.nasa.gov
 *          Re-written for XFree86 v4.0
 * Previous driver (pre-XFree86 v4.0) by
 *          Annius V. Groenink (A.V.Groenink@zfc.nl, avg@cwi.nl),
 *          Dirk H. Hohndel (hohndel@suse.de),
 *          Portions: the GGI project & confidential CYRIX databooks.
 */
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/cyrix/cyrix.h,v 1.2 2000/04/19 16:57:43 eich Exp $ */

#ifndef _CYRIX_H_
#define _CYRIX_H_

#include "xaa.h"
#include "xf86Cursor.h"
#include "vgaHW.h"

/* this code is partly based on the MediaGX sources from the GGI project
   based on CYRIX example code (gxvideo.c) and included with CYRIX and
   GGI's permission under the XFree86 license.
*/

/* XFree86 macros */
#define CYRIXPTR(p) ((CYRIXPrvPtr)((p)->driverPrivate))


/* Driver specific structures */
typedef struct {
    unsigned char cyrixRegs3x4[0x100];
    unsigned char cyrixRegs3CE[0x100];
    unsigned char cyrixRegs3C4[0x100];
    unsigned char cyrixRegsDAC[0x01];
    unsigned char cyrixRegsClock[0x03];
    unsigned char DacRegs[0x300];
} CYRIXRegRec, *CYRIXRegPtr;

typedef struct {
        /* extended SoftVGA registers */
	unsigned char VerticalTimingExtension;
	unsigned char ExtendedAddressControl;
	unsigned char ExtendedOffset;
	unsigned char ExtendedColorControl;
	unsigned char DisplayCompression;
	unsigned char DriverControl;
	unsigned char DACControl;
	unsigned char ClockControl;
	unsigned char CrtClockFrequency;
	unsigned char CrtClockFrequencyFraction;
	unsigned char RefreshRate;

	/* display controller hardware registers */
	CARD32 DcGeneralCfg;
	CARD32 DcCursStOffset;
	CARD32 DcCbStOffset;
	CARD32 DcLineDelta;
	CARD32 DcBufSize;
	CARD32 DcCursorX;
	CARD32 DcCursorY;
	CARD32 DcCursorColor;

	/* graphics pipeline registers */
	CARD32 GpBlitStatus;

	/* save area for cursor image */
	char cursorPattern[256];
} prevExt;

typedef struct {
	/* struct for the server */
	CARD32 	 		IOAccelAddress;
	CARD32 			FbAddress;
        char*                   GXregisters;
        int                     CYRIXcursorAddress; /* relative to fb base */
        int                     CYRIXbltBuf0Address;/*relative to GXregisters*/
        int                     CYRIXbltBuf1Address;
        int                     CYRIXbltBufSize;
        EntityInfoPtr       	pEnt;
	unsigned char *		FbBase;
	pciVideoPtr		PciInfo;
	XAAInfoRecPtr		AccelInfoRec;
	xf86CursorInfoPtr   	CursorInfoRec;
	CloseScreenProcPtr  	CloseScreen;
	int			HwBpp;
	int			MinClock;
	int			MaxClock;
	int			Chipset;
	int			ChipRev;
	int			RamDac;
	long			FbMapSize;
	short			EngineOperation;
	CYRIXRegRec		SavedReg;
	CYRIXRegRec		ModeReg;
	vgaHWRec		std;
	prevExt			PrevExt;
	Bool			HWCursor;
	Bool			IsCyber;
	Bool			NewClockCode;
	Bool			NoAccel;
    /* accel stuff */
        int bltBufWidth;
        int blitMode;
        int vectorMode;
        int transMode;
        int copyXdir;
        int setBlitModeOnSync;

} CYRIXPrivate, *CYRIXPrvPtr;

typedef struct {
	vgaHWRec std; /* IBM VGA */
	prevExt  ext;
} CYRIXRec, *CYRIXPtr;

/* Helper routines */
extern void    	Cyrix1bppColorMap(ScrnInfoPtr pScrn);
extern int	CyrixHWCursor(ScreenPtr pScr);
extern int	CyrixInit(ScrnInfoPtr pScrn, DisplayModePtr mode);
extern void    	CyrixRestore(ScrnInfoPtr pScrn, CYRIXRegPtr cyrixReg);
extern void *  	CyrixSave(ScrnInfoPtr pScrn, CYRIXRegPtr cyrixReg);


/* externs in cyrix_asm.s */
extern void CYRIXsetBlitBuffers(void);
extern void CYRIXsetBlitBuffersOnOldChip(void);

/* 32 bit access to GX registers */
#define GX_REG(a) (*(volatile CARD32*)(pCyrix->GXregisters + (a)))


/* externs in cyrix_accel.c */
extern void CYRIXAccelInit(ScreenPtr);

/* A minor Sync() function that only waits for the graphics pipeline
   registers to be flushed so we can define a new operation */
#define CYRIXsetupSync()            \
                     while (GX_REG(GP_BLIT_STATUS) & BS_BLIT_PENDING)


/* access macros to the graphics pipeline registers */
#define CYRIXsetSrcXY(x, y)                  \
                     GX_REG(GP_SRC_XCOOR)    = (((y) << 16) | (x))

#define CYRIXsetDstXY(x, y)                  \
                     GX_REG(GP_DST_XCOOR)    = (((y) << 16) | (x))

#define CYRIXsetWH(w, h)                     \
                     GX_REG(GP_WIDTH)        = (((h) << 16) | (w))

#define CYRIXsetSourceColors01(p, col0, col1)   \
                     CYRIXsetColors01((p), GP_SRC_COLOR_0, (col0), (col1))

#define CYRIXsetPatColors01(p, col0, col1)      \
                     CYRIXsetColors01((p), GP_PAT_COLOR_0, (col0), (col1))

#define CYRIXsetPatColors23(p, col2, col3)      \
                     CYRIXsetColors01((p), GP_PAT_COLOR_2, (col2), (col3))

#define CYRIXsetPatData(data0, data1)        \
                     GX_REG(GP_PAT_DATA_0)   = (data0); \
                     GX_REG(GP_PAT_DATA_1)   = (data1)

#define CYRIXsetPatMode(xrop, pm)            \
                     GX_REG(GP_RASTER_MODE)  = ((pm) | windowsROPpatMask[(xrop)])

#define CYRIXsetPatModeX(xrop, pm)           \
                     GX_REG(GP_RASTER_MODE)  = ((pm) | windowsROPsrcMask[(xrop)])

#define CYRIXsetPatModeTrans(pm)             \
                     GX_REG(GP_RASTER_MODE)  = ((pm) | RM_CLIP_ENABLE | 0xC6);

#define CYRIXsetBlitMode()                   \
                     GX_REG(GP_BLIT_MODE)    = (pCyrix->blitMode)

#define CYRIXsetVectorMode()                 \
                     GX_REG(GP_VECTOR_MODE)  = (pCyrix->vectorMode)

#define IfDest(rop, planemask, val)                                        \
                                 (( (((rop) & 0x5) ^ (((rop) & 0xA) >> 1)) \
                                 || (~((planemask) & 0xFF))                \
                                 ) ? (val) : 0)

/* Generic MediaGX hardware register and value definitions */

#define GX_IOPORT_INDEX		0x22
#define GX_IOPORT_DATA		0x23

/*	I/O REGISTERS INDEX DEFINITIONS	*/

#define	GX_IOIDX_PCR		0x20
#define	GX_IOIDX_CCR1		0xC1
#define	GX_IOIDX_CCR2		0xC2
#define	GX_IOIDX_CCR3		0xC3
#define	GX_IOIDX_CCR4		0xE8
#define	GX_IOIDX_DIR0		0xFE
#define	GX_IOIDX_DIR1		0xFF
#define	GX_IOIDX_SMAR0		0xCD
#define	GX_IOIDX_SMAR1		0xCE
#define	GX_IOIDX_SMAR2		0xCF
#define	GX_IOIDX_SMHR0		0xB0
#define	GX_IOIDX_SMHR1		0xB1
#define	GX_IOIDX_SMHR2		0xB2
#define	GX_IOIDX_SMHR3		0xB3
#define	GX_IOIDX_GCR		0xB8
#define	GX_IOIDX_VGACTL		0xB9
#define	GX_IOIDX_VGAM0		0xBA
#define	GX_IOIDX_VGAM1		0xBB
#define	GX_IOIDX_VGAM2		0xBC
#define	GX_IOIDX_VGAM3		0xBD

/*	BUS CONTROLLER REGISTER DEFINITIONS	*/

#define BC_DRAM_TOP		0x8000
#define BC_XMAP_1		0x8004
#define BC_XMAP_2		0x8008
#define BC_XMAP_3		0x800C

/*	GRAPHICS PIPELINE REGISTER DEFINITIONS	*/

#define GP_DST_XCOOR		0x8100		/* x destination origin	*/
#define GP_DST_YCOOR		0x8102		/* y destination origin	*/
#define GP_WIDTH		0x8104		/* pixel width */
#define GP_HEIGHT		0x8106		/* pixel height */
#define GP_SRC_XCOOR		0x8108		/* x source origin */
#define GP_SRC_YCOOR		0x810A		/* y source origin */

#define GP_VECTOR_LENGTH	0x8104		/* vector length */
#define GP_INIT_ERROR		0x8106		/* vector initial error	*/
#define GP_AXIAL_ERROR		0x8108		/* axial error increment */
#define GP_DIAG_ERROR		0x810A		/* diagonal error increment */

#define GP_SRC_COLOR_0		0x810C		/* source color 0 */
#define GP_SRC_COLOR_1		0x810E		/* source color 1 */
#define GP_PAT_COLOR_0		0x8110		/* pattern color 0 */
#define GP_PAT_COLOR_1		0x8112		/* pattern color 1 */
#define GP_PAT_COLOR_2		0x8114		/* pattern color 2 */
#define GP_PAT_COLOR_3		0x8116		/* pattern color 3 */
#define GP_PAT_DATA_0		0x8120		/* bits 31:0 of pattern	*/
#define GP_PAT_DATA_1		0x8124		/* bits 63:32 of pattern */
#define GP_PAT_DATA_2		0x8128		/* bits 95:64 of pattern */
#define GP_PAT_DATA_3		0x812C		/* bits 127:96 of pattern */

#define GP_RASTER_MODE		0x8200		/* raster operation */
#define GP_VECTOR_MODE		0x8204		/* vector mode register	*/
#define GP_BLIT_MODE		0x8208		/* blit mode register */
#define GP_BLIT_STATUS		0x820C		/* blit status register	*/

/*	"GP_VECTOR_MODE" BIT DEFINITIONS	*/

#define VM_X_MAJOR		0x0000		/* X major vector */
#define VM_Y_MAJOR		0x0001		/* Y major vector */
#define VM_MAJOR_INC		0x0002		/* positive major axis step */
#define VM_MINOR_INC		0x0004		/* positive minor axis step */
#define VM_READ_DST_FB		0x0008		/* read destination data */

/*	"GP_RASTER_MODE" BIT DEFINITIONS	*/

#define RM_PAT_DISABLE		0x0000		/* pattern is disabled */
#define RM_PAT_MONO		0x0100		/* 1BPP pattern expansion */
#define RM_PAT_DITHER		0x0200		/* 2BPP pattern expansion */
#define RM_PAT_COLOR		0x0300		/* 8BPP or 16BPP pattern */
#define RM_PAT_MASK		0x0300		/* mask for pattern mode */
#define RM_PAT_TRANSPARENT	0x0400		/* transparent 1BPP pattern */
#define RM_SRC_TRANSPARENT	0x0800		/* transparent 1BPP source */
#define RM_CLIP_ENABLE		0x1000		/* enables clipping */

/*	"GP_BLIT_STATUS" BIT DEFINITIONS	*/

#define BS_BLIT_BUSY		0x0001		/* blit engine is busy */
#define BS_PIPELINE_BUSY	0x0002		/* graphics pipeline is bus */
#define BS_BLIT_PENDING		0x0004		/* blit pending	*/
#define BC_FLUSH		0x0080		/* flush pipeline requests */
#define BC_8BPP			0x0000		/* 8BPP mode */
#define BC_16BPP		0x0100		/* 16BPP mode */
#define BC_FB_WIDTH_1024	0x0000		/* framebuffer width = 1024 */
#define BC_FB_WIDTH_2048	0x0200		/* framebuffer width = 2048 */

/*	"GP_BLIT_MODE" BIT DEFINITIONS		*/

#define	BM_READ_SRC_NONE	0x0000		/* source foreground color */
#define BM_READ_SRC_FB		0x0001		/* read source from FB 	*/
#define BM_READ_SRC_BB0		0x0002		/* read source from BB0 */
#define BM_READ_SRC_BB1		0x0003		/* read source from BB1	*/
#define BM_READ_SRC_MASK	0x0003		/* read source mask */

#define	BM_READ_DST_NONE	0x0000		/* no destination data */
#define BM_READ_DST_BB0		0x0008		/* destination from BB0	*/
#define BM_READ_DST_BB1		0x000C		/* destination from BB1	*/
#define BM_READ_DST_FB0		0x0010		/* dest from FB (store BB0) */
#define BM_READ_DST_FB1		0x0014		/* dest from FB (store BB1)*/
#define BM_READ_DST_MASK	0x001C		/* read destination mask */

#define BM_WRITE_FB		0x0000		/* write to framebuffer	*/
#define	BM_WRITE_MEM		0x0020		/* write to memory */
#define BM_WRITE_MASK		0x0020		/* write mask */

#define	BM_SOURCE_COLOR		0x0000		/* source is 8BPP or 16BPP */
#define BM_SOURCE_EXPAND	0x0040		/* source is 1BPP */
#define BM_SOURCE_TEXT		0x00C0		/* source is 1BPP text */
#define BM_SOURCE_MASK		0x00C0		/* source mask */

#define BM_REVERSE_Y		0x0100		/* reverse Y direction */

/*	DISPLAY CONTROLLER REGISTER DEFINITIONS	*/

#define DC_UNLOCK		0x8300		/* lock register */
#define DC_GENERAL_CFG		0x8304		/* config registers... */
#define DC_TIMING_CFG		0x8308
#define DC_OUTPUT_CFG		0x830C

#define DC_FB_ST_OFFSET		0x8310		/* framebuffer start offset */
#define DC_CB_ST_OFFSET		0x8314		/* compression start offset */
#define DC_CURS_ST_OFFSET	0x8318		/* cursor start offset*/
#define DC_ICON_ST_OFFSET	0x831C		/* icon start offset */
#define DC_VID_ST_OFFSET	0x8320		/* video start offset */
#define DC_LINE_DELTA		0x8324		/* fb and cb skip counts */
#define DC_BUF_SIZE		0x8328		/* fb and cb line size */

#define DC_H_TIMING_1		0x8330		/* horizontal timing...	*/
#define DC_H_TIMING_2		0x8334
#define DC_H_TIMING_3		0x8338
#define DC_FP_H_TIMING		0x833C

#define DC_V_TIMING_1		0x8340		/* vertical timing... */
#define DC_V_TIMING_2		0x8344
#define DC_V_TIMING_3		0x8348
#define DC_FP_V_TIMING		0x834C

#define DC_CURSOR_X		0x8350		/* cursor x position */
#define DC_ICON_X		0x8354		/* HACK - 1.3 definition */
#define DC_V_LINE_CNT		0x8354		/* vertical line counter */
#define DC_CURSOR_Y		0x8358		/* cursor y position */
#define DC_ICON_Y		0x835C		/* HACK - 1.3 definition */
#define DC_SS_LINE_COMPARE	0x835C		/* line compare value */

#define DC_CURSOR_COLOR		0x8360		/* cursor colors */
#define DC_ICON_COLOR		0x8364		/* icon colors */
#define DC_BORDER_COLOR		0x8368		/* border color	*/

#define DC_PAL_ADDRESS		0x8370		/* palette address */
#define DC_PAL_DATA		0x8374		/* palette data	*/

/*	PALETTE ADDRESS DEFINITIONS		*/

#define PAL_CURSOR_COLOR_0	0x100
#define PAL_CURSOR_COLOR_1	0x101
#define PAL_ICON_COLOR_0	0x102
#define PAL_ICON_COLOR_1	0x103
#define PAL_OVERSCAN_COLOR	0x104

/*	DC BIT DEFINITIONS			*/

#define DC_UNLOCK_VALUE		0x00004758	/* used to unlock DC regs */

#define DC_GCFG_DFLE		0x00000001	/* display FIFO load enable */
#define DC_GCFG_CURE		0x00000002	/* cursor enable */
#define DC_GCFG_ICNE		0x00000004	/* HACK - 1.3 definition */
#define DC_GCFG_PLNO		0x00000004	/* planar offset LSB */
#define DC_GCFG_VIDE		0x00000008	/* HACK - 1.3 definition */
#define DC_GCFG_PPC		0x00000008	/* pixel pan compatibility */
#define DC_GCFG_CMPE		0x00000010	/* compression enable */
#define DC_GCFG_DECE		0x00000020	/* decompression enable	*/
#define DC_GCFG_DCLK_MASK	0x000000C0	/* dotclock multiplier */
#define DC_GCFG_DCLK_POS	6		/* dotclock multiplier */
#define DC_GCFG_DFHPSL_MASK	0x00000F00	/* FIFO high-priority start */
#define DC_GCFG_DFHPSL_POS	8		/* FIFO high-priority start */
#define DC_GCFG_DFHPEL_MASK	0x0000F000	/* FIFO high-priority end */
#define DC_GCFG_DFHPEL_POS	12		/* FIFO high-priority end */
#define DC_GCFG_CIM_MASK	0x00030000	/* compressor insert mode */
#define DC_GCFG_CIM_POS		16		/* compressor insert mode */
#define DC_GCFG_FDTY		0x00040000	/* frame dirty mode */
#define DC_GCFG_RTPM		0x00080000	/* real-time perf. monitor */
#define DC_GCFG_DAC_RS_MASK	0x00700000	/* DAC register selects */
#define DC_GCFG_DAC_RS_POS	20		/* DAC register selects	*/
#define DC_GCFG_CKWR		0x00800000	/* clock write */
#define DC_GCFG_LDBL		0x01000000	/* line double */
#define DC_GCFG_DIAG		0x02000000	/* FIFO diagnostic mode	*/
#define DC_GCFG_CH4S		0x04000000	/* sparse refresh mode */
#define DC_GCFG_SSLC		0x08000000	/* enable line compare */
#define DC_GCFG_FBLC		0x10000000	/* enable fb offset compare */
#define DC_GCFG_DFCK		0x20000000	/* divide flat-panel clock */
#define DC_GCFG_DPCK		0x40000000	/* divide pixel clock */
#define DC_GCFG_DDCK		0x80000000	/* divide dot clock */

#define DC_TCFG_FPPE		0x00000001	/* flat-panel power enable */
#define DC_TCFG_HSYE		0x00000002	/* horizontal sync enable */
#define DC_TCFG_VSYE		0x00000004	/* vertical sync enable	*/
#define DC_TCFG_BLKE		0x00000008	/* blank enable	*/
#define DC_TCFG_DDCK		0x00000010	/* DDC clock */
#define DC_TCFG_TGEN		0x00000020	/* timing generator enable */
#define DC_TCFG_VIEN		0x00000040	/* vertical interrupt enable */
#define DC_TCFG_BLNK		0x00000080	/* blink enable	*/
#define DC_TCFG_CHSP		0x00000100	/* horizontal sync polarity */
#define DC_TCFG_CVSP		0x00000200	/* vertical sync polarity */
#define DC_TCFG_FHSP		0x00000400	/* panel horz sync polarity */
#define DC_TCFG_FVSP		0x00000800	/* panel vert sync polarity */
#define DC_TCFG_FCEN		0x00001000	/* flat-panel centering	*/
#define DC_TCFG_CDCE		0x00002000	/* HACK - 1.3 definition */
#define DC_TCFG_PLNR		0x00002000	/* planar mode enable */
#define DC_TCFG_INTL		0x00004000	/* interlace scan */
#define DC_TCFG_PXDB		0x00008000	/* pixel double	*/
#define DC_TCFG_BKRT		0x00010000	/* blink rate */
#define DC_TCFG_PSD_MASK	0x000E0000	/* power sequence delay	*/
#define DC_TCFG_PSD_POS		17		/* power sequence delay	*/
#define DC_TCFG_DDCI		0x08000000	/* DDC input (RO) */
#define DC_TCFG_SENS		0x10000000	/* monitor sense (RO) */
#define DC_TCFG_DNA		0x20000000	/* display not active (RO) */
#define DC_TCFG_VNA		0x40000000	/* vertical not active (RO) */
#define DC_TCFG_VINT		0x80000000	/* vertical interrupt (RO) */

#define DC_OCFG_8BPP		0x00000001	/* 8/16 bpp select */
#define DC_OCFG_555		0x00000002	/* 16 bpp format */
#define DC_OCFG_PCKE		0x00000004	/* PCLK enable */
#define DC_OCFG_FRME		0x00000008	/* frame rate mod enable */
#define DC_OCFG_DITE		0x00000010	/* dither enable */
#define DC_OCFG_2PXE		0x00000020	/* 2 pixel enable */
#define DC_OCFG_2XCK		0x00000040	/* 2 x pixel clock */
#define DC_OCFG_2IND		0x00000080	/* 2 index enable */
#define DC_OCFG_34ADD		0x00000100	/* 3- or 4-bit add */
#define DC_OCFG_FRMS		0x00000200	/* frame rate mod select */
#define DC_OCFG_CKSL		0x00000400	/* clock select	*/
#define DC_OCFG_PRMP		0x00000800	/* palette re-map */
#define DC_OCFG_PDEL		0x00001000	/* panel data enable low */
#define DC_OCFG_PDEH		0x00002000	/* panel data enable high */
#define DC_OCFG_CFRW		0x00004000	/* comp line buffer r/w sel */
#define DC_OCFG_DIAG		0x00008000	/* comp line buffer diag */

/*	MC REGISTER DEFINITIONS			*/

#define MC_GBASE_ADD		0x8414		/* Graphics mem base address */
#define MC_DR_ADD		0x8418		/* Dirty RAM address index */
#define MC_DR_ACC		0x841C		/* Dirty RAM memory access */
#define MC_RAMDAC_ACC		0x8420		/* RAMDAC register access */

/*	CPU REGISTER REGISTER DEFINITIONS	*/

#define BB0_BASE		0xFFFFFF0C	/* Blit buffer 0 base */
#define BB1_BASE		0xFFFFFF1C	/* Blit buffer 1 base */



/* SoftVGA CRTC register indices and bit definitions */

#define CrtcExtendedRegisterLock       0x30
#define CrtcGraphicsMemorySize         0x3E
#define CrtcModeSwitchControl          0x3F
#define CrtcVerticalTimingExtension    0x41
#define CrtcExtendedAddressControl     0x43
#define CrtcExtendedStartAddress       0x44
#define CrtcExtendedOffset             0x45
#define CrtcExtendedColorControl       0x46
#define CrtcWriteMemoryAperture        0x47
#define CrtcReadMemoryAperture         0x48
#define CrtcDisplayCompression         0x49
#define CrtcDriverControl              0x4A
#define CrtcDACControl                 0x4B
#define CrtcClockControl               0x4C
#define CrtcClockFrequency             0x4D
#define CrtcClockFrequencyFraction     0x4E
#define CrtcRefreshRate                0x4F

/* ExtendedAddressControl bit definitions */
#define EAC_PIXEL_DOUBLE               0x04
#define EAC_DIRECT_FRAME_BUFFER        0x02
#define EAC_PACKED_CHAIN4              0x01

/* ExtendedColorControl bit definitions */
#define ECC_32BPP                      0x04     /* MXi only */
#define ECC_555_FORMAT                 0x02
#define ECC_565_FORMAT                 0x00
#define ECC_16BPP                      0x01
#define ECC_8BPP                       0x00

/* DriverControl bit definitions */
#define DRVCT_DISPLAY_DRIVER_ACTIVE    0x01

/* DACControl bit definitions */
#define DACCT_HALF_PIXEL_PER_CLOCK     0x08
#define DACCT_TWO_PIXELS_PER_CLOCK     0x04
#define DACCT_ENABLE_16BIT_BUS         0x02

/* ClockControl bit definitions */
#define CLKCT_EXT_CLOCK_MODE           0x80
#define CLKCT_HALVE_DOT_CLOCK          0x20
#define CLKCT_DOUBLE_DOT_CLOCK         0x10
#define CLKCT_GENDAC_ICS5342           0x00
#define CLKCT_GENDAC_MASK              0x07

#endif /* _CYRIX_H_ */