328 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			328 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			C
		
	
	
	
/*
 | 
						|
 * Copyright © 1999 SuSE, Inc.
 | 
						|
 *
 | 
						|
 * 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 SuSE not be used in advertising or
 | 
						|
 * publicity pertaining to distribution of the software without specific,
 | 
						|
 * written prior permission.  SuSE makes no representations about the
 | 
						|
 * suitability of this software for any purpose.  It is provided "as is"
 | 
						|
 * without express or implied warranty.
 | 
						|
 *
 | 
						|
 * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
 | 
						|
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
 | 
						|
 * 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:  Keith Packard, SuSE, Inc.
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef _IGS_H_
 | 
						|
#define _IGS_H_
 | 
						|
 | 
						|
#include "kdrive.h"
 | 
						|
#include "igsreg.h"
 | 
						|
 | 
						|
extern KdCardFuncs  igsFuncs;
 | 
						|
 | 
						|
/*
 | 
						|
 * FB		0x00000000
 | 
						|
 * VGA		0x00800000
 | 
						|
 * Blt window	0x008a0000
 | 
						|
 * Coprocessor	0x008bf000
 | 
						|
 */
 | 
						|
 | 
						|
#if BITMAP_BIT_ORDER == MSBFirst
 | 
						|
#define IGS_FB		    0x00400000
 | 
						|
#else
 | 
						|
#define IGS_FB		    0x00000000
 | 
						|
#endif
 | 
						|
#define IGS_VGA		    0x00800000
 | 
						|
#define IGS_COP_DATA	    0x008a0000
 | 
						|
#define IGS_COP_DATA_LEN    0x00010000
 | 
						|
#define IGS_COP_OFFSET	    0x008bf000
 | 
						|
/* give audio 1/2 meg at end */
 | 
						|
#if 1
 | 
						|
#define IGS_MEM		    ((4096-512)*1024)
 | 
						|
#else
 | 
						|
#define IGS_MEM		    ((4096)*1024)
 | 
						|
#endif
 | 
						|
 | 
						|
#define IGS_CLOCK_REF	24576	/* KHz */
 | 
						|
 | 
						|
#define IGS_SCALE(p)	((p) ? (2 * (p)) : 1)
 | 
						|
 | 
						|
#define IGS_CLOCK(m,n,p)	((IGS_CLOCK_REF * ((m) + 1)) / (((n) + 1) * IGS_SCALE(p)))
 | 
						|
 | 
						|
#define IGS_MAX_CLOCK	260000
 | 
						|
 | 
						|
#define IGS_MIN_VCO	115000
 | 
						|
 | 
						|
typedef volatile CARD8	VOL8;
 | 
						|
typedef volatile CARD16	VOL16;
 | 
						|
typedef volatile CARD32	VOL32;
 | 
						|
 | 
						|
