1 1.130 martin /* $NetBSD: wsconsio.h,v 1.130 2025/07/26 14:18:14 martin Exp $ */ 2 1.1 drochner 3 1.1 drochner /* 4 1.1 drochner * Copyright (c) 1996, 1997 Christopher G. Demetriou. All rights reserved. 5 1.1 drochner * 6 1.1 drochner * Redistribution and use in source and binary forms, with or without 7 1.1 drochner * modification, are permitted provided that the following conditions 8 1.1 drochner * are met: 9 1.1 drochner * 1. Redistributions of source code must retain the above copyright 10 1.1 drochner * notice, this list of conditions and the following disclaimer. 11 1.1 drochner * 2. Redistributions in binary form must reproduce the above copyright 12 1.1 drochner * notice, this list of conditions and the following disclaimer in the 13 1.1 drochner * documentation and/or other materials provided with the distribution. 14 1.1 drochner * 3. All advertising materials mentioning features or use of this software 15 1.1 drochner * must display the following acknowledgement: 16 1.1 drochner * This product includes software developed by Christopher G. Demetriou 17 1.1 drochner * for the NetBSD Project. 18 1.1 drochner * 4. The name of the author may not be used to endorse or promote products 19 1.1 drochner * derived from this software without specific prior written permission 20 1.1 drochner * 21 1.1 drochner * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 22 1.1 drochner * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 23 1.1 drochner * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 24 1.1 drochner * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 25 1.1 drochner * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 26 1.1 drochner * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 1.1 drochner * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 1.1 drochner * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 1.1 drochner * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 30 1.1 drochner * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 1.1 drochner */ 32 1.1 drochner 33 1.2 hannken #ifndef _DEV_WSCONS_WSCONSIO_H_ 34 1.2 hannken #define _DEV_WSCONS_WSCONSIO_H_ 35 1.1 drochner 36 1.1 drochner /* 37 1.1 drochner * WSCONS (wsdisplay, wskbd, wsmouse) exported interfaces. 38 1.1 drochner * 39 1.1 drochner * Ioctls are all in group 'W'. Ioctl number space is partitioned like: 40 1.1 drochner * 0-31 keyboard ioctls (WSKBDIO) 41 1.1 drochner * 32-63 mouse ioctls (WSMOUSEIO) 42 1.1 drochner * 64-95 display ioctls (WSDISPLAYIO) 43 1.45 enami * 96-127 mux ioctls (WSMUXIO) 44 1.44 augustss * 128-255 reserved for future use 45 1.1 drochner */ 46 1.1 drochner 47 1.1 drochner #include <sys/types.h> 48 1.1 drochner #include <sys/ioccom.h> 49 1.116 christos #include <sys/time.h> 50 1.2 hannken #include <dev/wscons/wsksymvar.h> 51 1.1 drochner 52 1.1 drochner 53 1.1 drochner /* 54 1.1 drochner * Common event structure (used by keyboard and mouse) 55 1.1 drochner */ 56 1.1 drochner struct wscons_event { 57 1.1 drochner u_int type; 58 1.1 drochner int value; 59 1.1 drochner struct timespec time; 60 1.1 drochner }; 61 1.89 christos #define WSEVENT_VERSION 1 62 1.1 drochner 63 1.1 drochner /* Event type definitions. Comment for each is information in value. */ 64 1.1 drochner #define WSCONS_EVENT_KEY_UP 1 /* key code */ 65 1.1 drochner #define WSCONS_EVENT_KEY_DOWN 2 /* key code */ 66 1.8 drochner #define WSCONS_EVENT_ALL_KEYS_UP 3 /* void */ 67 1.1 drochner #define WSCONS_EVENT_MOUSE_UP 4 /* button # (leftmost = 0) */ 68 1.1 drochner #define WSCONS_EVENT_MOUSE_DOWN 5 /* button # (leftmost = 0) */ 69 1.1 drochner #define WSCONS_EVENT_MOUSE_DELTA_X 6 /* X delta amount */ 70 1.1 drochner #define WSCONS_EVENT_MOUSE_DELTA_Y 7 /* Y delta amount */ 71 1.1 drochner #define WSCONS_EVENT_MOUSE_ABSOLUTE_X 8 /* X location */ 72 1.1 drochner #define WSCONS_EVENT_MOUSE_ABSOLUTE_Y 9 /* Y location */ 73 1.6 drochner #define WSCONS_EVENT_MOUSE_DELTA_Z 10 /* Z delta amount */ 74 1.7 drochner #define WSCONS_EVENT_MOUSE_ABSOLUTE_Z 11 /* Z location */ 75 1.51 christos #define WSCONS_EVENT_SCREEN_SWITCH 12 /* New screen number */ 76 1.74 martin #define WSCONS_EVENT_ASCII 13 /* key code is already ascii */ 77 1.76 augustss #define WSCONS_EVENT_MOUSE_DELTA_W 14 /* W delta amount */ 78 1.76 augustss #define WSCONS_EVENT_MOUSE_ABSOLUTE_W 15 /* W location */ 79 1.126 nia #define WSCONS_EVENT_HSCROLL 16 /* X axis precision scrolling */ 80 1.126 nia #define WSCONS_EVENT_VSCROLL 17 /* Y axis precision scrolling */ 81 1.90 uwe 82 1.1 drochner /* 83 1.1 drochner * Keyboard ioctls (0 - 31) 84 1.1 drochner */ 85 1.1 drochner 86 1.1 drochner /* Get keyboard type. */ 87 1.1 drochner #define WSKBDIO_GTYPE _IOR('W', 0, u_int) 88 1.64 christos #define WSKBD_TYPE_LK201 1 /* lk-201 */ 89 1.64 christos #define WSKBD_TYPE_LK401 2 /* lk-401 */ 90 1.64 christos #define WSKBD_TYPE_PC_XT 3 /* PC-ish, XT scancode */ 91 1.124 nia #define WSKBD_TYPE_PC_AT 4 /* PC-ish, AT scancode, not used by modern kernels */ 92 1.64 christos #define WSKBD_TYPE_USB 5 /* USB, XT scancode */ 93 1.64 christos #define WSKBD_TYPE_NEXT 6 /* NeXT keyboard */ 94 1.64 christos #define WSKBD_TYPE_HPC_KBD 7 /* HPC bultin keyboard */ 95 1.64 christos #define WSKBD_TYPE_HPC_BTN 8 /* HPC/PsPC buttons */ 96 1.64 christos #define WSKBD_TYPE_ARCHIMEDES 9 /* Archimedes keyboard */ 97 1.64 christos #define WSKBD_TYPE_RISCPC 10 /* RiscPC keyboard, resembling AT codes */ 98 1.64 christos #define WSKBD_TYPE_ADB 11 /* ADB */ 99 1.64 christos #define WSKBD_TYPE_HIL 12 /* HIL keyboard */ 100 1.64 christos #define WSKBD_TYPE_AMIGA 13 /* Amiga keyboard */ 101 1.64 christos #define WSKBD_TYPE_MAPLE 14 /* Dreamcast Maple keyboard */ 102 1.64 christos #define WSKBD_TYPE_ATARI 15 /* Atari keyboard */ 103 1.64 christos #define WSKBD_TYPE_SUN 16 /* Sun Type3/4 */ 104 1.64 christos #define WSKBD_TYPE_SUN5 17 /* Sun Type5 */ 105 1.75 tsutsui #define WSKBD_TYPE_SGI 18 /* SGI keyboard */ 106 1.75 tsutsui #define WSKBD_TYPE_MATRIXKP 19 /* Matrix keypads/buttons */ 107 1.77 tsutsui #define WSKBD_TYPE_EWS4800 20 /* NEC EWS4800 */ 108 1.80 gdamore #define WSKBD_TYPE_BLUETOOTH 21 /* Bluetooth keyboard */ 109 1.82 peter #define WSKBD_TYPE_ZAURUS 22 /* Sharp Zaurus keyboard */ 110 1.100 tsutsui #define WSKBD_TYPE_LUNA 23 /* OMRON SX-9100 LUNA */ 111 1.102 reinoud #define WSKBD_TYPE_RFB 24 /* Usermode vnc remote keyboard */ 112 1.108 kiyohara #define WSKBD_TYPE_EPOC 25 /* Psion EPOC machine keyboard */ 113 1.123 nonaka #define WSKBD_TYPE_HYPERV 26 /* Hyper-V synthetic keyboard */ 114 1.1 drochner 115 1.1 drochner /* Manipulate the keyboard bell. */ 116 1.1 drochner struct wskbd_bell_data { 117 1.1 drochner u_int which; /* values to get/set */ 118 1.64 christos #define WSKBD_BELL_DOPITCH 0x1 /* get/set pitch */ 119 1.64 christos #define WSKBD_BELL_DOPERIOD 0x2 /* get/set period */ 120 1.64 christos #define WSKBD_BELL_DOVOLUME 0x4 /* get/set volume */ 121 1.64 christos #define WSKBD_BELL_DOALL 0x7 /* all of the above */ 122 1.1 drochner u_int pitch; /* pitch, in Hz */ 123 1.1 drochner u_int period; /* period, in milliseconds */ 124 1.1 drochner u_int volume; /* percentage of max volume */ 125 1.1 drochner }; 126 1.62 christos 127 1.1 drochner #define WSKBDIO_BELL _IO('W', 1) 128 1.1 drochner #define WSKBDIO_COMPLEXBELL _IOW('W', 2, struct wskbd_bell_data) 129 1.1 drochner #define WSKBDIO_SETBELL _IOW('W', 3, struct wskbd_bell_data) 130 1.1 drochner #define WSKBDIO_GETBELL _IOR('W', 4, struct wskbd_bell_data) 131 1.1 drochner #define WSKBDIO_SETDEFAULTBELL _IOW('W', 5, struct wskbd_bell_data) 132 1.1 drochner #define WSKBDIO_GETDEFAULTBELL _IOR('W', 6, struct wskbd_bell_data) 133 1.1 drochner 134 1.1 drochner /* Manipulate the emulation key repeat settings. */ 135 1.1 drochner struct wskbd_keyrepeat_data { 136 1.1 drochner u_int which; /* values to get/set */ 137 1.64 christos #define WSKBD_KEYREPEAT_DODEL1 0x1 /* get/set del1 */ 138 1.64 christos #define WSKBD_KEYREPEAT_DODELN 0x2 /* get/set delN */ 139 1.64 christos #define WSKBD_KEYREPEAT_DOALL 0x3 /* all of the above */ 140 1.1 drochner u_int del1; /* delay before first, ms */ 141 1.1 drochner u_int delN; /* delay before rest, ms */ 142 1.1 drochner }; 143 1.1 drochner 144 1.1 drochner #define WSKBDIO_SETKEYREPEAT _IOW('W', 7, struct wskbd_keyrepeat_data) 145 1.1 drochner #define WSKBDIO_GETKEYREPEAT _IOR('W', 8, struct wskbd_keyrepeat_data) 146 1.52 reinoud #define WSKBDIO_SETDEFAULTKEYREPEAT _IOW('W', 9, struct wskbd_keyrepeat_data) 147 1.52 reinoud #define WSKBDIO_GETDEFAULTKEYREPEAT _IOR('W', 10, struct wskbd_keyrepeat_data) 148 1.1 drochner 149 1.2 hannken /* Get/set keyboard leds */ 150 1.64 christos #define WSKBD_LED_CAPS 0x01 151 1.64 christos #define WSKBD_LED_NUM 0x02 152 1.64 christos #define WSKBD_LED_SCROLL 0x04 153 1.64 christos #define WSKBD_LED_COMPOSE 0x08 154 1.2 hannken 155 1.5 drochner #define WSKBDIO_SETLEDS _IOW('W', 11, int) 156 1.5 drochner #define WSKBDIO_GETLEDS _IOR('W', 12, int) 157 1.2 hannken 158 1.2 hannken /* Manipulate keysym groups. */ 159 1.2 hannken struct wskbd_map_data { 160 1.2 hannken u_int maplen; /* number of entries in map */ 161 1.64 christos #define WSKBDIO_MAXMAPLEN 65536 162 1.2 hannken struct wscons_keymap *map; /* map to get or set */ 163 1.2 hannken }; 164 1.64 christos #define WSKBDIO_GETMAP _IOWR('W', 13, struct wskbd_map_data) 165 1.64 christos #define WSKBDIO_SETMAP _IOW('W', 14, struct wskbd_map_data) 166 1.64 christos #define WSKBDIO_GETENCODING _IOR('W', 15, kbd_t) 167 1.64 christos #define WSKBDIO_SETENCODING _IOW('W', 16, kbd_t) 168 1.3 drochner 169 1.3 drochner /* internal use only */ 170 1.64 christos #define WSKBDIO_SETMODE _IOW('W', 19, int) 171 1.64 christos #define WSKBDIO_GETMODE _IOR('W', 20, int) 172 1.64 christos #define WSKBD_TRANSLATED 0 173 1.64 christos #define WSKBD_RAW 1 174 1.42 ad 175 1.42 ad #define WSKBDIO_SETKEYCLICK _IOW('W', 21, int) 176 1.42 ad #define WSKBDIO_GETKEYCLICK _IOR('W', 22, int) 177 1.1 drochner 178 1.63 christos /* Manipulate the scrolling modifiers and mode */ 179 1.63 christos struct wskbd_scroll_data { 180 1.63 christos u_int which; 181 1.64 christos #define WSKBD_SCROLL_DOMODIFIER 0x01 182 1.64 christos #define WSKBD_SCROLL_DOMODE 0x02 183 1.64 christos #define WSKBD_SCROLL_DOALL 0x03 184 1.63 christos u_int mode; 185 1.64 christos #define WSKBD_SCROLL_MODE_NORMAL 0x00 186 1.64 christos #define WSKBD_SCROLL_MODE_HOLD 0x01 187 1.63 christos u_int modifier; 188 1.63 christos }; 189 1.63 christos 190 1.63 christos #define WSKBDIO_GETSCROLL _IOR('W', 23, struct wskbd_scroll_data) 191 1.63 christos #define WSKBDIO_SETSCROLL _IOW('W', 24, struct wskbd_scroll_data) 192 1.62 christos 193 1.89 christos /* Set event struct version */ 194 1.89 christos #define WSKBDIO_SETVERSION _IOW('W', 25, int) 195 1.89 christos #define WSKBDIO_EVENT_VERSION WSEVENT_VERSION 196 1.89 christos 197 1.1 drochner /* 198 1.1 drochner * Mouse ioctls (32 - 63) 199 1.1 drochner */ 200 1.1 drochner 201 1.9 augustss /* Get mouse type */ 202 1.1 drochner #define WSMOUSEIO_GTYPE _IOR('W', 32, u_int) 203 1.64 christos #define WSMOUSE_TYPE_VSXXX 1 /* DEC serial */ 204 1.64 christos #define WSMOUSE_TYPE_PS2 2 /* PS/2-compatible */ 205 1.64 christos #define WSMOUSE_TYPE_USB 3 /* USB mouse */ 206 1.64 christos #define WSMOUSE_TYPE_LMS 4 /* Logitech busmouse */ 207 1.64 christos #define WSMOUSE_TYPE_MMS 5 /* Microsoft InPort mouse */ 208 1.64 christos #define WSMOUSE_TYPE_TPANEL 6 /* Generic Touch Panel */ 209 1.64 christos #define WSMOUSE_TYPE_NEXT 7 /* NeXT mouse */ 210 1.64 christos #define WSMOUSE_TYPE_ARCHIMEDES 8 /* Archimedes mouse */ 211 1.64 christos #define WSMOUSE_TYPE_HIL 9 /* HIL mouse */ 212 1.73 perry #define WSMOUSE_TYPE_AMIGA 10 /* Amiga mouse */ 213 1.64 christos #define WSMOUSE_TYPE_MAXINE 11 /* DEC maxine mouse */ 214 1.64 christos #define WSMOUSE_TYPE_MAPLE 12 /* Dreamcast Maple mouse */ 215 1.75 tsutsui #define WSMOUSE_TYPE_SGI 13 /* SGI mouse */ 216 1.80 gdamore #define WSMOUSE_TYPE_BLUETOOTH 14 /* Bluetooth mouse */ 217 1.84 macallan #define WSMOUSE_TYPE_ADB 15 /* ADB mouse or touchpad */ 218 1.84 macallan #define WSMOUSE_TYPE_PSEUDO 16 /* not actually a mouse */ 219 1.1 drochner 220 1.17 ad /* Set resolution. Not applicable to all mouse types. */ 221 1.35 takemura #define WSMOUSEIO_SRES _IOW('W', 33, u_int) 222 1.64 christos #define WSMOUSE_RES_MIN 0 223 1.64 christos #define WSMOUSE_RES_DEFAULT 75 224 1.64 christos #define WSMOUSE_RES_MAX 100 225 1.17 ad 226 1.17 ad /* Set scale factor (num / den). Not applicable to all mouse types. */ 227 1.35 takemura #define WSMOUSEIO_SSCALE _IOW('W', 34, u_int[2]) 228 1.17 ad 229 1.17 ad /* Set sample rate. Not applicable to all mouse types. */ 230 1.35 takemura #define WSMOUSEIO_SRATE _IOW('W', 35, u_int) 231 1.64 christos #define WSMOUSE_RATE_MIN 0 232 1.64 christos #define WSMOUSE_RATE_DEFAULT 50 233 1.64 christos #define WSMOUSE_RATE_MAX 100 234 1.24 takemura 235 1.24 takemura /* Set/get sample coordinates for calibration */ 236 1.64 christos #define WSMOUSE_CALIBCOORDS_MAX 16 237 1.64 christos #define WSMOUSE_CALIBCOORDS_RESET -1 238 1.24 takemura struct wsmouse_calibcoords { 239 1.24 takemura int minx, miny; /* minimum value of X/Y */ 240 1.24 takemura int maxx, maxy; /* maximum value of X/Y */ 241 1.24 takemura int samplelen; /* number of samples available or 242 1.24 takemura WSMOUSE_CALIBCOORDS_RESET for raw mode */ 243 1.24 takemura struct wsmouse_calibcoord { 244 1.24 takemura int rawx, rawy; /* raw coordinate */ 245 1.24 takemura int x, y; /* translated coordinate */ 246 1.24 takemura } samples[WSMOUSE_CALIBCOORDS_MAX]; /* sample coordinates */ 247 1.24 takemura }; 248 1.26 takemura #define WSMOUSEIO_SCALIBCOORDS _IOW('W', 36, struct wsmouse_calibcoords) 249 1.26 takemura #define WSMOUSEIO_GCALIBCOORDS _IOR('W', 37, struct wsmouse_calibcoords) 250 1.54 takemura 251 1.54 takemura /* get device id for calibration */ 252 1.54 takemura struct wsmouse_id { 253 1.54 takemura u_int type; 254 1.64 christos #define WSMOUSE_ID_TYPE_UIDSTR 0 /* ID string (null terminated) */ 255 1.54 takemura u_int length; 256 1.64 christos #define WSMOUSE_ID_MAXLEN 256 257 1.54 takemura u_char data[WSMOUSE_ID_MAXLEN]; 258 1.54 takemura }; 259 1.54 takemura #define WSMOUSEIO_GETID _IOWR('W', 38, struct wsmouse_id) 260 1.17 ad 261 1.78 jmmv /* Get/set button repeating. */ 262 1.78 jmmv struct wsmouse_repeat { 263 1.78 jmmv unsigned long wr_buttons; 264 1.78 jmmv unsigned int wr_delay_first; 265 1.78 jmmv unsigned int wr_delay_decrement; 266 1.78 jmmv unsigned int wr_delay_minimum; 267 1.78 jmmv }; 268 1.78 jmmv #define WSMOUSEIO_GETREPEAT _IOR('W', 39, struct wsmouse_repeat) 269 1.78 jmmv #define WSMOUSEIO_SETREPEAT _IOW('W', 40, struct wsmouse_repeat) 270 1.78 jmmv 271 1.89 christos #define WSMOUSEIO_SETVERSION _IOW('W', 41, int) 272 1.89 christos #define WSMOUSE_EVENT_VERSION WSEVENT_VERSION 273 1.89 christos 274 1.126 nia enum wsmousecfg { 275 1.126 nia WSMOUSECFG_REVERSE_SCROLLING = 0, 276 1.126 nia /* Touchpad parameters */ 277 1.126 nia WSMOUSECFG_HORIZSCROLLDIST, 278 1.126 nia WSMOUSECFG_VERTSCROLLDIST 279 1.126 nia }; 280 1.126 nia 281 1.126 nia struct wsmouse_param { 282 1.126 nia enum wsmousecfg key; 283 1.126 nia int value; 284 1.126 nia }; 285 1.126 nia 286 1.126 nia struct wsmouse_parameters { 287 1.126 nia struct wsmouse_param *params; 288 1.126 nia unsigned int nparams; 289 1.126 nia }; 290 1.126 nia 291 1.126 nia #define WSMOUSECFG_MAX (128) /* maximum number of wsmouse_params */ 292 1.126 nia 293 1.126 nia #define WSMOUSEIO_GETPARAMS _IOW('W', 42, struct wsmouse_parameters) 294 1.126 nia #define WSMOUSEIO_SETPARAMS _IOW('W', 43, struct wsmouse_parameters) 295 1.126 nia 296 1.1 drochner /* 297 1.1 drochner * Display ioctls (64 - 95) 298 1.1 drochner */ 299 1.1 drochner 300 1.1 drochner /* Get display type */ 301 1.1 drochner #define WSDISPLAYIO_GTYPE _IOR('W', 64, u_int) 302 1.64 christos #define WSDISPLAY_TYPE_UNKNOWN 0 /* unknown */ 303 1.64 christos #define WSDISPLAY_TYPE_PM_MONO 1 /* DEC [23]100 mono */ 304 1.64 christos #define WSDISPLAY_TYPE_PM_COLOR 2 /* DEC [23]100 color */ 305 1.64 christos #define WSDISPLAY_TYPE_CFB 3 /* DEC TC CFB (CX) */ 306 1.64 christos #define WSDISPLAY_TYPE_XCFB 4 /* DEC `maxine' onboard fb */ 307 1.64 christos #define WSDISPLAY_TYPE_MFB 5 /* DEC TC MFB (MX) */ 308 1.64 christos #define WSDISPLAY_TYPE_SFB 6 /* DEC TC SFB (HX) */ 309 1.64 christos #define WSDISPLAY_TYPE_ISAVGA 7 /* (generic) ISA VGA */ 310 1.64 christos #define WSDISPLAY_TYPE_PCIVGA 8 /* (generic) PCI VGA */ 311 1.64 christos #define WSDISPLAY_TYPE_TGA 9 /* DEC PCI TGA */ 312 1.64 christos #define WSDISPLAY_TYPE_SFBP 10 /* DEC TC SFB+ (HX+) */ 313 1.64 christos #define WSDISPLAY_TYPE_PCIMISC 11 /* (generic) PCI misc. disp. */ 314 1.64 christos #define WSDISPLAY_TYPE_NEXTMONO 12 /* NeXT mono display */ 315 1.64 christos #define WSDISPLAY_TYPE_PX 13 /* DEC TC PX */ 316 1.64 christos #define WSDISPLAY_TYPE_PXG 14 /* DEC TC PXG */ 317 1.64 christos #define WSDISPLAY_TYPE_TX 15 /* DEC TC TX */ 318 1.64 christos #define WSDISPLAY_TYPE_HPCFB 16 /* Handheld/PalmSize PC */ 319 1.64 christos #define WSDISPLAY_TYPE_VIDC 17 /* Acorn/ARM VIDC */ 320 1.64 christos #define WSDISPLAY_TYPE_SPX 18 /* DEC SPX (VS3100/VS4000) */ 321 1.64 christos #define WSDISPLAY_TYPE_GPX 19 /* DEC GPX (uVAX/VS2K/VS3100 */ 322 1.64 christos #define WSDISPLAY_TYPE_LCG 20 /* DEC LCG (VS4000) */ 323 1.64 christos #define WSDISPLAY_TYPE_VAX_MONO 21 /* DEC VS2K/VS3100 mono */ 324 1.64 christos #define WSDISPLAY_TYPE_SB_P9100 22 /* Tadpole SPARCbook P9100 */ 325 1.64 christos #define WSDISPLAY_TYPE_EGA 23 /* (generic) EGA */ 326 1.64 christos #define WSDISPLAY_TYPE_DCPVR 24 /* Dreamcast PowerVR */ 327 1.95 tsutsui #define WSDISPLAY_TYPE_GBOX 25 /* HP Gator */ 328 1.64 christos #define WSDISPLAY_TYPE_TOPCAT 26 /* HP TopCat */ 329 1.95 tsutsui #define WSDISPLAY_TYPE_RBOX 27 /* HP Renaissance */ 330 1.64 christos #define WSDISPLAY_TYPE_CATSEYE 28 /* HP CatsEye */ 331 1.95 tsutsui #define WSDISPLAY_TYPE_DVBOX 29 /* HP DaVinci */ 332 1.95 tsutsui #define WSDISPLAY_TYPE_TVRX 30 /* HP TigerShark */ 333 1.64 christos #define WSDISPLAY_TYPE_HYPERION 31 /* HP Hyperion */ 334 1.64 christos #define WSDISPLAY_TYPE_AMIGACC 32 /* Amiga custom chips */ 335 1.64 christos #define WSDISPLAY_TYPE_SUN24 33 /* Sun 24 bit framebuffers */ 336 1.64 christos #define WSDISPLAY_TYPE_NEWPORT 34 /* SGI Newport */ 337 1.64 christos #define WSDISPLAY_TYPE_GR2 35 /* SGI GR2 */ 338 1.64 christos #define WSDISPLAY_TYPE_SUNCG12 36 /* Sun cgtwelve */ 339 1.64 christos #define WSDISPLAY_TYPE_SUNCG14 37 /* Sun cgfourteen */ 340 1.64 christos #define WSDISPLAY_TYPE_SUNTCX 38 /* Sun TCX */ 341 1.64 christos #define WSDISPLAY_TYPE_SUNFFB 39 /* Sun creator FFB */ 342 1.79 jmcneill #define WSDISPLAY_TYPE_STI 40 /* HP STI framebuffers */ 343 1.72 joff #define WSDISPLAY_TYPE_HDLCD 41 /* Hitachi HD44780 based LCDs */ 344 1.79 jmcneill #define WSDISPLAY_TYPE_VESA 42 /* VESA BIOS framebuffer */ 345 1.110 christos #define WSDISPLAY_TYPE_XILFB 43 /* Xilinx TFT cores */ 346 1.110 christos #define WSDISPLAY_TYPE_LIGHT 44 /* SGI Light (a.k.a. Entry/Starter) */ 347 1.110 christos #define WSDISPLAY_TYPE_GENFB 45 /* generic nondescript framebuffer */ 348 1.110 christos #define WSDISPLAY_TYPE_CRIME 46 /* SGI O2 */ 349 1.110 christos #define WSDISPLAY_TYPE_PXALCD 47 /* PXA2x0 LCD controller */ 350 1.110 christos #define WSDISPLAY_TYPE_AG10 48 /* Fujitsu AG-10e */ 351 1.110 christos #define WSDISPLAY_TYPE_DL 49 /* DisplayLink DL-1x0/DL-1x5 */ 352 1.110 christos #define WSDISPLAY_TYPE_XVR1000 50 /* Sun XVR-1000 */ 353 1.110 christos #define WSDISPLAY_TYPE_LUNA 51 /* OMRON SX-9100 LUNA */ 354 1.110 christos #define WSDISPLAY_TYPE_GRF 52 /* wsdisplay on top of grf(4) */ 355 1.110 christos #define WSDISPLAY_TYPE_VNC 53 /* Usermode vnc framebuffer */ 356 1.110 christos #define WSDISPLAY_TYPE_VALKYRIE 54 /* Apple onboard video 'valkyrie' */ 357 1.110 christos #define WSDISPLAY_TYPE_IMXIPU 55 /* i.MX ipu */ 358 1.110 christos #define WSDISPLAY_TYPE_VC4 56 /* Broadcom VideoCore 4 */ 359 1.110 christos #define WSDISPLAY_TYPE_OMAP3 57 /* OMAP 3530 */ 360 1.110 christos #define WSDISPLAY_TYPE_WINDERMERE 58 /* SoC for EPOC32 Series 5mx */ 361 1.110 christos #define WSDISPLAY_TYPE_CLPS711X 59 /* CL PS-711x */ 362 1.111 christos #define WSDISPLAY_TYPE_ALLWINNER 60 /* Allwinner ARM SoC */ 363 1.111 christos #define WSDISPLAY_TYPE_MGX 61 /* SSB 4096V-MGX */ 364 1.113 jmcneill #define WSDISPLAY_TYPE_MESON 62 /* Amlogic Meson ARM SoC */ 365 1.113 jmcneill #define WSDISPLAY_TYPE_TEGRA 63 /* NVIDIA Tegra ARM SoC */ 366 1.117 macallan #define WSDISPLAY_TYPE_PLATINUM 64 /* onboard fb in PowerMac 7200 */ 367 1.118 jmcneill #define WSDISPLAY_TYPE_PLFB 65 /* ARM PrimeCell PL11x */ 368 1.122 tnn #define WSDISPLAY_TYPE_SSDFB 66 /* ssdfb(4) */ 369 1.127 jmcneill #define WSDISPLAY_TYPE_HOLLYWOOD 67 /* Nintendo Wii "Hollywood" SoC */ 370 1.128 mlelstv #define WSDISPLAY_TYPE_VC6 68 /* Broadcom VideoCore 6 */ 371 1.130 martin #define WSDISPLAY_TYPE_VIOGPU 69 /* VirtIO GPU */ 372 1.1 drochner 373 1.1 drochner /* Basic display information. Not applicable to all display types. */ 374 1.1 drochner struct wsdisplay_fbinfo { 375 1.1 drochner u_int height; /* height in pixels */ 376 1.1 drochner u_int width; /* width in pixels */ 377 1.1 drochner u_int depth; /* bits per pixel */ 378 1.1 drochner u_int cmsize; /* color map size (entries) */ 379 1.1 drochner }; 380 1.1 drochner #define WSDISPLAYIO_GINFO _IOR('W', 65, struct wsdisplay_fbinfo) 381 1.1 drochner 382 1.1 drochner /* Colormap operations. Not applicable to all display types. */ 383 1.1 drochner struct wsdisplay_cmap { 384 1.1 drochner u_int index; /* first element (0 origin) */ 385 1.1 drochner u_int count; /* number of elements */ 386 1.1 drochner u_char *red; /* red color map elements */ 387 1.1 drochner u_char *green; /* green color map elements */ 388 1.1 drochner u_char *blue; /* blue color map elements */ 389 1.73 perry }; 390 1.64 christos #define WSDISPLAYIO_GETCMAP _IOW('W', 66, struct wsdisplay_cmap) 391 1.64 christos #define WSDISPLAYIO_PUTCMAP _IOW('W', 67, struct wsdisplay_cmap) 392 1.1 drochner 393 1.1 drochner /* Video control. Not applicable to all display types. */ 394 1.1 drochner #define WSDISPLAYIO_GVIDEO _IOR('W', 68, u_int) 395 1.1 drochner #define WSDISPLAYIO_SVIDEO _IOW('W', 69, u_int) 396 1.64 christos #define WSDISPLAYIO_VIDEO_OFF 0 /* video off */ 397 1.64 christos #define WSDISPLAYIO_VIDEO_ON 1 /* video on */ 398 1.1 drochner 399 1.1 drochner /* Cursor control. Not applicable to all display types. */ 400 1.1 drochner struct wsdisplay_curpos { /* cursor "position" */ 401 1.1 drochner u_int x, y; 402 1.1 drochner }; 403 1.1 drochner 404 1.1 drochner struct wsdisplay_cursor { 405 1.1 drochner u_int which; /* values to get/set */ 406 1.64 christos #define WSDISPLAY_CURSOR_DOCUR 0x01 /* get/set enable */ 407 1.64 christos #define WSDISPLAY_CURSOR_DOPOS 0x02 /* get/set pos */ 408 1.64 christos #define WSDISPLAY_CURSOR_DOHOT 0x04 /* get/set hot spot */ 409 1.64 christos #define WSDISPLAY_CURSOR_DOCMAP 0x08 /* get/set cmap */ 410 1.64 christos #define WSDISPLAY_CURSOR_DOSHAPE 0x10 /* get/set img/mask */ 411 1.64 christos #define WSDISPLAY_CURSOR_DOALL 0x1f /* all of the above */ 412 1.1 drochner u_int enable; /* enable/disable */ 413 1.1 drochner struct wsdisplay_curpos pos; /* position */ 414 1.1 drochner struct wsdisplay_curpos hot; /* hot spot */ 415 1.1 drochner struct wsdisplay_cmap cmap; /* color map info */ 416 1.1 drochner struct wsdisplay_curpos size; /* bit map size */ 417 1.1 drochner u_char *image; /* image data */ 418 1.1 drochner u_char *mask; /* mask data */ 419 1.1 drochner }; 420 1.1 drochner 421 1.1 drochner /* Cursor control: get and set position */ 422 1.1 drochner #define WSDISPLAYIO_GCURPOS _IOR('W', 70, struct wsdisplay_curpos) 423 1.1 drochner #define WSDISPLAYIO_SCURPOS _IOW('W', 71, struct wsdisplay_curpos) 424 1.1 drochner 425 1.1 drochner /* Cursor control: get maximum size */ 426 1.1 drochner #define WSDISPLAYIO_GCURMAX _IOR('W', 72, struct wsdisplay_curpos) 427 1.1 drochner 428 1.1 drochner /* Cursor control: get/set cursor attributes/shape */ 429 1.1 drochner #define WSDISPLAYIO_GCURSOR _IOWR('W', 73, struct wsdisplay_cursor) 430 1.1 drochner #define WSDISPLAYIO_SCURSOR _IOW('W', 74, struct wsdisplay_cursor) 431 1.1 drochner 432 1.1 drochner /* Display mode: Emulation (text) vs. Mapped (graphics) mode */ 433 1.1 drochner #define WSDISPLAYIO_GMODE _IOR('W', 75, u_int) 434 1.1 drochner #define WSDISPLAYIO_SMODE _IOW('W', 76, u_int) 435 1.64 christos #define WSDISPLAYIO_MODE_EMUL 0 /* emulation (text) mode */ 436 1.64 christos #define WSDISPLAYIO_MODE_MAPPED 1 /* mapped (graphics) mode */ 437 1.67 heas #define WSDISPLAYIO_MODE_DUMBFB 2 /* mapped (graphics) fb mode */ 438 1.1 drochner 439 1.52 reinoud 440 1.12 drochner /* 441 1.12 drochner * XXX WARNING 442 1.52 reinoud * XXX The following wsdisplay definitions are very preliminary and are likely 443 1.12 drochner * XXX to be changed without care about backwards compatibility! 444 1.12 drochner */ 445 1.1 drochner struct wsdisplay_font { 446 1.56 jdolecek const char *name; 447 1.1 drochner int firstchar, numchars; 448 1.13 drochner int encoding; 449 1.64 christos #define WSDISPLAY_FONTENC_ISO 0 450 1.64 christos #define WSDISPLAY_FONTENC_IBM 1 451 1.64 christos #define WSDISPLAY_FONTENC_PCVT 2 452 1.64 christos #define WSDISPLAY_FONTENC_ISO7 3 /* greek */ 453 1.64 christos #define WSDISPLAY_FONTENC_ISO2 4 /* east european */ 454 1.96 drochner #define WSDISPLAY_FONTENC_KOI8_R 5 /* russian */ 455 1.40 jdolecek u_int fontwidth, fontheight, stride; 456 1.64 christos #define WSDISPLAY_MAXFONTSZ (512*1024) 457 1.21 ad int bitorder, byteorder; 458 1.64 christos #define WSDISPLAY_FONTORDER_KNOWN 0 /* i.e, no need to convert */ 459 1.23 enami #define WSDISPLAY_FONTORDER_L2R 1 460 1.23 enami #define WSDISPLAY_FONTORDER_R2L 2 461 1.57 jdolecek void *data; 462 1.1 drochner }; 463 1.64 christos #define WSDISPLAYIO_LDFONT _IOW('W', 77, struct wsdisplay_font) 464 1.12 drochner 465 1.12 drochner struct wsdisplay_addscreendata { 466 1.12 drochner int idx; /* screen index */ 467 1.12 drochner char *screentype; 468 1.12 drochner char *emul; 469 1.12 drochner }; 470 1.64 christos #define WSDISPLAYIO_ADDSCREEN _IOW('W', 78, struct wsdisplay_addscreendata) 471 1.12 drochner 472 1.12 drochner struct wsdisplay_delscreendata { 473 1.12 drochner int idx; /* screen index */ 474 1.12 drochner int flags; 475 1.64 christos #define WSDISPLAY_DELSCR_FORCE 1 476 1.12 drochner }; 477 1.64 christos #define WSDISPLAYIO_DELSCREEN _IOW('W', 79, struct wsdisplay_delscreendata) 478 1.13 drochner 479 1.13 drochner struct wsdisplay_usefontdata { 480 1.13 drochner char *name; 481 1.13 drochner }; 482 1.64 christos #define WSDISPLAYIO_SFONT _IOW('W', 80, struct wsdisplay_usefontdata) 483 1.18 drochner 484 1.44 augustss /* Obsolete, replaced by WSMUXIO_{ADD,REMOVE}_DEVICE */ 485 1.18 drochner struct wsdisplay_kbddata { 486 1.18 drochner int op; 487 1.64 christos #define _O_WSDISPLAY_KBD_ADD 0 488 1.64 christos #define _O_WSDISPLAY_KBD_DEL 1 489 1.18 drochner int idx; 490 1.18 drochner }; 491 1.64 christos #define _O_WSDISPLAYIO_SETKEYBOARD _IOWR('W', 81, struct wsdisplay_kbddata) 492 1.34 takemura 493 1.93 macallan /* 494 1.93 macallan * Misc control. Not applicable to all display types. 495 1.93 macallan * - WSDISPLAYIO_PARAM_BACKLIGHT should be an on/off switch for screensavers, 496 1.93 macallan * it should turn the display dark / turn the backlight off without changing 497 1.93 macallan * the brightness value so screensavers and such can just flip the switch 498 1.93 macallan * without caring about actual brightness settings 499 1.93 macallan * - WSDISPLAYIO_PARAM_BRIGHTNESS should set display / backlight brightness 500 1.93 macallan */ 501 1.34 takemura struct wsdisplay_param { 502 1.75 tsutsui int param; 503 1.34 takemura #define WSDISPLAYIO_PARAM_BACKLIGHT 1 504 1.34 takemura #define WSDISPLAYIO_PARAM_BRIGHTNESS 2 505 1.34 takemura #define WSDISPLAYIO_PARAM_CONTRAST 3 506 1.75 tsutsui int min, max, curval; 507 1.75 tsutsui int reserved[4]; 508 1.34 takemura }; 509 1.34 takemura #define WSDISPLAYIO_GETPARAM _IOWR('W', 82, struct wsdisplay_param) 510 1.34 takemura #define WSDISPLAYIO_SETPARAM _IOWR('W', 83, struct wsdisplay_param) 511 1.51 christos 512 1.51 christos #define WSDISPLAYIO_GETACTIVESCREEN _IOR('W', 84, int) 513 1.51 christos 514 1.51 christos /* Character functions */ 515 1.51 christos struct wsdisplay_char { 516 1.51 christos int row, col; 517 1.51 christos uint16_t letter; 518 1.51 christos uint8_t background, foreground; 519 1.51 christos char flags; 520 1.64 christos #define WSDISPLAY_CHAR_BRIGHT 1 521 1.64 christos #define WSDISPLAY_CHAR_BLINK 2 522 1.51 christos }; 523 1.64 christos #define WSDISPLAYIO_GETWSCHAR _IOWR('W', 85, struct wsdisplay_char) 524 1.64 christos #define WSDISPLAYIO_PUTWSCHAR _IOWR('W', 86, struct wsdisplay_char) 525 1.1 drochner 526 1.63 christos /* Manipulate the scrolling values (how many lines to scroll) */ 527 1.63 christos 528 1.63 christos struct wsdisplay_scroll_data { 529 1.64 christos u_int which; 530 1.64 christos #define WSDISPLAY_SCROLL_DOFASTLINES 0x01 531 1.64 christos #define WSDISPLAY_SCROLL_DOSLOWLINES 0x02 532 1.64 christos #define WSDISPLAY_SCROLL_DOALL 0x03 533 1.65 christos u_int fastlines; 534 1.65 christos u_int slowlines; 535 1.63 christos }; 536 1.63 christos 537 1.63 christos #define WSDISPLAYIO_DGSCROLL _IOR('W', 87, struct wsdisplay_scroll_data) 538 1.63 christos #define WSDISPLAYIO_DSSCROLL _IOW('W', 88, struct wsdisplay_scroll_data) 539 1.63 christos 540 1.68 jmmv struct wsdisplay_msgattrs { 541 1.68 jmmv int default_attrs, default_bg, default_fg; 542 1.68 jmmv int kernel_attrs, kernel_bg, kernel_fg; 543 1.68 jmmv }; 544 1.68 jmmv 545 1.68 jmmv #define WSDISPLAYIO_GMSGATTRS _IOR('W', 89, struct wsdisplay_msgattrs) 546 1.68 jmmv #define WSDISPLAYIO_SMSGATTRS _IOW('W', 90, struct wsdisplay_msgattrs) 547 1.68 jmmv 548 1.69 jmmv #define WSDISPLAYIO_GBORDER _IOR('W', 91, int) 549 1.69 jmmv #define WSDISPLAYIO_SBORDER _IOW('W', 92, int) 550 1.69 jmmv 551 1.79 jmcneill /* Splash screen control */ 552 1.79 jmcneill #define WSDISPLAYIO_SSPLASH _IOW('W', 93, int) 553 1.79 jmcneill #define WSDISPLAYIO_SPROGRESS _IOW('W', 94, int) 554 1.79 jmcneill 555 1.1 drochner /* XXX NOT YET DEFINED */ 556 1.1 drochner /* Mapping information retrieval. */ 557 1.19 augustss 558 1.67 heas /* Display information: number of bytes per row, may be same as pixels */ 559 1.67 heas #define WSDISPLAYIO_LINEBYTES _IOR('W', 95, u_int) 560 1.52 reinoud 561 1.89 christos /* WSMUXIO_OINJECTEVENT was 96, but does not conflict because arg sizes */ 562 1.89 christos 563 1.89 christos #define WSDISPLAYIO_SETVERSION _IOW('W', 96, int) 564 1.89 christos #define WSDISPLAYIO_EVENT_VERSION WSEVENT_VERSION 565 1.89 christos 566 1.52 reinoud /* 567 1.89 christos * Mux ioctls (97 - 127) 568 1.52 reinoud */ 569 1.52 reinoud 570 1.19 augustss struct wsmux_device { 571 1.19 augustss int type; 572 1.64 christos #define WSMUX_MOUSE 1 573 1.64 christos #define WSMUX_KBD 2 574 1.64 christos #define WSMUX_MUX 3 575 1.119 nat #define WSMUX_BELL 4 576 1.19 augustss int idx; 577 1.19 augustss }; 578 1.64 christos #define WSMUXIO_ADD_DEVICE _IOW('W', 97, struct wsmux_device) 579 1.64 christos #define WSMUX_ADD_DEVICE WSMUXIO_ADD_DEVICE /* XXX compat */ 580 1.64 christos #define WSMUXIO_REMOVE_DEVICE _IOW('W', 98, struct wsmux_device) 581 1.64 christos #define WSMUX_REMOVE_DEVICE WSMUXIO_REMOVE_DEVICE /* XXX compat */ 582 1.19 augustss 583 1.64 christos #define WSMUX_MAXDEV 32 584 1.19 augustss struct wsmux_device_list { 585 1.19 augustss int ndevices; 586 1.19 augustss struct wsmux_device devices[WSMUX_MAXDEV]; 587 1.19 augustss }; 588 1.64 christos #define WSMUXIO_LIST_DEVICES _IOWR('W', 99, struct wsmux_device_list) 589 1.64 christos #define WSMUX_LIST_DEVICES WSMUXIO_LIST_DEVICES /* XXX compat */ 590 1.1 drochner 591 1.89 christos #define WSMUXIO_INJECTEVENT _IOW('W', 100, struct wscons_event) 592 1.89 christos #define WSMUX_INJECTEVENT WSMUXIO_INJECTEVENT /* XXX compat */ 593 1.89 christos 594 1.94 cegger /* Mapping information retrieval. */ 595 1.94 cegger struct wsdisplayio_bus_id { 596 1.94 cegger u_int bus_type; 597 1.94 cegger #define WSDISPLAYIO_BUS_PCI 0 598 1.94 cegger #define WSDISPLAYIO_BUS_SBUS 1 599 1.105 jmcneill #define WSDISPLAYIO_BUS_SOC 2 600 1.94 cegger union bus_data { 601 1.94 cegger struct bus_pci { 602 1.94 cegger uint32_t domain; 603 1.94 cegger uint32_t bus; 604 1.94 cegger uint32_t device; 605 1.94 cegger uint32_t function; 606 1.94 cegger } pci; 607 1.94 cegger struct bus_sbus { 608 1.94 cegger uint32_t fb_instance; 609 1.94 cegger } sbus; 610 1.94 cegger /* so the size doesn't change if we add more bus types */ 611 1.94 cegger char pad[32]; 612 1.94 cegger } ubus; 613 1.94 cegger }; 614 1.94 cegger 615 1.94 cegger #define WSDISPLAYIO_GET_BUSID _IOR('W', 101, struct wsdisplayio_bus_id) 616 1.94 cegger 617 1.97 macallan /* 618 1.97 macallan * retrieving EDID data from a wsdisplay driver 619 1.97 macallan * The EDID block will be written into a buffer pointed at by edid_data, 620 1.97 macallan * the caller must fill in buffer_size and edid_data, the driver will set 621 1.97 macallan * data_size to the number of bytes actually written. 622 1.97 macallan * If the buffer is too small the call will fail with EAGAIN and the driver 623 1.97 macallan * will set data_size without writing anything into the buffer. 624 1.97 macallan */ 625 1.97 macallan 626 1.97 macallan struct wsdisplayio_edid_info { 627 1.98 macallan uint32_t buffer_size; 628 1.98 macallan uint32_t data_size; 629 1.99 macallan void *edid_data; 630 1.97 macallan }; 631 1.97 macallan #define WSDISPLAYIO_GET_EDID _IOWR('W', 102, struct wsdisplayio_edid_info) 632 1.97 macallan 633 1.97 macallan /* 634 1.97 macallan * this is for enabling and disabling interrupt-driven drawing 635 1.97 macallan * pass 1 to enable polling, 0 to go back to normal 636 1.97 macallan * the kernel itself will call this on the console device when entering or 637 1.97 macallan * leaving ddb and on panic 638 1.97 macallan * may have side effects like hard switching to the virtual console which 639 1.97 macallan * shows kernel output, resetting the video hardware etc. - not really for 640 1.97 macallan * userland to mess with 641 1.97 macallan */ 642 1.97 macallan #define WSDISPLAYIO_SET_POLLING _IOW('W', 103, int) 643 1.97 macallan #define WSDISPLAYIOMGWEHITANDKILLEDASKUNK WSDISPLAYIO_SET_POLLING 644 1.97 macallan 645 1.107 macallan /* 646 1.107 macallan * this is supposed to replace WSDISPLAYIO_GINFO, WSDISPLAYIO_GTYPE, 647 1.107 macallan * WSDISPLAYIO_LINEBYTES etc. 648 1.107 macallan */ 649 1.107 macallan 650 1.107 macallan /* format type - colour index, 'true' colour etc. */ 651 1.107 macallan #define WSFB_RGB 0 652 1.107 macallan #define WSFB_CI 1 /* colour indexed, see subtype */ 653 1.107 macallan #define WSFB_GREYSCALE 2 654 1.107 macallan #define WSFB_YUV 3 655 1.127 jmcneill #define WSFB_YUY2 4 656 1.107 macallan 657 1.107 macallan struct wsdisplayio_fbinfo { 658 1.107 macallan uint64_t fbi_fbsize; /* framebuffer size in bytes */ 659 1.107 macallan uint64_t fbi_fboffset; /* start of visible fb, in bytes */ 660 1.107 macallan uint32_t fbi_width; /* in pixels */ 661 1.107 macallan uint32_t fbi_height; /* in lines */ 662 1.107 macallan uint32_t fbi_stride; /* in bytes */ 663 1.107 macallan uint32_t fbi_bitsperpixel; 664 1.107 macallan uint32_t fbi_pixeltype; /* see above */ 665 1.107 macallan union _fbi_subtype { 666 1.107 macallan struct _fbi_rgbmasks { 667 1.107 macallan /* offsets from the right, size in bits */ 668 1.107 macallan uint32_t red_offset; 669 1.107 macallan uint32_t red_size; 670 1.107 macallan uint32_t green_offset; 671 1.107 macallan uint32_t green_size; 672 1.107 macallan uint32_t blue_offset; 673 1.107 macallan uint32_t blue_size; 674 1.107 macallan uint32_t alpha_offset; 675 1.107 macallan uint32_t alpha_size; 676 1.107 macallan } fbi_rgbmasks; 677 1.107 macallan struct _fbi_cmapinfo { 678 1.107 macallan uint32_t cmap_entries; 679 1.107 macallan } fbi_cmapinfo; 680 1.107 macallan /* 681 1.107 macallan * TODO: 682 1.107 macallan * add parameter blocks for greyscale, yuv etc. 683 1.107 macallan */ 684 1.107 macallan } fbi_subtype; 685 1.107 macallan uint32_t fbi_flags; 686 1.107 macallan }; 687 1.107 macallan 688 1.107 macallan /* fbi_flags */ 689 1.117 macallan #define WSFB_VRAM_IS_RAM 0x0001 /* hint for wsfb - don't shadow */ 690 1.117 macallan #define WSFB_VRAM_IS_SPLIT 0x0002 /* workaround for wildcat... */ 691 1.107 macallan 692 1.107 macallan #define WSDISPLAYIO_GET_FBINFO _IOWR('W', 104, struct wsdisplayio_fbinfo) 693 1.107 macallan 694 1.114 mlelstv struct wsdisplayio_blit { 695 1.114 mlelstv uint32_t serial; 696 1.114 mlelstv uint32_t op; 697 1.114 mlelstv uint32_t srcx; 698 1.114 mlelstv uint32_t srcy; 699 1.114 mlelstv uint32_t dstx; 700 1.114 mlelstv uint32_t dsty; 701 1.114 mlelstv uint32_t width; 702 1.114 mlelstv uint32_t height; 703 1.114 mlelstv uint32_t pen; 704 1.114 mlelstv }; 705 1.114 mlelstv 706 1.114 mlelstv /* blit ops */ 707 1.114 mlelstv #define WSFB_BLIT_FILL 1 /* fill rectangle */ 708 1.114 mlelstv #define WSFB_BLIT_COPY 2 /* copy rectangle */ 709 1.114 mlelstv #define WSFB_BLIT_TRANS 3 /* copy rectangle with color key */ 710 1.114 mlelstv 711 1.114 mlelstv #define WSDISPLAYIO_DOBLIT _IOWR('W', 105, struct wsdisplayio_blit) 712 1.114 mlelstv #define WSDISPLAYIO_WAITBLIT _IOWR('W', 106, struct wsdisplayio_blit) 713 1.114 mlelstv 714 1.125 macallan struct wsdisplayio_fontdesc { 715 1.125 macallan char fd_name[64]; 716 1.125 macallan uint16_t fd_height; 717 1.125 macallan uint16_t fd_width; 718 1.125 macallan }; 719 1.125 macallan 720 1.125 macallan struct wsdisplayio_fontinfo { 721 1.125 macallan uint32_t fi_buffersize; 722 1.125 macallan uint32_t fi_numentries; 723 1.125 macallan struct wsdisplayio_fontdesc *fi_fonts; 724 1.125 macallan }; 725 1.125 macallan 726 1.125 macallan /* 727 1.125 macallan * fill buffer pointed at by fi_fonts with wsdisplayio_fontdesc until either 728 1.125 macallan * full or all fonts are listed 729 1.125 macallan * just return the number of entries needed if fi_fonts is NULL 730 1.125 macallan */ 731 1.125 macallan 732 1.125 macallan #define WSDISPLAYIO_LISTFONTS _IOWR('W', 107, struct wsdisplayio_fontinfo) 733 1.125 macallan 734 1.129 mlelstv struct wsdisplay_getfont { 735 1.129 mlelstv char *gf_name; 736 1.129 mlelstv uint32_t gf_size; 737 1.129 mlelstv uint32_t gf_actual; 738 1.129 mlelstv }; 739 1.129 mlelstv 740 1.129 mlelstv /* 741 1.129 mlelstv * return currently active font 742 1.129 mlelstv * 743 1.129 mlelstv * gf_name points to a buffer of gf_size bytes, the result may be truncated 744 1.129 mlelstv * and NUL-terminated. 745 1.129 mlelstv * gf_actual is set to the size of full name. 746 1.129 mlelstv */ 747 1.129 mlelstv 748 1.129 mlelstv #define WSDISPLAYIO_GFONT _IOWR('W', 108, struct wsdisplay_getfont) 749 1.129 mlelstv 750 1.2 hannken #endif /* _DEV_WSCONS_WSCONSIO_H_ */ 751