1 /* 2 * Copyright (c) 1992 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Sony Corp. and Kazumasa Utashiro of Software Research Associates, Inc. 7 * 8 * %sccs.include.redist.c% 9 * 10 * from: $Hdr: fbdefs.h,v 4.300 91/06/09 06:33:54 root Rel41 $ SONY 11 * 12 * @(#)fbdefs.h 7.1 (Berkeley) 06/04/92 13 */ 14 15 #ifndef mips 16 #define volatile 17 #endif 18 19 #ifdef CPU_SINGLE 20 #if defined(news1700) 21 #undef splbitmap 22 #endif 23 #if defined(news700) 24 #define splbitmap spl4 25 #endif /* news700 */ 26 #if defined(news3400) || defined(news3700) 27 #define splbitmap spl3 28 #endif /* news3400 || news3700 */ 29 #define FB_LOCK lock_bitmap() 30 #define FB_UNLOCK unlock_bitmap() 31 #else /* CPU_SINGLE */ 32 #undef PRE_EMPT 33 #define PRE_EMPT 34 #ifdef IPC_MRX 35 #define FB_LOCK 36 #define FB_UNLOCK 37 #include "../fb/fbsem.h" /* semaphore name */ 38 #else /* IPC_MRX */ 39 #define FB_LOCK wait(bitmap_use) 40 #define FB_UNLOCK signal(bitmap_use) 41 #endif /* IPC_MRX */ 42 #endif /* CPU_SINGLE */ 43 44 #if defined(news3400) || defined(news3700) 45 #define WB_FLUSH wb_flush() 46 #else 47 #define WB_FLUSH 48 #endif 49 50 /* 51 * macro to compute modulo 52 * MOD(-1, 16) --> 15 53 * DIV(-1, 16) --> -1 54 */ 55 #define MOD(x, d, t) (((t)=(x)%(d))>=0?(t):(t)+(d)) 56 #define TRUNC(x, d, t) ((x)-MOD(x,d,t)) 57 #define DIV(x, d, t) (((x)-MOD(x,d,t))/(d)) 58 59 /* BitsPerWord should be 2^x */ 60 #define MODWORD(x) ((x)&((BitsPerWord)-1)) 61 #define TRUNCWORD(x) ((x)-MODWORD(x)) 62 #define DIVWORD(x) (((x)-MODWORD(x))/BitsPerWord) 63 64 65 #define AllOnes 0xffff 66 67 /* transparency */ 68 #define TRANS(t,f) ((t) ? ((f) & 0x3 | 0x4) : (f)) 69 70 /* 71 * color definitions 72 */ 73 #define MODE_1to1 0 74 #define MODE_1toN 1 75 #define MODE_Nto1 2 76 #define MODE_NtoN 3 77 78 #define PARALLEL 0 79 #define INTERNAL 1 80 81 #define NODRAW 0 82 #define DRAW 1 83 84 typedef struct _mergeRopBits { 85 unsigned long ca1, cx1, ca2, cx2; 86 } mergeRopRec; 87 88 extern mergeRopRec mergeRopBits[]; 89 90 #define DoRop(f, s, d, r) \ 91 { \ 92 switch(f) { \ 93 case BF_0: \ 94 (r) = 0; break; \ 95 case BF_SDA: \ 96 (r) = (s)&(d); break; \ 97 case BF_SDIA: \ 98 (r) = (s)&~(d); break; \ 99 case BF_S: \ 100 (r) = (s); break; \ 101 case BF_SIDA: \ 102 (r) = ~(s)&(d); break; \ 103 case BF_D: \ 104 (r) = (d); break; \ 105 case BF_SDX: \ 106 (r) = (s)^(d); break; \ 107 case BF_SDO: \ 108 (r) = (s)|(d); break; \ 109 case BF_SDOI: \ 110 (r) = ~((s)|(d)); break; \ 111 case BF_SDXI: \ 112 (r) = ~((s)^(d)); break; \ 113 case BF_DI: \ 114 (r) = ~(d); break; \ 115 case BF_SDIO: \ 116 (r) = (s)|~(d); break; \ 117 case BF_SI: \ 118 (r) = ~(s); break; \ 119 case BF_SIDO: \ 120 (r) = ~(s)|(d); break; \ 121 case BF_SDAI: \ 122 (r) = ~((s)&(d)); break; \ 123 case BF_1: \ 124 (r) = 0xffffffff; break; \ 125 } \ 126 } 127 128 #define DoMergeRop(src, dst) \ 129 ((dst) & ((src) & _ca1 ^ _cx1) ^ ((src) & _ca2 ^ _cx2)) 130 #define DoMergeRopMask(src, dst, mask) \ 131 ((dst) & (((src) & _ca1 ^ _cx1) | ~(mask)) ^ \ 132 (((src) & _ca2 ^ _cx2) & (mask))) 133 #define DoMergeFill(dst) (((dst) & (rop_and)) ^ (rop_xor)) 134 #define DoMergeFillMask(dst, mask) \ 135 (((dst) & ((rop_and) | ~(mask))) ^ ((rop_xor) & (mask))) 136 #define DoMultiRop(src, dst) \ 137 { \ 138 DoRop(funcs[0], src, dst, tmp0) \ 139 DoRop(funcs[1], src, dst, tmp1) \ 140 DoRop(funcs[2], src, dst, tmp2) \ 141 DoRop(funcs[3], src, dst, tmp3) \ 142 (dst) = tmp0 & masks[0] | tmp1 & masks[1] | \ 143 tmp2 & masks[2] | tmp3 & masks[3]; \ 144 } 145 #define DoMultiRopMask(src, dst, mask) \ 146 { \ 147 DoRop(funcs[0], src, dst, tmp0) \ 148 DoRop(funcs[1], src, dst, tmp1) \ 149 DoRop(funcs[2], src, dst, tmp2) \ 150 DoRop(funcs[3], src, dst, tmp3) \ 151 (dst) = dst & ~(mask) | \ 152 (tmp0 & masks[0] | tmp1 & masks[1] | \ 153 tmp2 & masks[2] | tmp3 & masks[3]) & mask; \ 154 } 155 156 #define TypeAt(m, p) ((m)->fm_vaddr + (p) - (m)->fm_offset) 157 158 #ifdef CPU_DOUBLE 159 # define _TypeAt(m, p) ((m)->fm_addr[(p)>>CLSHIFT] + (CLOFSET&(p))) 160 #else /* CPU_DOUBLE */ 161 # define _TypeAt(m, p) ((m)->fm_vaddr + (p) - (m)->fm_offset) 162 #endif /* CPU_DOUBLE */ 163 164 #define WordAt(m, p) (*(Word *)_TypeAt(m, p)) 165 166 /* 167 * Device Dependent Structure 168 */ 169 170 #define MAXPLANE 24 171 172 struct fbdev { 173 struct fbdev_ops *fbbm_op; 174 int type; 175 int unit; 176 lRectangle FrameRect; 177 lRectangle VisRect; 178 lRectangle CursorRect; 179 lRectangle MaskRect; 180 lRectangle SaveRect; 181 lBitmap Krom_BM0; 182 lBitmap Krom_BM1; 183 char * Krom_base; 184 lPoint Krom_font_extent0; 185 lPoint Krom_font_extent1; 186 char funcvec[MAXPLANE]; 187 int Mode; 188 int Pmask; 189 unsigned int pat; 190 char func; 191 int fore; 192 int aux; 193 int trans; 194 int cache_off; 195 int font_w; 196 int font_h; 197 int char_w; 198 int char_h; 199 int scr_w; 200 int scr_h; 201 int ch_pos; 202 int ul_pos; 203 int x_offset; 204 int y_offset; 205 int rit_m; 206 int btm_m; 207 lRectangle moveArea; 208 lPoint size; 209 lPoint hot; 210 char curfuncv[MAXPLANE]; 211 char maskfuncv[MAXPLANE]; 212 int cursorSet; 213 int cursorShow; 214 int cursorVis; 215 lPoint cursorP; 216 char *rcont_base; 217 char *rcont_reg; 218 int fbNplane; 219 int Colorwidth; 220 int planemask; 221 int Mono; 222 int Dimmer; 223 int DispVer; 224 unsigned short status_flag; 225 unsigned short run_flag; 226 char *private; 227 int hard_cursor; 228 }; 229 230 #ifdef CPU_SINGLE 231 struct mfbdev { 232 char *vram_start; 233 int vram_width; 234 }; 235 #endif /* CPU_SINGLE */ 236 237 struct fbdev_ops { 238 void (*fb_rop_init)(); 239 void (*fb_rop_copy)(); 240 void (*fb_rop_winit)(); 241 void (*fb_rop_write)(); 242 void (*fb_rop_read)(); 243 void (*fb_rop_cinit)(); 244 void (*fb_rop_clear)(); 245 void (*fb_rop_vect)(); 246 void (*fb_rop_dot)(); 247 void (*fb_rop_fillscan)(); 248 void (*fb_rop_wait)(); 249 void (*fb_rop_reset)(); 250 char *(*fb_Krom_addr)(); 251 void (*fb_init_palette)(); 252 int (*fb_set_palette)(); 253 int (*fb_get_palette)(); 254 int (*fb_get_pixel)(); 255 int (*fb_set_dimmer)(); 256 int (*fb_get_dimmer)(); 257 int (*fb_open)(); 258 int (*fb_close)(); 259 int (*fb_ioctl)(); 260 int (*fb_get_page)(); 261 void (*fb_cursor_set)(); 262 void (*fb_cursor_on)(); 263 void (*fb_cursor_off)(); 264 void (*fb_cursor_move)(); 265 }; 266 267 struct autodev { 268 int type; 269 char *base; 270 char *reg; 271 }; 272 273 struct fbdevsw { 274 int num; 275 int (*fb_probe)(); 276 void (*fb_setup)(); 277 }; 278 279 extern struct autodev autodev[]; 280 extern struct fbdev fbdev[]; 281 extern int nfbdev; 282 extern struct fbdev *consfb; 283 extern unsigned short fb_color_pallet_def[]; 284 extern unsigned short fb_gray_pallet_def[]; 285 286 /* fb_ioctl Command */ 287 288 #define FB_INTCHECK 1 289 #define FB_INTCLEAR 2 290 #define FB_INTENABLE 3 291 #define FB_STATUSCHECK 4 292 293 #define FB_SETVIDEOCTL 10 294 #define FB_GETVIDEOSTATUS 11 295 #define FB_SETPALETTEMODE 12 296 #define FB_GETPALETTEMODE 13 297 298 #define FB_INT_VSYNC 1 299 #define FB_INT_ROPDONE 2 300 301 #define FB_STATUS_ROPEXEC 4 302 #define FB_STATUS_ROPWAIT 8 303 #define FB_STATUS_ROPVSYNC 16 304 305 /* run_flag */ 306 307 #define FB_ACTIVE 1 308 #define FB_WAITING 2 309 #define FB_DONE 4 310 311 /* 312 * Pseudo Frame Buffer 313 * 314 * unit no 315 * 0 Console Device and old Interface (/dev/fb) 316 * 1 B/W Display and New Interface (/dev/mfb) 317 * 2 Color Display and New Interface (/dev/cfb) 318 * 319 */ 320 321 #define fbbm_rop_init(fb, func) \ 322 (*(fb)->fbbm_op->fb_rop_init)(fb, func) 323 324 #define fbbm_rop_copy(fb, s, d, rp, wp) \ 325 (*(fb)->fbbm_op->fb_rop_copy)(fb, s, d, rp, wp) 326 327 #define fbbm_rop_winit(fb) \ 328 (*(fb)->fbbm_op->fb_rop_winit)(fb) 329 330 #define fbbm_rop_write(fb, map, p, width, srp, drp, wplane) \ 331 (*(fb)->fbbm_op->fb_rop_write)(fb, map, p, width, srp, drp, wplane) 332 333 #define fbbm_rop_read(fb, map, p, width, srp, drp, rplane, wplane) \ 334 (*(fb)->fbbm_op->fb_rop_read)(fb, map, p, width, srp, drp, rplane, wplane) 335 336 #define fbbm_rop_cinit(fb, wplane, bw) \ 337 (*(fb)->fbbm_op->fb_rop_cinit)(fb, wplane, bw) 338 339 #define fbbm_rop_clear(fb, dr) \ 340 (*(fb)->fbbm_op->fb_rop_clear)(fb, dr) 341 342 #define fbbm_rop_vect(fb, dr, func, forc, auxc, transp, wplane, n, p, lptn, lpf, sw) \ 343 (*(fb)->fbbm_op->fb_rop_vect)(fb, dr, func, forc, auxc, transp, wplane, n, p, lptn, lpf, sw) 344 345 #define fbbm_rop_dot(fb, dr, func, forc, auxc, transp, wplane, n, p) \ 346 (*(fb)->fbbm_op->fb_rop_dot)(fb, dr, func, forc, auxc, transp, wplane, n, p) 347 348 #define fbbm_rop_fillscan(fb, ls, ns, clip, sw) \ 349 (*(fb)->fbbm_op->fb_rop_fillscan)(fb, ls, ns, clip, sw) 350 351 #define fbbm_Krom_addr(fb, c, sr) \ 352 (*(fb)->fbbm_op->fb_Krom_addr)(fb, c, sr) 353 354 #define fbbm_rop_wait(fb) \ 355 (*(fb)->fbbm_op->fb_rop_wait)(fb) 356 #define fbbm_rop_reset(fb) \ 357 (*(fb)->fbbm_op->fb_rop_reset)(fb) 358 359 #define fbbm_init_palette(fb) \ 360 (*(fb)->fbbm_op->fb_init_palette)(fb) 361 #define fbbm_set_palette(fb, palette) \ 362 (*(fb)->fbbm_op->fb_set_palette)(fb, palette) 363 #define fbbm_get_palette(fb, palette) \ 364 (*(fb)->fbbm_op->fb_get_palette)(fb, palette) 365 #define fbbm_get_pixel(fb, pixel) \ 366 (*(fb)->fbbm_op->fb_get_pixel)(fb, pixel) 367 368 #define fbbm_set_dimmer(fb, n) \ 369 (*(fb)->fbbm_op->fb_set_dimmer)(fb, n) 370 #define fbbm_get_dimmer(fb) \ 371 (*(fb)->fbbm_op->fb_get_dimmer)(fb) 372 373 #define fbbm_open(fb) \ 374 (*(fb)->fbbm_op->fb_open)(fb) 375 #define fbbm_close(fb) \ 376 (*(fb)->fbbm_op->fb_close)(fb) 377 #define fbbm_ioctl(fb, cmd, data) \ 378 (*(fb)->fbbm_op->fb_ioctl)(fb, cmd, data) 379 380 #define fbbm_get_page(fb, off) \ 381 (*(fb)->fbbm_op->fb_get_page)(fb, off) 382 383 #define fbbm_cursor_set(fb, fc, bc) \ 384 (*(fb)->fbbm_op->fb_cursor_set)(fb, fc, bc) 385 #define fbbm_cursor_on(fb) \ 386 (*(fb)->fbbm_op->fb_cursor_on)(fb) 387 #define fbbm_cursor_off(fb) \ 388 (*(fb)->fbbm_op->fb_cursor_off)(fb) 389 #define fbbm_cursor_move(fb) \ 390 (*(fb)->fbbm_op->fb_cursor_move)(fb) 391 392 extern unsigned short mfbstarttab16[16]; 393 extern unsigned short mfbendtab16[16]; 394 extern unsigned short mfbpartmasks16[16][16]; 395 extern unsigned int mfbstarttab32[32]; 396 extern unsigned int mfbendtab32[32]; 397 extern unsigned int mfbpartmasks32[32][32]; 398 extern void mfb_copy_area32(); 399 extern void mfb_copyinv_area32(); 400 extern void mfb_or_area32(); 401 extern void mfb_xor_area32(); 402 extern void mfb_general_area32(); 403 extern void mfb_clr_area32(); 404 extern void mfb_inv_area32(); 405 extern void mfb_set_area32(); 406 extern void mfb_copy_area16(); 407 extern void mfb_copyinv_area16(); 408 extern void mfb_or_area16(); 409 extern void mfb_xor_area16(); 410 extern void mfb_general_area16(); 411 extern void mfb_clr_area16(); 412 extern void mfb_inv_area16(); 413 extern void mfb_set_area16(); 414 extern void mfb_clrvvector32(); 415 extern void mfb_clrhvector32(); 416 extern void mfb_clrvector32(); 417 extern void mfb_invvvector32(); 418 extern void mfb_invhvector32(); 419 extern void mfb_invvector32(); 420 extern void mfb_setvvector32(); 421 extern void mfb_sethvector32(); 422 extern void mfb_setvector32(); 423 extern void mfb_point(); 424 extern void mfb_vector32(); 425