typedef struct _Cop5xxx {
 | 
						|
    VOL8	pad000[0x10];		    /* 0x000 */
 | 
						|
    
 | 
						|
    VOL32	control;		    /* 0x010 */
 | 
						|
#define IGS_CONTROL_HBLTW_RDYZ	    0x0100
 | 
						|
#define IGS_CONTROL_MALLWBEPTZ	    0x0200
 | 
						|
#define IGS_CONTROL_CMDFF	    0x0400
 | 
						|
#define IGS_CONTROL_SOP		    0x0800
 | 
						|
#define IGS_CONTROL_OPS		    0x1000
 | 
						|
#define IGS_CONTROL_TER		    0x2000
 | 
						|
#define IGS_CONTROL_HBACKZ	    0x4000
 | 
						|
#define IGS_CONTROL_BUSY	    0x8000
 | 
						|
    
 | 
						|
    VOL8	pad014[0x04];		    /* 0x014 */
 | 
						|
    
 | 
						|
    VOL32	src1_stride;		    /* 0x018 */
 | 
						|
    
 | 
						|
    VOL32	format;			    /* 0x01c */
 | 
						|
 | 
						|
#define IGS_FORMAT_8BPP	    0
 | 
						|
#define IGS_FORMAT_16BPP    1
 | 
						|
#define IGS_FORMAT_24BPP    2
 | 
						|
#define IGS_FORMAT_32BPP    3
 | 
						|
 | 
						|
    VOL32	bres_error;		    /* 0x020 */
 | 
						|
    VOL32	bres_k1;		    /* 0x024 */
 | 
						|
    VOL32	bres_k2;		    /* 0x028 */
 | 
						|
    VOL8	pad02c[0x1c];		    /* 0x02c */
 | 
						|
    
 | 
						|
    VOL32	mix;			    /* 0x048 */
 | 
						|
#define IGS_MIX_FG	0x00ff
 | 
						|
#define IGS_MIX_BG	0xff00
 | 
						|
#define IGS_MAKE_MIX(fg,bg)	((fg) | ((bg) << 8))
 | 
						|
 | 
						|
#define IGS_MIX_ZERO		    0x0
 | 
						|
#define IGS_MIX_SRC_AND_DST	    0x1
 | 
						|
#define IGS_MIX_SRC_AND_NOT_DST	    0x2
 | 
						|
#define IGS_MIX_SRC		    0x3
 | 
						|
#define IGS_MIX_NOT_SRC_AND_DST	    0x4
 | 
						|
#define IGS_MIX_DST		    0x5
 | 
						|
#define IGS_MIX_SRC_XOR_DST	    0x6
 | 
						|
#define IGS_MIX_SRC_OR_DST	    0x7
 | 
						|
#define IGS_MIX_NOT_SRC_AND_NOT_DST 0x8
 | 
						|
#define IGS_MIX_SRC_XOR_NOT_DST	    0x9
 | 
						|
#define IGS_MIX_NOT_DST		    0xa
 | 
						|
#define IGS_MIX_SRC_OR_NOT_DST	    0xb
 | 
						|
#define IGS_MIX_NOT_SRC		    0xc
 | 
						|
#define IGS_MIX_NOT_SRC_OR_DST	    0xd
 | 
						|
#define IGS_MIX_NOT_SRC_OR_NOT_DST  0xe
 | 
						|
#define IGS_MIX_ONE		    0xf
 | 
						|
    
 | 
						|
    VOL32	colorComp;		    /* 0x04c */
 | 
						|
    VOL32	planemask;		    /* 0x050 */
 | 
						|
    
 | 
						|
    VOL8	pad054[0x4];		    /* 0x054 */
 | 
						|
    
 | 
						|
    VOL32	fg;			    /* 0x058 */
 | 
						|
    VOL32	bg;			    /* 0x05c */
 | 
						|
    VOL32	dim;			    /* 0x060 */
 | 
						|
#define IGS_MAKE_DIM(w,h)   ((w) | ((h) << 16))
 | 
						|
    VOL8	pad5[0x0c];		    /* 0x064 */
 | 
						|
    
 | 
						|
    VOL32	src1_base_address;	    /* 0x070 */
 | 
						|
    VOL8	pad074[0x04];		    /* 0x074 */
 | 
						|
    
 | 
						|
    VOL32	rotate;			    /* 0x078 */
 | 
						|
#define IGS_MAKE_ROTATE(x,y)	((x) | ((y) << 16))
 | 
						|
    VOL32	operation;		    /* 0x07c */
 | 
						|
 | 
						|
/* OCT[2:0] */
 | 
						|
#define IGS_DRAW_X_MAJOR	0x00000000
 | 
						|
#define IGS_DRAW_Y_MAJOR	0x00000001
 | 
						|
#define IGS_DRAW_T_B		0x00000000
 | 
						|
#define IGS_DRAW_B_T		0x00000002
 | 
						|
#define IGS_DRAW_L_R		0x00000000
 | 
						|
#define IGS_DRAW_R_L		0x00000004
 | 
						|
    
 | 
						|
/* Draw_Mode[1:0] */
 | 
						|
#define IGS_DRAW_ALL		0x00000000
 | 
						|
#define IGS_DRAW_NOT_FIRST	0x00000010
 | 
						|
#define IGS_DRAW_NOT_LAST	0x00000020
 | 
						|
#define IGS_DRAW_NOT_FIRST_LAST	0x00000030
 | 
						|
 | 
						|
/* TRPS[1:0] */
 | 
						|
#define IGS_TRANS_SRC1		0x00000000
 | 
						|
#define IGS_TRANS_SRC2		0x00000100
 | 
						|
#define IGS_TRANS_DST		0x00000200
 | 
						|
/* TRPS2 Transparent Invert */
 | 
						|
#define IGS_TRANS_INVERT	0x00000400
 | 
						|
/* TRPS3, Transparent Enable */
 | 
						|
#define IGS_TRANS_ENABLE	0x00000800
 | 
						|
 | 
						|
/* PPS[3:0], Pattern Pixel Select */
 | 
						|
#define IGS_PIXEL_TEXT_OPAQUE	0x00001000
 | 
						|
#define IGS_PIXEL_STIP_OPAQUE	0x00002000
 | 
						|
#define IGS_PIXEL_LINE_OPAQUE	0x00003000
 | 
						|
#define IGS_PIXEL_TEXT_TRANS	0x00005000
 | 
						|
#define IGS_PIXEL_STIP_TRANS	0x00006000
 | 
						|
#define IGS_PIXEL_LINE_TRANS	0x00007000
 | 
						|
#define IGS_PIXEL_FG		0x00008000
 | 
						|
#define IGS_PIXEL_TILE		0x00009000
 | 
						|
#define IGS_PIXEL_TILE_OPAQUE	0x0000d000
 | 
						|
    
 | 
						|
/* HostBltEnable[1:0] */
 | 
						|
#define IGS_HBLT_DISABLE	0x00000000
 | 
						|
#define IGS_HBLT_READ		0x00010000
 | 
						|
#define IGS_HBLT_WRITE_1	0x00020000
 | 
						|
#define IGS_HBLT_WRITE_2	0x00030000
 | 
						|
 | 
						|
/* Src2MapSelect[2:0], Src2 map select mode */
 | 
						|
#define IGS_SRC2_NORMAL		0x00000000
 | 
						|
#define IGS_SRC2_MONO_OPAQUE	0x00100000
 | 
						|
#define IGS_SRC2_FG		0x00200000
 | 
						|
#define IGS_SRC2_MONO_TRANS	0x00500000
 | 
						|
 | 
						|
/* StepFunction[3:0], Step function select */
 | 
						|
#define IGS_STEP_DRAW_AND_STEP	0x04000000
 | 
						|
#define IGS_STEP_LINE_DRAW	0x05000000
 | 
						|
#define IGS_STEP_PXBLT		0x08000000
 | 
						|
#define IGS_STEP_INVERT_PXBLT	0x09000000
 | 
						|
#define IGS_STEP_TERNARY_PXBLT	0x0b000000
 | 
						|
 | 
						|
/* FGS */
 | 
						|
#define IGS_FGS_FG		0x00000000
 | 
						|
#define IGS_FGS_SRC		0x20000000
 | 
						|
    
 | 
						|
/* BGS */
 | 
						|
#define IGS_BGS_BG		0x00000000
 | 
						|
#define IGS_BGS_SRC		0x80000000
 | 
						|
    VOL8	pad080[0x90];		    /* 0x080 */
 | 
						|
    
 | 
						|
    VOL32	debug_control;		    /* 0x110 */
 | 
						|
    VOL8	pad114[0x04];		    /* 0x114 */
 | 
						|
    
 | 
						|
    VOL32	src2_stride;		    /* 0x118 */
 | 
						|
    VOL8	pad11c[0x14];		    /* 0x11c */
 | 
						|
    
 | 
						|
    VOL32	extension;		    /* 0x130 */
 | 
						|
 | 
						|
#define IGS_BURST_ENABLE    0x01
 | 
						|
#define IGS_STYLE_LINE	    0x02
 | 
						|
#define IGS_ADDITIONAL_WAIT 0x04
 | 
						|
#define	IGS_BLOCK_COP_REG   0x08
 | 
						|
#define IGS_TURBO_MONO	    0x10
 | 
						|
#define IGS_SELECT_SAMPLE   0x40
 | 
						|
#define IGS_MDSBL_RD_B_WR   0x80
 | 
						|
#define IGS_WRMRSTZ	    0x100
 | 
						|
#define IGS_TEST_MTST	    0x200
 | 
						|
 | 
						|
    VOL32	style_line;		    /* 0x134 */
 | 
						|
#define IGS_MAKE_STILE_LINE(roll_over,inc,pattern,accumulator) \
 | 
						|
    ((roll_over) | \
 | 
						|
     ((style_line_inc) << 8) | \
 | 
						|
     ((style_line_patern) << 16) | \
 | 
						|
     ((style_line_accumullator) << 24))
 | 
						|
    VOL32	style_line_pattern_index;   /* 0x138 */
 | 
						|
 | 
						|
    VOL32	mono_burst_total;	    /* 0x13c */
 | 
						|
    VOL8	pad140[0x10];		    /* 0x140 */
 | 
						|
    
 | 
						|
    VOL32	pat_x_rotate;		    /* 0x150 */
 | 
						|
    VOL8	pad154[0x1c];		    /* 0x154 */
 | 
						|
 | 
						|
    VOL32	src1_start;		    /* 0x170 */
 | 
						|
    VOL32	src2_start;		    /* 0x174 */
 | 
						|
    VOL32	dst_start;		    /* 0x178 */
 | 
						|
    VOL8	pad17c[0x9c];		    /* 0x17c */
 | 
						|
    
 | 
						|
    VOL32	dst_stride;		    /* 0x218 */
 | 
						|
} Cop5xxx;
 | 
						|
 | 
						|
