xref: /csrg-svn/sys/news3400/fb/fbdefs.h (revision 63260)
153893Smckusick /*
2*63260Sbostic  * Copyright (c) 1992, 1993
3*63260Sbostic  *	The Regents of the University of California.  All rights reserved.
453893Smckusick  *
553893Smckusick  * This code is derived from software contributed to Berkeley by
653893Smckusick  * Sony Corp. and Kazumasa Utashiro of Software Research Associates, Inc.
753893Smckusick  *
853893Smckusick  * %sccs.include.redist.c%
953893Smckusick  *
1053893Smckusick  * from: $Hdr: fbdefs.h,v 4.300 91/06/09 06:33:54 root Rel41 $ SONY
1153893Smckusick  *
12*63260Sbostic  *	@(#)fbdefs.h	8.1 (Berkeley) 06/11/93
1353893Smckusick  */
1453893Smckusick 
1553893Smckusick #ifndef mips
1653893Smckusick #define volatile
1753893Smckusick #endif
1853893Smckusick 
1953893Smckusick #ifdef CPU_SINGLE
2058610Sutashiro 
2153893Smckusick #if defined(news3400) || defined(news3700)
2253893Smckusick #define splbitmap	spl3
2358610Sutashiro #endif
2453893Smckusick #define	FB_LOCK		lock_bitmap()
2553893Smckusick #define FB_UNLOCK	unlock_bitmap()
2658610Sutashiro 
2753893Smckusick #else /* CPU_SINGLE */
2858610Sutashiro 
2953893Smckusick #undef PRE_EMPT
3053893Smckusick #define PRE_EMPT
3153893Smckusick #define FB_LOCK
3253893Smckusick #define FB_UNLOCK
3357178Sutashiro #include <news3400/fb/fbsem.h> /* semaphore name */
3458610Sutashiro 
3553893Smckusick #endif /* CPU_SINGLE */
3653893Smckusick 
3753893Smckusick #if defined(news3400) || defined(news3700)
3857170Sutashiro #define WB_FLUSH	MachEmptyWriteBuffer()
3953893Smckusick #else
4053893Smckusick #define WB_FLUSH
4153893Smckusick #endif
4253893Smckusick 
4353893Smckusick /*
4453893Smckusick  * macro to compute modulo
4553893Smckusick  * 	MOD(-1, 16) --> 15
4653893Smckusick  *	DIV(-1, 16) --> -1
4753893Smckusick  */
4853893Smckusick #define MOD(x, d, t)	(((t)=(x)%(d))>=0?(t):(t)+(d))
4953893Smckusick #define TRUNC(x, d, t)	((x)-MOD(x,d,t))
5053893Smckusick #define DIV(x, d, t)	(((x)-MOD(x,d,t))/(d))
5153893Smckusick 
5253893Smckusick /* BitsPerWord should be 2^x */
5353893Smckusick #define MODWORD(x)	((x)&((BitsPerWord)-1))
5453893Smckusick #define TRUNCWORD(x)	((x)-MODWORD(x))
5553893Smckusick #define DIVWORD(x)	(((x)-MODWORD(x))/BitsPerWord)
5653893Smckusick 
5753893Smckusick 
5853893Smckusick #define AllOnes		0xffff
5953893Smckusick 
6053893Smckusick /* transparency */
6153893Smckusick #define TRANS(t,f)	((t) ? ((f) & 0x3 | 0x4) : (f))
6253893Smckusick 
6353893Smckusick /*
6453893Smckusick  *	color definitions
6553893Smckusick  */
6653893Smckusick #define MODE_1to1	0
6753893Smckusick #define MODE_1toN	1
6853893Smckusick #define MODE_Nto1	2
6953893Smckusick #define MODE_NtoN	3
7053893Smckusick 
7153893Smckusick #define PARALLEL	0
7253893Smckusick #define INTERNAL	1
7353893Smckusick 
7453893Smckusick #define NODRAW		0
7553893Smckusick #define DRAW		1
7653893Smckusick 
7753893Smckusick typedef struct _mergeRopBits {
7853893Smckusick 	unsigned long	ca1, cx1, ca2, cx2;
7953893Smckusick } mergeRopRec;
8053893Smckusick 
8153893Smckusick extern mergeRopRec	mergeRopBits[];
8253893Smckusick 
8353893Smckusick #define DoRop(f, s, d, r) \
8453893Smckusick {  \
8553893Smckusick 	switch(f) {  \
8653893Smckusick 	case BF_0: \
8753893Smckusick 		(r) = 0; break;  \
8853893Smckusick 	case BF_SDA: \
8953893Smckusick 		(r) = (s)&(d); break;  \
9053893Smckusick 	case BF_SDIA: \
9153893Smckusick 		(r) = (s)&~(d); break;  \
9253893Smckusick 	case BF_S: \
9353893Smckusick 		(r) = (s); break;  \
9453893Smckusick 	case BF_SIDA: \
9553893Smckusick 		(r) = ~(s)&(d); break;  \
9653893Smckusick 	case BF_D: \
9753893Smckusick 		(r) = (d); break;  \
9853893Smckusick 	case BF_SDX: \
9953893Smckusick 		(r) = (s)^(d); break;  \
10053893Smckusick 	case BF_SDO: \
10153893Smckusick 		(r) = (s)|(d); break;  \
10253893Smckusick 	case BF_SDOI: \
10353893Smckusick 		(r) = ~((s)|(d)); break;  \
10453893Smckusick 	case BF_SDXI: \
10553893Smckusick 		(r) = ~((s)^(d)); break;  \
10653893Smckusick 	case BF_DI: \
10753893Smckusick 		(r) = ~(d); break;  \
10853893Smckusick 	case BF_SDIO: \
10953893Smckusick 		(r) = (s)|~(d); break;  \
11053893Smckusick 	case BF_SI: \
11153893Smckusick 		(r) = ~(s); break;  \
11253893Smckusick 	case BF_SIDO: \
11353893Smckusick 		(r) = ~(s)|(d); break;  \
11453893Smckusick 	case BF_SDAI: \
11553893Smckusick 		(r) = ~((s)&(d)); break;  \
11653893Smckusick 	case BF_1: \
11753893Smckusick 		(r) = 0xffffffff; break;  \
11853893Smckusick 	}  \
11953893Smckusick }
12053893Smckusick 
12153893Smckusick #define DoMergeRop(src, dst) \
12253893Smckusick 	((dst) & ((src) & _ca1 ^ _cx1) ^ ((src) & _ca2 ^ _cx2))
12353893Smckusick #define DoMergeRopMask(src, dst, mask) \
12453893Smckusick 	((dst) & (((src) & _ca1 ^ _cx1) | ~(mask)) ^ \
12553893Smckusick 	(((src) & _ca2 ^ _cx2) & (mask)))
12653893Smckusick #define DoMergeFill(dst)	(((dst) & (rop_and)) ^ (rop_xor))
12753893Smckusick #define DoMergeFillMask(dst, mask) \
12853893Smckusick 	(((dst) & ((rop_and) | ~(mask))) ^ ((rop_xor) & (mask)))
12953893Smckusick #define DoMultiRop(src, dst) \
13053893Smckusick { \
13153893Smckusick 	DoRop(funcs[0], src, dst, tmp0) \
13253893Smckusick 	DoRop(funcs[1], src, dst, tmp1) \
13353893Smckusick 	DoRop(funcs[2], src, dst, tmp2) \
13453893Smckusick 	DoRop(funcs[3], src, dst, tmp3) \
13553893Smckusick 	(dst) = tmp0 & masks[0] | tmp1 & masks[1] | \
13653893Smckusick 	    tmp2 & masks[2] | tmp3 & masks[3]; \
13753893Smckusick }
13853893Smckusick #define DoMultiRopMask(src, dst, mask) \
13953893Smckusick { \
14053893Smckusick 	DoRop(funcs[0], src, dst, tmp0) \
14153893Smckusick 	DoRop(funcs[1], src, dst, tmp1) \
14253893Smckusick 	DoRop(funcs[2], src, dst, tmp2) \
14353893Smckusick 	DoRop(funcs[3], src, dst, tmp3) \
14453893Smckusick 	(dst) = dst & ~(mask) | \
14553893Smckusick 	    (tmp0 & masks[0] | tmp1 & masks[1] | \
14653893Smckusick 		tmp2 & masks[2] | tmp3 & masks[3]) & mask; \
14753893Smckusick }
14853893Smckusick 
14953893Smckusick #define TypeAt(m, p)		((m)->fm_vaddr + (p) - (m)->fm_offset)
15053893Smckusick 
15153893Smckusick #ifdef CPU_DOUBLE
15253893Smckusick # define _TypeAt(m, p)		((m)->fm_addr[(p)>>CLSHIFT] + (CLOFSET&(p)))
15353893Smckusick #else /* CPU_DOUBLE */
15453893Smckusick # define _TypeAt(m, p)		((m)->fm_vaddr + (p) - (m)->fm_offset)
15553893Smckusick #endif /* CPU_DOUBLE */
15653893Smckusick 
15753893Smckusick #define WordAt(m, p)		(*(Word *)_TypeAt(m, p))
15853893Smckusick 
15953893Smckusick /*
16053893Smckusick *	Device Dependent Structure
16153893Smckusick */
16253893Smckusick 
16353893Smckusick #define	MAXPLANE	24
16453893Smckusick 
16553893Smckusick struct fbdev {
16653893Smckusick 	struct fbdev_ops *fbbm_op;
16753893Smckusick 	int		type;
16853893Smckusick 	int		unit;
16953893Smckusick 	lRectangle	FrameRect;
17053893Smckusick 	lRectangle	VisRect;
17153893Smckusick 	lRectangle	CursorRect;
17253893Smckusick 	lRectangle	MaskRect;
17353893Smckusick 	lRectangle	SaveRect;
17453893Smckusick 	lBitmap		Krom_BM0;
17553893Smckusick 	lBitmap		Krom_BM1;
17653893Smckusick 	char *		Krom_base;
17753893Smckusick 	lPoint		Krom_font_extent0;
17853893Smckusick 	lPoint		Krom_font_extent1;
17953893Smckusick 	char		funcvec[MAXPLANE];
18053893Smckusick 	int		Mode;
18153893Smckusick 	int		Pmask;
18253893Smckusick 	unsigned int	pat;
18353893Smckusick 	char		func;
18453893Smckusick 	int		fore;
18553893Smckusick 	int		aux;
18653893Smckusick 	int		trans;
18753893Smckusick 	int		cache_off;
18853893Smckusick 	int		font_w;
18953893Smckusick 	int		font_h;
19053893Smckusick 	int		char_w;
19153893Smckusick 	int		char_h;
19253893Smckusick 	int		scr_w;
19353893Smckusick 	int		scr_h;
19453893Smckusick 	int		ch_pos;
19553893Smckusick 	int		ul_pos;
19653893Smckusick 	int		x_offset;
19753893Smckusick 	int		y_offset;
19853893Smckusick 	int		rit_m;
19953893Smckusick 	int		btm_m;
20053893Smckusick 	lRectangle	moveArea;
20153893Smckusick 	lPoint		size;
20253893Smckusick 	lPoint		hot;
20353893Smckusick 	char		curfuncv[MAXPLANE];
20453893Smckusick 	char		maskfuncv[MAXPLANE];
20553893Smckusick 	int		cursorSet;
20653893Smckusick 	int		cursorShow;
20753893Smckusick 	int		cursorVis;
20853893Smckusick 	lPoint		cursorP;
20953893Smckusick 	char		*rcont_base;
21053893Smckusick 	char		*rcont_reg;
21153893Smckusick 	int		fbNplane;
21253893Smckusick 	int		Colorwidth;
21353893Smckusick 	int		planemask;
21453893Smckusick 	int		Mono;
21553893Smckusick 	int		Dimmer;
21653893Smckusick 	int		DispVer;
21753893Smckusick 	unsigned short	status_flag;
21853893Smckusick 	unsigned short	run_flag;
21953893Smckusick 	char		*private;
22053893Smckusick 	int		hard_cursor;
22153893Smckusick };
22253893Smckusick 
22353893Smckusick #ifdef CPU_SINGLE
22453893Smckusick struct mfbdev {
22553893Smckusick 	char		*vram_start;
22653893Smckusick 	int		vram_width;
22753893Smckusick };
22853893Smckusick #endif /* CPU_SINGLE */
22953893Smckusick 
23053893Smckusick struct fbdev_ops {
23153893Smckusick 	void	(*fb_rop_init)();
23253893Smckusick 	void	(*fb_rop_copy)();
23353893Smckusick 	void	(*fb_rop_winit)();
23453893Smckusick 	void	(*fb_rop_write)();
23553893Smckusick 	void	(*fb_rop_read)();
23653893Smckusick 	void	(*fb_rop_cinit)();
23753893Smckusick 	void	(*fb_rop_clear)();
23853893Smckusick 	void	(*fb_rop_vect)();
23953893Smckusick 	void	(*fb_rop_dot)();
24053893Smckusick 	void	(*fb_rop_fillscan)();
24153893Smckusick 	void	(*fb_rop_wait)();
24253893Smckusick 	void	(*fb_rop_reset)();
24353893Smckusick 	char 	*(*fb_Krom_addr)();
24453893Smckusick 	void	(*fb_init_palette)();
24553893Smckusick 	int	(*fb_set_palette)();
24653893Smckusick 	int	(*fb_get_palette)();
24753893Smckusick 	int	(*fb_get_pixel)();
24853893Smckusick 	int	(*fb_set_dimmer)();
24953893Smckusick 	int	(*fb_get_dimmer)();
25053893Smckusick 	int	(*fb_open)();
25153893Smckusick 	int	(*fb_close)();
25253893Smckusick 	int	(*fb_ioctl)();
25353893Smckusick 	int	(*fb_get_page)();
25453893Smckusick 	void	(*fb_cursor_set)();
25553893Smckusick 	void	(*fb_cursor_on)();
25653893Smckusick 	void	(*fb_cursor_off)();
25753893Smckusick 	void	(*fb_cursor_move)();
25853893Smckusick };
25953893Smckusick 
26053893Smckusick struct autodev {
26153893Smckusick 	int	type;
26253893Smckusick 	char	*base;
26353893Smckusick 	char	*reg;
26453893Smckusick };
26553893Smckusick 
26653893Smckusick struct fbdevsw {
26753893Smckusick 	int	num;
26853893Smckusick 	int	(*fb_probe)();
26953893Smckusick 	void	(*fb_setup)();
27053893Smckusick };
27153893Smckusick 
27253893Smckusick extern struct autodev	autodev[];
27353893Smckusick extern struct fbdev	fbdev[];
27453893Smckusick extern int		nfbdev;
27553893Smckusick extern struct fbdev	*consfb;
27653893Smckusick extern unsigned short	fb_color_pallet_def[];
27753893Smckusick extern unsigned short	fb_gray_pallet_def[];
27853893Smckusick 
27953893Smckusick /*	fb_ioctl Command	*/
28053893Smckusick 
28153893Smckusick #define	FB_INTCHECK		1
28253893Smckusick #define	FB_INTCLEAR		2
28353893Smckusick #define	FB_INTENABLE		3
28453893Smckusick #define	FB_STATUSCHECK		4
28553893Smckusick 
28653893Smckusick #define FB_SETVIDEOCTL		10
28753893Smckusick #define FB_GETVIDEOSTATUS	11
28853893Smckusick #define FB_SETPALETTEMODE	12
28953893Smckusick #define FB_GETPALETTEMODE	13
29053893Smckusick 
29153893Smckusick #define	FB_INT_VSYNC		1
29253893Smckusick #define	FB_INT_ROPDONE		2
29353893Smckusick 
29453893Smckusick #define	FB_STATUS_ROPEXEC	4
29553893Smckusick #define	FB_STATUS_ROPWAIT	8
29653893Smckusick #define	FB_STATUS_ROPVSYNC	16
29753893Smckusick 
29853893Smckusick /*	run_flag	*/
29953893Smckusick 
30053893Smckusick #define	FB_ACTIVE		1
30153893Smckusick #define	FB_WAITING		2
30253893Smckusick #define	FB_DONE			4
30353893Smckusick 
30453893Smckusick /*
30553893Smckusick *	Pseudo Frame Buffer
30653893Smckusick *
30753893Smckusick *	unit no
30853893Smckusick *	   0		Console Device and old Interface (/dev/fb)
30953893Smckusick *	   1		B/W Display and New Interface	(/dev/mfb)
31053893Smckusick *	   2		Color Display and New Interface	(/dev/cfb)
31153893Smckusick *
31253893Smckusick */
31353893Smckusick 
31453893Smckusick #define	fbbm_rop_init(fb, func) \
31553893Smckusick 	(*(fb)->fbbm_op->fb_rop_init)(fb, func)
31653893Smckusick 
31753893Smckusick #define	fbbm_rop_copy(fb, s, d, rp, wp) \
31853893Smckusick 	(*(fb)->fbbm_op->fb_rop_copy)(fb, s, d, rp, wp)
31953893Smckusick 
32053893Smckusick #define	fbbm_rop_winit(fb) \
32153893Smckusick 	(*(fb)->fbbm_op->fb_rop_winit)(fb)
32253893Smckusick 
32353893Smckusick #define	fbbm_rop_write(fb, map, p, width, srp, drp, wplane) \
32453893Smckusick 	(*(fb)->fbbm_op->fb_rop_write)(fb, map, p, width, srp, drp, wplane)
32553893Smckusick 
32653893Smckusick #define	fbbm_rop_read(fb, map, p, width, srp, drp, rplane, wplane) \
32753893Smckusick 	(*(fb)->fbbm_op->fb_rop_read)(fb, map, p, width, srp, drp, rplane, wplane)
32853893Smckusick 
32953893Smckusick #define	fbbm_rop_cinit(fb, wplane, bw) \
33053893Smckusick 	(*(fb)->fbbm_op->fb_rop_cinit)(fb, wplane, bw)
33153893Smckusick 
33253893Smckusick #define	fbbm_rop_clear(fb, dr) \
33353893Smckusick 	(*(fb)->fbbm_op->fb_rop_clear)(fb, dr)
33453893Smckusick 
33553893Smckusick #define	fbbm_rop_vect(fb, dr, func, forc, auxc, transp, wplane, n, p, lptn, lpf, sw) \
33653893Smckusick 	(*(fb)->fbbm_op->fb_rop_vect)(fb, dr, func, forc, auxc, transp, wplane, n, p, lptn, lpf, sw)
33753893Smckusick 
33853893Smckusick #define	fbbm_rop_dot(fb, dr, func, forc, auxc, transp, wplane, n, p) \
33953893Smckusick 	(*(fb)->fbbm_op->fb_rop_dot)(fb, dr, func, forc, auxc, transp, wplane, n, p)
34053893Smckusick 
34153893Smckusick #define fbbm_rop_fillscan(fb, ls, ns, clip, sw) \
34253893Smckusick 	(*(fb)->fbbm_op->fb_rop_fillscan)(fb, ls, ns, clip, sw)
34353893Smckusick 
34453893Smckusick #define fbbm_Krom_addr(fb, c, sr) \
34553893Smckusick 	(*(fb)->fbbm_op->fb_Krom_addr)(fb, c, sr)
34653893Smckusick 
34753893Smckusick #define fbbm_rop_wait(fb) \
34853893Smckusick 	(*(fb)->fbbm_op->fb_rop_wait)(fb)
34953893Smckusick #define fbbm_rop_reset(fb) \
35053893Smckusick 	(*(fb)->fbbm_op->fb_rop_reset)(fb)
35153893Smckusick 
35253893Smckusick #define fbbm_init_palette(fb) \
35353893Smckusick 	(*(fb)->fbbm_op->fb_init_palette)(fb)
35453893Smckusick #define fbbm_set_palette(fb, palette) \
35553893Smckusick 	(*(fb)->fbbm_op->fb_set_palette)(fb, palette)
35653893Smckusick #define fbbm_get_palette(fb, palette) \
35753893Smckusick 	(*(fb)->fbbm_op->fb_get_palette)(fb, palette)
35853893Smckusick #define fbbm_get_pixel(fb, pixel) \
35953893Smckusick 	(*(fb)->fbbm_op->fb_get_pixel)(fb, pixel)
36053893Smckusick 
36153893Smckusick #define fbbm_set_dimmer(fb, n) \
36253893Smckusick 	(*(fb)->fbbm_op->fb_set_dimmer)(fb, n)
36353893Smckusick #define fbbm_get_dimmer(fb) \
36453893Smckusick 	(*(fb)->fbbm_op->fb_get_dimmer)(fb)
36553893Smckusick 
36653893Smckusick #define fbbm_open(fb) \
36753893Smckusick 	(*(fb)->fbbm_op->fb_open)(fb)
36853893Smckusick #define fbbm_close(fb) \
36953893Smckusick 	(*(fb)->fbbm_op->fb_close)(fb)
37053893Smckusick #define fbbm_ioctl(fb, cmd, data) \
37153893Smckusick 	(*(fb)->fbbm_op->fb_ioctl)(fb, cmd, data)
37253893Smckusick 
37353893Smckusick #define fbbm_get_page(fb, off) \
37453893Smckusick 	(*(fb)->fbbm_op->fb_get_page)(fb, off)
37553893Smckusick 
37653893Smckusick #define fbbm_cursor_set(fb, fc, bc) \
37753893Smckusick 	(*(fb)->fbbm_op->fb_cursor_set)(fb, fc, bc)
37853893Smckusick #define fbbm_cursor_on(fb) \
37953893Smckusick 	(*(fb)->fbbm_op->fb_cursor_on)(fb)
38053893Smckusick #define fbbm_cursor_off(fb) \
38153893Smckusick 	(*(fb)->fbbm_op->fb_cursor_off)(fb)
38253893Smckusick #define fbbm_cursor_move(fb) \
38353893Smckusick 	(*(fb)->fbbm_op->fb_cursor_move)(fb)
38453893Smckusick 
38553893Smckusick extern unsigned short mfbstarttab16[16];
38653893Smckusick extern unsigned short mfbendtab16[16];
38753893Smckusick extern unsigned short mfbpartmasks16[16][16];
38853893Smckusick extern unsigned int mfbstarttab32[32];
38953893Smckusick extern unsigned int mfbendtab32[32];
39053893Smckusick extern unsigned int mfbpartmasks32[32][32];
39153893Smckusick extern void mfb_copy_area32();
39253893Smckusick extern void mfb_copyinv_area32();
39353893Smckusick extern void mfb_or_area32();
39453893Smckusick extern void mfb_xor_area32();
39553893Smckusick extern void mfb_general_area32();
39653893Smckusick extern void mfb_clr_area32();
39753893Smckusick extern void mfb_inv_area32();
39853893Smckusick extern void mfb_set_area32();
39953893Smckusick extern void mfb_copy_area16();
40053893Smckusick extern void mfb_copyinv_area16();
40153893Smckusick extern void mfb_or_area16();
40253893Smckusick extern void mfb_xor_area16();
40353893Smckusick extern void mfb_general_area16();
40453893Smckusick extern void mfb_clr_area16();
40553893Smckusick extern void mfb_inv_area16();
40653893Smckusick extern void mfb_set_area16();
40753893Smckusick extern void mfb_clrvvector32();
40853893Smckusick extern void mfb_clrhvector32();
40953893Smckusick extern void mfb_clrvector32();
41053893Smckusick extern void mfb_invvvector32();
41153893Smckusick extern void mfb_invhvector32();
41253893Smckusick extern void mfb_invvector32();
41353893Smckusick extern void mfb_setvvector32();
41453893Smckusick extern void mfb_sethvector32();
41553893Smckusick extern void mfb_setvector32();
41653893Smckusick extern void mfb_point();
41753893Smckusick extern void mfb_vector32();
418