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