1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright (c) 1986,1997-1998 by Sun Microsystems, Inc. 24 * All rights reserved. 25 */ 26 27 #ifndef _SYS_FBIO_H 28 #define _SYS_FBIO_H 29 30 #pragma ident "%Z%%M% %I% %E% SMI" /* SunOS4.1.2 5.49 */ 31 32 #include <sys/types.h> 33 34 #ifdef __cplusplus 35 extern "C" { 36 #endif 37 38 #ifndef ASM 39 /* 40 * Frame buffer descriptor. 41 * Returned by FBIOGTYPE ioctl on frame buffer devices. 42 */ 43 struct fbtype { 44 int fb_type; /* as defined below */ 45 int fb_height; /* in pixels */ 46 int fb_width; /* in pixels */ 47 int fb_depth; /* bits per pixel */ 48 int fb_cmsize; /* size of color map (entries) */ 49 int fb_size; /* total size in bytes */ 50 }; 51 52 #define FIOC ('F'<<8) 53 #define FBIOGTYPE (FIOC|0) 54 55 #ifdef _KERNEL 56 struct fbpixrect { 57 struct pixrect *fbpr_pixrect; /* Pixrect of dev returned here */ 58 }; 59 60 #define FBIOGPIXRECT (FIOC|1) 61 #endif /* _KERNEL */ 62 63 /* 64 * General purpose structure for passing info in and out of frame buffers 65 * (used for gp1) 66 */ 67 struct fbinfo { 68 int fb_physaddr; /* physical frame buffer address */ 69 int fb_hwwidth; /* fb board width */ 70 int fb_hwheight; /* fb board height */ 71 int fb_addrdelta; /* phys addr diff between boards */ 72 unsigned char *fb_ropaddr; /* fb va thru kernelmap */ 73 int fb_unit; /* minor devnum of fb */ 74 }; 75 76 #define FBIOGINFO (FIOC|2) 77 78 /* 79 * Color map I/O. See also fbcmap_i below. 80 */ 81 struct fbcmap { 82 int index; /* first element (0 origin) */ 83 int count; /* number of elements */ 84 unsigned char *red; /* red color map elements */ 85 unsigned char *green; /* green color map elements */ 86 unsigned char *blue; /* blue color map elements */ 87 }; 88 89 #ifdef _SYSCALL32 90 91 struct fbcmap32 { 92 int32_t index; /* first element (0 origin) */ 93 int32_t count; /* number of elements */ 94 caddr32_t red; /* red color map elements */ 95 caddr32_t green; /* green color map elements */ 96 caddr32_t blue; /* blue color map elements */ 97 }; 98 99 #endif /* _SYSCALL32 */ 100 101 #define FBIOPUTCMAP (FIOC|3) 102 #define FBIOGETCMAP (FIOC|4) 103 104 /* 105 * Set/Get attributes 106 */ 107 #define FB_ATTR_NDEVSPECIFIC 8 /* no. of device specific values */ 108 #define FB_ATTR_NEMUTYPES 4 /* no. of emulation types */ 109 110 struct fbsattr { 111 int flags; /* misc flags */ 112 #define FB_ATTR_AUTOINIT 1 /* emulation auto init flag */ 113 #define FB_ATTR_DEVSPECIFIC 2 /* dev. specific stuff valid flag */ 114 int emu_type; /* emulation type (-1 if unused) */ 115 int dev_specific[FB_ATTR_NDEVSPECIFIC]; /* catchall */ 116 }; 117 118 struct fbgattr { 119 int real_type; /* real device type */ 120 int owner; /* PID of owner, 0 if myself */ 121 struct fbtype fbtype; /* fbtype info for real device */ 122 struct fbsattr sattr; /* see above */ 123 int emu_types[FB_ATTR_NEMUTYPES]; /* possible emulations */ 124 /* (-1 if unused) */ 125 }; 126 127 #define FBIOSATTR (FIOC|5) 128 #define FBIOGATTR (FIOC|6) 129 130 131 /* 132 * Video control 133 * (the unused bits are reserved for future use) 134 */ 135 #define FBVIDEO_OFF 0 136 #define FBVIDEO_ON 1 137 138 #define FBIOSVIDEO (FIOC|7) 139 #define FBIOGVIDEO (FIOC|8) 140 141 /* Vertical retrace support. */ 142 #define FBIOVERTICAL (FIOC|9) 143 #define GRABPAGEALLOC (FIOC|10) 144 #define GRABPAGEFREE (FIOC|11) 145 #define GRABATTACH (FIOC|12) 146 147 #define FBIOGPLNGRP (FIOC|13) 148 #define FBIOGCMSIZE (FIOC|14) 149 #define FBIOSCMSIZE (FIOC|15) 150 #define FBIOSCMS (FIOC|16) 151 #define FBIOAVAILPLNGRP (FIOC|17) 152 153 154 /* 155 * Structure to pass double buffering state back and forth the device. 156 */ 157 158 /* used in devstate */ 159 #define FBDBL_AVAIL 0x80000000 160 #define FBDBL_DONT_BLOCK 0x40000000 161 #define FBDBL_AVAIL_PG 0x20000000 162 163 /* used in read/write/display */ 164 #define FBDBL_A 0x1 165 #define FBDBL_B 0x2 166 #define FBDBL_BOTH (FBDBL_A | FBDBL_B) 167 #define FBDBL_NONE 0x4 168 169 struct fbdblinfo { 170 unsigned int dbl_devstate; 171 unsigned int dbl_read; 172 unsigned int dbl_write; 173 unsigned int dbl_display; 174 int dbl_depth; 175 char dbl_wid; 176 }; 177 178 #define FBIODBLGINFO (FIOC|18) 179 #define FBIODBLSINFO (FIOC|19) 180 181 /* 8-bit emulation in 24-bit ioctls */ 182 183 #define FBIOSWINFD (FIOC|20) 184 #define FBIOSAVWINFD (FIOC|21) 185 #define FBIORESWINFD (FIOC|22) 186 #define FBIOSRWINFD (FIOC|23) 187 188 /* 189 * hardware cursor control 190 */ 191 192 struct fbcurpos { 193 short x, y; 194 }; 195 196 struct fbcursor { 197 short set; /* what to set */ 198 #define FB_CUR_SETCUR 0x01 199 #define FB_CUR_SETPOS 0x02 200 #define FB_CUR_SETHOT 0x04 201 #define FB_CUR_SETCMAP 0x08 202 #define FB_CUR_SETSHAPE 0x10 203 #define FB_CUR_SETALL 0x1F 204 short enable; /* cursor on/off */ 205 struct fbcurpos pos; /* cursor position */ 206 struct fbcurpos hot; /* cursor hot spot */ 207 struct fbcmap cmap; /* color map info */ 208 struct fbcurpos size; /* cursor bit map size */ 209 char *image; /* cursor image bits */ 210 char *mask; /* cursor mask bits */ 211 }; 212 213 #ifdef _SYSCALL32 214 struct fbcursor32 { 215 short set; /* what to set */ 216 short enable; /* cursor on/off */ 217 struct fbcurpos pos; /* cursor position */ 218 struct fbcurpos hot; /* cursor hot spot */ 219 struct fbcmap32 cmap; /* color map info */ 220 struct fbcurpos size; /* cursor bit map size */ 221 caddr32_t image; /* cursor image bits */ 222 caddr32_t mask; /* cursor mask bits */ 223 }; 224 #endif /* _SYSCALL32 */ 225 226 /* set/get cursor attributes/shape */ 227 #define FBIOSCURSOR (FIOC|24) 228 #define FBIOGCURSOR (FIOC|25) 229 230 /* set/get cursor position */ 231 #define FBIOSCURPOS (FIOC|26) 232 #define FBIOGCURPOS (FIOC|27) 233 234 /* get max cursor size */ 235 #define FBIOGCURMAX (FIOC|28) 236 237 /* Window Grabber info ioctl */ 238 #define GRABLOCKINFO (FIOC|29) 239 240 /* 241 * Window Identification (wid) defines, structures, and ioctls. 242 * 243 * Some wids need to be unique when used for things such as double 244 * buffering or rendering clipping. Some wids can be shared when 245 * used for display attributes only. What can be shared and how 246 * may be device dependent. The fb_wid_alloc.wa_type and fb_wid_item 247 * structure members will be left to device specific interpretation. 248 */ 249 250 #define FB_WID_SHARED_8 0 251 #define FB_WID_SHARED_24 1 252 #define FB_WID_DBL_8 2 253 #define FB_WID_DBL_24 3 254 255 struct fb_wid_alloc { 256 unsigned int wa_type; /* special attributes */ 257 int wa_index; /* base wid returned */ 258 unsigned int wa_count; /* how many contiguous wids */ 259 }; 260 261 struct fb_wid_item { 262 unsigned int wi_type; /* special attributes */ 263 int wi_index; /* which lut */ 264 unsigned int wi_attrs; /* which attributes */ 265 unsigned int wi_values[NBBY*sizeof (int)]; /* the attr values */ 266 }; 267 268 struct fb_wid_list { 269 unsigned int wl_flags; 270 unsigned int wl_count; 271 struct fb_wid_item *wl_list; 272 }; 273 274 #ifdef _SYSCALL32 275 276 struct fb_wid_list32 { 277 uint32_t wl_flags; 278 uint32_t wl_count; 279 caddr32_t wl_list; 280 }; 281 282 #endif /* _SYSCALL32 */ 283 284 struct fb_wid_dbl_info { 285 struct fb_wid_alloc dbl_wid; 286 char dbl_fore; 287 char dbl_back; 288 char dbl_read_state; 289 char dbl_write_state; 290 }; 291 292 #define FBIO_WID_ALLOC (FIOC|30) 293 #define FBIO_WID_FREE (FIOC|31) 294 #define FBIO_WID_PUT (FIOC|32) 295 #define FBIO_WID_GET (FIOC|33) 296 297 #define FBIO_DEVID (FIOC|34) 298 #define FBIO_U_RST (FIOC|35) 299 #define FBIO_FULLSCREEN_ELIMINATION_GROUPS (FIOC|36) 300 #define FBIO_WID_DBL_SET (FIOC|37) 301 #define FBIOVRTOFFSET (FIOC|38) 302 303 struct cg6_info { 304 ushort_t accessible_width; /* accessible bytes in scanline */ 305 ushort_t accessible_height; /* number of accessible scanlines */ 306 ushort_t line_bytes; /* number of bytes/scanline */ 307 ushort_t hdb_capable; /* can this thing hardware db? */ 308 ushort_t vmsize; /* this is Mb of video memory */ 309 uchar_t boardrev; /* board revision # */ 310 uchar_t slot; /* sbus slot # */ 311 uint_t pad1; /* expansion */ 312 }; 313 314 struct s3_info { 315 ushort_t accessible_width; /* accessible bytes in scanline */ 316 ushort_t accessible_height; /* number of accessible scanlines */ 317 ushort_t line_bytes; /* number of bytes/scanline */ 318 ushort_t hdb_capable; /* can this thing hardware db? */ 319 ushort_t vmsize; /* this is Mb of video memory */ 320 uchar_t boardrev; /* board revision # */ 321 uchar_t slot; /* sbus slot # */ 322 uint_t pad1; /* expansion */ 323 }; 324 325 struct p9000_info { 326 ushort_t accessible_width; /* accessible bytes in scanline */ 327 ushort_t accessible_height; /* number of accessible scanlines */ 328 ushort_t line_bytes; /* number of bytes/scanline */ 329 ushort_t hdb_capable; /* can this thing hardware db? */ 330 ushort_t vmsize; /* this is Mb of video memory */ 331 uchar_t boardrev; /* board revision # */ 332 uchar_t slot; /* sbus slot # */ 333 uint_t pad1; /* expansion */ 334 }; 335 336 struct p9100_info { 337 ushort_t accessible_width; /* accessible bytes in scanline */ 338 ushort_t accessible_height; /* number of accessible scanlines */ 339 ushort_t line_bytes; /* number of bytes/scanline */ 340 ushort_t hdb_capable; /* can this thing hardware db? */ 341 ushort_t vmsize; /* this is Mb of video memory */ 342 uchar_t boardrev; /* board revision # */ 343 uchar_t slot; /* sbus slot # */ 344 uint_t pad1; /* expansion */ 345 }; 346 347 struct wd90c24a2_info { 348 ushort_t accessible_width; /* accessible bytes in scanline */ 349 ushort_t accessible_height; /* number of accessible scanlines */ 350 ushort_t line_bytes; /* number of bytes/scanline */ 351 ushort_t hdb_capable; /* can this thing hardware db? */ 352 ushort_t vmsize; /* this is Mb of video memory */ 353 uchar_t boardrev; /* board revision # */ 354 uchar_t slot; /* sbus slot # */ 355 uint_t pad1; /* expansion */ 356 }; 357 358 #define MON_TYPE_STEREO 0x8 /* stereo display */ 359 #define MON_TYPE_0_OFFSET 0x4 /* black level 0 ire instead of 7.5 */ 360 #define MON_TYPE_OVERSCAN 0x2 /* overscan */ 361 #define MON_TYPE_GRAY 0x1 /* greyscale monitor */ 362 363 struct mon_info { 364 uint_t mon_type; /* bit array: defined above */ 365 uint_t pixfreq; /* pixel frequency in Hz */ 366 uint_t hfreq; /* horizontal freq in Hz */ 367 uint_t vfreq; /* vertical freq in Hz */ 368 uint_t vsync; /* vertical sync in scanlines */ 369 uint_t hsync; /* horizontal sync in pixels */ 370 /* these are in pixel units */ 371 ushort_t hfporch; /* horizontal front porch */ 372 ushort_t hbporch; /* horizontal back porch */ 373 ushort_t vfporch; /* vertical front porch */ 374 ushort_t vbporch; /* vertical back porch */ 375 }; 376 377 378 #define FBIOGXINFO (FIOC|39) 379 #define FBIOMONINFO (FIOC|40) 380 381 /* 382 * Color map I/O. 383 */ 384 struct fbcmap_i { 385 unsigned int flags; /* see below */ 386 int id; /* colormap id for multiple cmaps */ 387 int index; /* first element (0 origin) */ 388 int count; /* number of elements */ 389 unsigned char *red; /* red color map elements */ 390 unsigned char *green; /* green color map elements */ 391 unsigned char *blue; /* blue color map elements */ 392 }; 393 394 #ifdef _SYSCALL32 395 396 struct fbcmap_i32 { 397 uint32_t flags; /* see below */ 398 int32_t id; /* colormap id for multiple cmaps */ 399 int32_t index; /* first element (0 origin) */ 400 int32_t count; /* number of elements */ 401 caddr32_t red; /* red color map elements */ 402 caddr32_t green; /* green color map elements */ 403 caddr32_t blue; /* blue color map elements */ 404 }; 405 406 #endif /* _SYSCALL32 */ 407 408 #define FB_CMAP_BLOCK 0x1 /* wait for vrt before returning */ 409 #define FB_CMAP_KERNEL 0x2 /* called within kernel */ 410 411 #define FBIOPUTCMAPI (FIOC|41) 412 #define FBIOGETCMAPI (FIOC|42) 413 414 /* assigning a given window id to a pixrect - special for PHIGS */ 415 #define FBIO_ASSIGNWID (FIOC|43) 416 417 /* assigning a given window to be stereo */ 418 #define FBIO_STEREO (FIOC|44) 419 #define FB_WIN_STEREO 0x2 420 421 #endif /* !ASM */ 422 423 /* frame buffer type codes */ 424 #define FBTYPE_NOTYPE (-1) /* for backwards compatibility */ 425 #define FBTYPE_SUN1BW 0 /* Multibus mono */ 426 #define FBTYPE_SUN1COLOR 1 /* Multibus color */ 427 #define FBTYPE_SUN2BW 2 /* memory mono */ 428 #define FBTYPE_SUN2COLOR 3 /* color w/rasterop chips */ 429 #define FBTYPE_SUN2GP 4 /* GP1/GP2 */ 430 #define FBTYPE_SUN5COLOR 5 /* RoadRunner accelerator */ 431 #define FBTYPE_SUN3COLOR 6 /* memory color */ 432 #define FBTYPE_MEMCOLOR 7 /* memory 24-bit */ 433 #define FBTYPE_SUN4COLOR 8 /* memory color w/overlay */ 434 435 #define FBTYPE_NOTSUN1 9 /* reserved for customer */ 436 #define FBTYPE_NOTSUN2 10 /* reserved for customer */ 437 #define FBTYPE_NOTSUN3 11 /* reserved for customer */ 438 439 #define FBTYPE_SUNFAST_COLOR 12 /* accelerated 8bit */ 440 #define FBTYPE_SUNROP_COLOR 13 /* MEMCOLOR with rop h/w */ 441 #define FBTYPE_SUNFB_VIDEO 14 /* Simple video mixing */ 442 #define FBTYPE_SUNGIFB 15 /* medical image */ 443 #define FBTYPE_SUNGPLAS 16 /* plasma panel */ 444 #define FBTYPE_SUNGP3 17 /* cg12 running gpsi microcode */ 445 #define FBTYPE_SUNGT 18 /* gt graphics accelerator */ 446 #define FBTYPE_SUNLEO 19 /* zx graphics accelerator */ 447 #define FBTYPE_MDICOLOR 20 /* cgfourteen framebuffer */ 448 449 #define FBTYPE_LASTPLUSONE 21 /* max number of fbs (change as add) */ 450 451 #ifdef __cplusplus 452 } 453 #endif 454 455 #endif /* _SYS_FBIO_H */ 456