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