typedef struct _igsCardInfo {
 | 
						|
    Cop5xxx	*cop;
 | 
						|
    VOL8	*vga;
 | 
						|
    VOL32	*copData;
 | 
						|
    CARD8	*frameBuffer;
 | 
						|
    IgsVga	igsvga;
 | 
						|
} IgsCardInfo;
 | 
						|
    
 | 
						|
#define getIgsCardInfo(kd)  ((IgsCardInfo *) ((kd)->card->driver))
 | 
						|
#define igsCardInfo(kd)	    IgsCardInfo	*igsc = getIgsCardInfo(kd)
 | 
						|
 | 
						|
typedef struct _igsCursor {
 | 
						|
    int		width, height;
 | 
						|
    int		xhot, yhot;
 | 
						|
    Bool	has_cursor;
 | 
						|
    CursorPtr	pCursor;
 | 
						|
    Pixel	source, mask;
 | 
						|
} IgsCursor;
 | 
						|
 | 
						|
#define IGS_CURSOR_WIDTH	64
 | 
						|
#define IGS_CURSOR_HEIGHT	64
 | 
						|
 | 
						|
typedef struct _igsPattern {
 | 
						|
    INT32	xrot, yrot;
 | 
						|
    CARD32	serial_number;
 | 
						|
    CARD8	*base;
 | 
						|
    CARD32	offset;
 | 
						|
} IgsPattern;
 | 
						|
 | 
						|
