273 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			273 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C
		
	
	
	
| /*
 | |
|  * Id: trident.h,v 1.2 1999/11/02 08:17:24 keithp Exp $
 | |
|  *
 | |
|  * Copyright © 1999 Keith Packard
 | |
|  *
 | |
|  * 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 Keith Packard not be used in
 | |
|  * advertising or publicity pertaining to distribution of the software without
 | |
|  * specific, written prior permission.  Keith Packard makes no
 | |
|  * representations about the suitability of this software for any purpose.  It
 | |
|  * is provided "as is" without express or implied warranty.
 | |
|  *
 | |
|  * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 | |
|  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
 | |
|  * EVENT SHALL KEITH PACKARD 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.
 | |
|  */
 | |
| /* $RCSId: xc/programs/Xserver/hw/kdrive/trident/trident.h,v 1.8 2000/10/20 00:19:51 keithp Exp $ */
 | |
| 
 | |
| #ifndef _TRIDENT_H_
 | |
| #define _TRIDENT_H_
 | |
| #ifdef VESA
 | |
| #include <vesa.h>
 | |
| #else
 | |
| #include <fbdev.h>
 | |
| #endif
 | |
| 
 | |
| /*
 | |
|  * offset from ioport beginning 
 | |
|  */
 | |
| 
 | |
| #ifdef USE_PCI
 | |
| #define TRIDENT_COP_BASE(c)	(c->attr.address[1])
 | |
| #define TRIDENT_COP_OFF(c)	0x2100
 | |
| #define TRIDENT_COP_SIZE(c)	0x20000
 | |
| #else
 | |
| #define TRIDENT_COP_BASE(c)	0xbf000
 | |
| #define TRIDENT_COP_OFF(c)    	0x00f00
 | |
| #define TRIDENT_COP_SIZE(c)	(0x2000)
 | |
| #endif
 | |
| 
 | |
| typedef volatile CARD8	VOL8;
 | |
| typedef volatile CARD16	VOL16;
 | |
| typedef volatile CARD32	VOL32;
 | |
| 
 | |
| typedef struct _cop {
 | |
|     VOL32	src_start_xy;	    /* 0x00 */
 | |
|     VOL32	src_end_xy;	    /* 0x04 */
 | |
|     VOL32	dst_start_xy;	    /* 0x08 */
 | |
|     VOL32	dst_end_xy;	    /* 0x0c */
 | |
|     VOL32	alpha;		    /* 0x10 */
 | |
|     CARD8	pad14[0xc];	    /* 0x14 */
 | |
|     VOL32	multi;		    /* 0x20 */
 | |
| 
 | |
| #define COP_MULTI_CLIP_TOP_LEFT	    0x10000000
 | |
| #define COP_MULTI_DEPTH		    0x40000000
 | |
| #define COP_MULTI_COLOR_KEY	    0x70000000
 | |
| #define COP_MULTI_STYLE		    0x50000000
 | |
| #define COP_MULTI_PATTERN	    0x80000000
 | |
| #define COP_MULTI_ROP		    0x90000000
 | |
| #define COP_MULTI_STRIDE	    0x60000000
 | |
| #define COP_MULTI_Z		    0xa0000000
 | |
| #define COP_MULTI_ALPHA		    0xb0000000
 | |
| #define COP_MULTI_TEXTURE	    0xd0000000
 | |
| #define COP_MULTI_TEXTURE_BOUND	    0xe0000000
 | |
| #define COP_MULTI_TEXTURE_ADVANCED  0x20000000
 | |
| #define COP_MULTI_MASK		    0xf0000000
 | |
|     
 | |
| #define COP_DEPTH_8		    0x00000000
 | |
| #define COP_DEPTH_16		    0x00000001
 | |
| #define COP_DEPTH_24_32		    0x00000002
 | |
| #define COP_DEPTH_15		    0x00000005
 | |
| #define COP_DEPTH_DITHER_DISABLE    0x00000008
 | |
|     
 | |
| 
 | |
| #define COP_ALPHA_SRC_BLEND_0	    0x00000000
 | |
| #define COP_ALPHA_SRC_BLEND_1	    0x00000001
 | |
| #define COP_ALPHA_SRC_BLEND_SRC_C   0x00000002
 | |
| #define COP_ALPHA_SRC_BLEND_1_SRC_C 0x00000003
 | |
| #define COP_ALPHA_SRC_BLEND_SRC_A   0x00000004
 | |
| #define COP_ALPHA_SRC_BLEND_1_SRC_A 0x00000005
 | |
| #define COP_ALPHA_SRC_BLEND_DST_A   0x00000006
 | |
| #define COP_ALPHA_SRC_BLEND_1_DST_A 0x00000007
 | |
| #define COP_ALPHA_SRC_BLEND_DST_C   0x00000008
 | |
| #define COP_ALPHA_SRC_BLEND_1_DST_C 0x00000009
 | |
| #define COP_ALPHA_SRC_BLEND_SAT     0x0000000A
 | |
| #define COP_ALPHA_SRC_BLEND_BG      0x0000000B
 | |
| 
 | |
| #define COP_ALPHA_DST_BLEND_0	    0x00000000
 | |
| #define COP_ALPHA_DST_BLEND_1	    0x00000010
 | |
| #define COP_ALPHA_DST_BLEND_SRC_C   0x00000020
 | |
| #define COP_ALPHA_DST_BLEND_1_SRC_C 0x00000030
 | |
| #define COP_ALPHA_DST_BLEND_SRC_A   0x00000040
 | |
| #define COP_ALPHA_DST_BLEND_1_SRC_A 0x00000050
 | |
| #define COP_ALPHA_DST_BLEND_DST_A   0x00000060
 | |
| #define COP_ALPHA_DST_BLEND_1_DST_A 0x00000070
 | |
| #define COP_ALPHA_DST_BLEND_DST_C   0x00000080
 | |
| #define COP_ALPHA_DST_BLEND_1_DST_C 0x00000090
 | |
| #define COP_ALPHA_DST_BLEND_OTHER   0x000000A0
 | |
| 
 | |
| #define COP_ALPHA_RESULT_ALPHA	    0x00100000
 | |
| #define COP_ALPHA_DEST_ALPHA	    0x00200000
 | |
| #define COP_ALPHA_SOURCE_ALPHA	    0x00400000
 | |
| #define COP_ALPHA_WRITE_ENABLE	    0x00800000
 | |
| #define COP_ALPHA_TEST_ENABLE	    0x01000000
 | |
| #define COP_ALPHA_BLEND_ENABLE	    0x02000000
 | |
| #define COP_ALPHA_DEST_VALUE	    0x04000000
 | |
| #define COP_ALPHA_SOURCE_VALUE	    0x08000000
 | |
| 
 | |
|     VOL32	command;	    /* 0x24 */
 | |
| #define COP_OP_NULL	    0x00000000
 | |
| #define COP_OP_LINE	    0x20000000
 | |
| #define COP_OP_BLT	    0x80000000
 | |
| #define COP_OP_TEXT	    0x90000000
 | |
| #define COP_OP_POLY	    0xb0000000
 | |
| #define COP_OP_POLY2	    0xe0000000
 | |
| #define COP_SCL_EXPAND	    0x00800000
 | |
| #define COP_SCL_OPAQUE	    0x00400000
 | |
| #define COP_SCL_REVERSE	    0x00200000
 | |
| #define COP_SCL_MONO_OFF    0x001c0000
 | |
| #define COP_LIT_TEXTURE	    0x00004000
 | |
| #define COP_BILINEAR	    0x00002000
 | |
| #define COP_OP_ZBUF	    0x00000800
 | |
| #define COP_OP_ROP	    0x00000400
 | |
| #define COP_OP_FG	    0x00000200
 | |
| #define COP_OP_FB	    0x00000080
 | |
| #define COP_X_REVERSE	    0x00000004
 | |
| #define COP_CLIP	    0x00000001
 | |
|     VOL32	texture_format;	    /* 0x28 */
 | |
|     CARD8	pad2c[0x4];	    /* 0x2c */
 | |
|     
 | |
|     VOL32	clip_bottom_right;  /* 0x30 */
 | |
|     VOL32	dataIII;	    /* 0x34 */
 | |
|     VOL32	dataIV;		    /* 0x38 */
 | |
|     CARD8	pad3c[0x8];	    /* 0x3c */
 | |
|     
 | |
|     VOL32	fg;		    /* 0x44 */
 | |
|     VOL32	bg;		    /* 0x48 */
 | |
|     CARD8	pad4c[0x4];	    /* 0x4c */
 | |
|     
 | |
|     VOL32	pattern_fg;	    /* 0x50 */
 | |
|     VOL32	pattern_bg;	    /* 0x54 */
 | |
|     CARD8	pad58[0xc];	    /* 0x58 */
 | |
| 
 | |
|     VOL32	status;		    /* 0x64 */
 | |
| #define COP_STATUS_BE_BUSY	0x80000000
 | |
| #define COP_STATUS_DPE_BUSY	0x20000000
 | |
| #define COP_STATUS_MI_BUSY	0x10000000
 | |
| #define COP_STATUS_FIFO_BUSY	0x08000000
 | |
| #define COP_STATUS_WB_BUSY	0x00800000
 | |
| #define COP_STATUS_Z_FAILED	0x00400000
 | |
| #define COP_STATUS_EFFECTIVE	0x00200000
 | |
| #define COP_STATUS_LEFT_VIEW	0x00080000
 | |
|     
 | |
|     CARD8	pad68[0x4];	    /* 0x68 */
 | |
|     
 | |
|     VOL32	src_offset;	    /* 0x6c */
 | |
|     VOL32	z_offset;	    /* 0x70 */
 | |
|     CARD8	pad74[0x4];	    /* 0x74 */
 | |
|     
 | |
|     VOL32	display_offset;	    /* 0x78 */
 | |
|     VOL32	dst_offset;	    /* 0x7c */
 | |
|     CARD8	pad80[0x34];	    /* 0x80 */
 | |
|     
 | |
|     VOL32	semaphore;	    /* 0xb4 */
 | |
| } Cop;
 | |