#define IGS_NUM_PATTERN		8
 | 
						|
#define IGS_PATTERN_WIDTH	8
 | 
						|
#define IGS_PATTERN_HEIGHT	8
 | 
						|
 | 
						|
typedef struct _igsPatternCache {
 | 
						|
    CARD8	*base;
 | 
						|
    CARD32	offset;
 | 
						|
    IgsPattern	pattern[IGS_NUM_PATTERN];
 | 
						|
    int		next;
 | 
						|
} IgsPatternCache;
 | 
						|
 | 
						|
typedef struct _igsScreenInfo {
 | 
						|
    CARD8	    *cursor_base;
 | 
						|
    CARD32	    cursor_offset;
 | 
						|
    IgsCursor	    cursor;
 | 
						|
    IgsPatternCache tile;
 | 
						|
    IgsPatternCache stipple;
 | 
						|
} IgsScreenInfo;
 | 
						|
 | 
						|
#define IgsTileSize(bpp)	(IGS_PATTERN_WIDTH*(bpp)/8*IGS_PATTERN_HEIGHT)
 | 
						|
#define IgsStippleSize(bpp)	(IGS_PATTERN_WIDTH/8*IGS_PATTERN_HEIGHT)
 | 
						|
 | 
						|
#define getIgsScreenInfo(kd) ((IgsScreenInfo *) ((kd)->screen->driver))
 | 
						|
#define igsScreenInfo(kd)    IgsScreenInfo *igss = getIgsScreenInfo(kd)
 | 
						|
 | 
						|
Bool
 | 
						|
igsDrawInit (ScreenPtr pScreen);
 | 
						|
 | 
						|
void
 | 
						|
igsDrawEnable (ScreenPtr pScreen);
 | 
						|
 | 
						|
void
 | 
						|
igsDrawDisable (ScreenPtr pScreen);
 | 
						|
 | 
						|
void
 | 
						|
igsDrawSync (ScreenPtr pScreen);
 | 
						|
 | 
						|
void
 | 
						|
igsDrawFini (ScreenPtr pScreen);
 | 
						|
 | 
						|
void
 | 
						|
igsGetColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs);
 | 
						|
 | 
						|
void
 | 
						|
igsPutColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs);
 | 
						|
 | 
						|
Bool
 | 
						|
igsCursorInit (ScreenPtr pScreen);
 | 
						|
 | 
						|
void
 | 
						|
igsCursorEnable (ScreenPtr pScreen);
 | 
						|
 | 
						|
void
 | 
						|
igsCursorDisable (ScreenPtr pScreen);
 | 
						|
 | 
						|
void
 | 
						|
igsCursorFini (ScreenPtr pScreen);
 | 
						|
 | 
						|
#endif /* _IGS_H_ */
 |