| 
 | |
| #define TRI_XY(x,y) ((y) << 16 | (x))
 | |
| 
 | |
| typedef struct _tridentSave {
 | |
|     CARD8   reg_3c4_0e;	/* config port value */
 | |
|     CARD8   reg_3d4_36;
 | |
|     CARD8   reg_3d4_39;
 | |
|     CARD8   reg_3d4_62;	/* GE setup */
 | |
|     CARD8   reg_3ce_21;	/* DPMS */
 | |
|     CARD8   reg_3c2;	/* clock config */
 | |
|     CARD8   reg_3c4_16;	/* MCLKLow */
 | |
|     CARD8   reg_3c4_17;	/* MCLKHigh */
 | |
|     CARD8   reg_3c4_18;	/* ClockLow */
 | |
|     CARD8   reg_3c4_19; /* ClockHigh */
 | |
| } TridentSave;
 | |
| 
 | |
| typedef struct _tridentCardInfo {
 | |
| #ifdef VESA
 | |
|     VesaCardPrivRec	vesa;
 | |
| #else
 | |
|     FbdevPriv		fb;
 | |
| #endif
 | |
|     CARD8		*cop_base;
 | |
|     Cop			*cop;
 | |
|     CARD32		*window;
 | |
|     CARD32		cop_depth;
 | |
|     CARD32		cop_stride;
 | |
|     Bool		mmio;
 | |
|     TridentSave		save;
 | |
| } TridentCardInfo;
 | |
|     
 | |
| #define getTridentCardInfo(kd)  ((TridentCardInfo *) ((kd)->card->driver))
 | |
| #define tridentCardInfo(kd)	    TridentCardInfo	*tridentc = getTridentCardInfo(kd)
 | |
| 
 | |
| typedef struct _tridentCursor {
 | |
|     int		width, height;
 | |
|     int		xhot, yhot;
 | |
|     Bool	has_cursor;
 | |
|     CursorPtr	pCursor;
 | |
|     Pixel	source, mask;
 | |
| } TridentCursor;
 | |
| 
 | |
| #define TRIDENT_CURSOR_WIDTH	64
 | |
| #define TRIDENT_CURSOR_HEIGHT	64
 | |
| 
 | |
| typedef struct _tridentScreenInfo {
 | |
| #ifdef VESA
 | |
|     VesaScreenPrivRec	vesa;
 | |
| #else
 | |
|     FbdevScrPriv    fbdev;
 | |
| #endif
 | |
|     CARD8	    *cursor_base;
 | |
|     CARD8	    *screen;
 | |
|     CARD8	    *off_screen;
 | |
|     int		    off_screen_size;
 | |
|     TridentCursor   cursor;
 | |
| } TridentScreenInfo;
 | |
| 
 | |
| #define getTridentScreenInfo(kd) ((TridentScreenInfo *) ((kd)->screen->driver))
 | |
| #define tridentScreenInfo(kd)    TridentScreenInfo *tridents = getTridentScreenInfo(kd)
 | |
| 
 | |
| Bool
 | |
| tridentDrawInit (ScreenPtr pScreen);
 | |
| 
 | |
| void
 | |
| tridentDrawEnable (ScreenPtr pScreen);
 | |
| 
 | |
| void
 | |
| tridentDrawSync (ScreenPtr pScreen);
 | |
| 
 | |
| void
 | |
| tridentDrawDisable (ScreenPtr pScreen);
 | |
| 
 | |
| void
 | |
| tridentDrawFini (ScreenPtr pScreen);
 | |
| 
 | |
| CARD8
 | |
| tridentReadIndex (TridentCardInfo *tridentc, CARD16 port, CARD8 index);
 | |
| 
 | |
| void
 | |
| tridentWriteIndex (TridentCardInfo *tridentc, CARD16 port, CARD8 index, CARD8 value);
 | |
| 
 | |
| Bool
 | |
| tridentCursorInit (ScreenPtr pScreen);
 | |
| 
 | |
| void
 | |
| tridentCursorEnable (ScreenPtr pScreen);
 | |
| 
 | |
| void
 | |
| tridentCursorDisable (ScreenPtr pScreen);
 | |
| 
 | |
| void
 | |
| tridentCursorFini (ScreenPtr pScreen);
 | |
| 
 | |
| void
 | |
| tridentRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef);
 | |
| 
 | |
| extern KdCardFuncs  tridentFuncs;
 | |
| 
 | |
| #endif /* _TRIDENT_H_ */
 |