1 1.57 riastrad /* $NetBSD: wsdisplayvar.h,v 1.57 2023/03/01 08:42:33 riastradh 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.35 jmcneill #ifndef _DEV_WSCONS_WSDISPLAYVAR_H 34 1.35 jmcneill #define _DEV_WSCONS_WSDISPLAYVAR_H 35 1.35 jmcneill 36 1.44 dogcow #include <sys/device.h> 37 1.1 drochner 38 1.1 drochner /* 39 1.1 drochner * WSDISPLAY interfaces 40 1.1 drochner */ 41 1.1 drochner 42 1.1 drochner /* 43 1.1 drochner * Emulation functions, for displays that can support glass-tty terminal 44 1.1 drochner * emulations. These are character oriented, with row and column 45 1.1 drochner * numbers starting at zero in the upper left hand corner of the 46 1.1 drochner * screen. 47 1.1 drochner * 48 1.1 drochner * These are used only when emulating a terminal. Therefore, displays 49 1.1 drochner * drivers which cannot emulate terminals do not have to provide them. 50 1.1 drochner * 51 1.1 drochner * There is a "void *" cookie provided by the display driver associated 52 1.1 drochner * with these functions, which is passed to them when they are invoked. 53 1.1 drochner */ 54 1.1 drochner struct wsdisplay_emulops { 55 1.40 peter void (*cursor)(void *, int, int, int); 56 1.20 augustss int (*mapchar)(void *, int, unsigned int *); 57 1.40 peter void (*putchar)(void *, int, int, u_int, long); 58 1.40 peter void (*copycols)(void *, int, int, int, int); 59 1.40 peter void (*erasecols)(void *, int, int, int, long); 60 1.40 peter void (*copyrows)(void *, int, int, int); 61 1.40 peter void (*eraserows)(void *, int, int, long); 62 1.40 peter int (*allocattr)(void *, int, int, int, long *); 63 1.2 drochner /* fg / bg values. Made identical to ANSI terminal color codes. */ 64 1.2 drochner #define WSCOL_BLACK 0 65 1.2 drochner #define WSCOL_RED 1 66 1.2 drochner #define WSCOL_GREEN 2 67 1.2 drochner #define WSCOL_BROWN 3 68 1.2 drochner #define WSCOL_BLUE 4 69 1.2 drochner #define WSCOL_MAGENTA 5 70 1.2 drochner #define WSCOL_CYAN 6 71 1.2 drochner #define WSCOL_WHITE 7 72 1.32 martin #define WSCOL_LIGHT_GREY (WSCOL_BLACK+8) 73 1.32 martin #define WSCOL_LIGHT_RED (WSCOL_RED+8) 74 1.32 martin #define WSCOL_LIGHT_GREEN (WSCOL_GREEN+8) 75 1.32 martin #define WSCOL_LIGHT_BROWN (WSCOL_BROWN+8) 76 1.32 martin #define WSCOL_LIGHT_BLUE (WSCOL_BLUE+8) 77 1.32 martin #define WSCOL_LIGHT_MAGENTA (WSCOL_MAGENTA+8) 78 1.32 martin #define WSCOL_LIGHT_CYAN (WSCOL_CYAN+8) 79 1.32 martin #define WSCOL_LIGHT_WHITE (WSCOL_WHITE+8) 80 1.2 drochner /* flag values: */ 81 1.2 drochner #define WSATTR_REVERSE 1 82 1.2 drochner #define WSATTR_HILIT 2 83 1.2 drochner #define WSATTR_BLINK 4 84 1.2 drochner #define WSATTR_UNDERLINE 8 85 1.2 drochner #define WSATTR_WSCOLORS 16 86 1.54 mlelstv #define WSATTR_USERMASK 0x0fff 87 1.54 mlelstv /* private flags used by the driver */ 88 1.54 mlelstv #define WSATTR_PRIVATE1 4096 89 1.54 mlelstv #define WSATTR_PRIVATE2 8192 90 1.54 mlelstv #define WSATTR_PRIVATE3 16384 91 1.54 mlelstv #define WSATTR_PRIVATE4 32768 92 1.2 drochner /* XXX need a free_attr() ??? */ 93 1.40 peter void (*replaceattr)(void *, long, long); 94 1.1 drochner }; 95 1.1 drochner 96 1.1 drochner struct wsscreen_descr { 97 1.33 christos const char *name; 98 1.1 drochner int ncols, nrows; 99 1.1 drochner const struct wsdisplay_emulops *textops; 100 1.1 drochner int fontwidth, fontheight; 101 1.2 drochner int capabilities; 102 1.2 drochner #define WSSCREEN_WSCOLORS 1 /* minimal color capability */ 103 1.2 drochner #define WSSCREEN_REVERSE 2 /* can display reversed */ 104 1.2 drochner #define WSSCREEN_HILIT 4 /* can highlight (however) */ 105 1.2 drochner #define WSSCREEN_BLINK 8 /* can blink */ 106 1.2 drochner #define WSSCREEN_UNDERLINE 16 /* can underline */ 107 1.52 macallan #define WSSCREEN_RESIZE 32 /* can resize */ 108 1.52 macallan #define WSSCREEN_FREE 64 /* free() this struct when deleting 109 1.52 macallan * internal only, do not set */ 110 1.23 junyoung void *modecookie; 111 1.1 drochner }; 112 1.1 drochner 113 1.9 drochner struct wsdisplay_font; 114 1.21 christos struct wsdisplay_char; 115 1.1 drochner /* 116 1.1 drochner * Display access functions, invoked by user-land programs which require 117 1.1 drochner * direct device access, such as X11. 118 1.1 drochner * 119 1.1 drochner * There is a "void *" cookie provided by the display driver associated 120 1.1 drochner * with these functions, which is passed to them when they are invoked. 121 1.1 drochner */ 122 1.1 drochner struct wsdisplay_accessops { 123 1.42 christos int (*ioctl)(void *, void *, u_long, void *, int, struct lwp *); 124 1.40 peter paddr_t (*mmap)(void *, void *, off_t, int); 125 1.20 augustss int (*alloc_screen)(void *, const struct wsscreen_descr *, 126 1.40 peter void **, int *, int *, long *); 127 1.20 augustss void (*free_screen)(void *, void *); 128 1.20 augustss int (*show_screen)(void *, void *, int, 129 1.40 peter void (*)(void *, int, int), void *); 130 1.20 augustss int (*load_font)(void *, void *, struct wsdisplay_font *); 131 1.20 augustss void (*pollc)(void *, int); 132 1.30 perry void (*scroll)(void *, void *, int); 133 1.1 drochner }; 134 1.1 drochner 135 1.1 drochner /* 136 1.1 drochner * Attachment information provided by wsdisplaydev devices when attaching 137 1.1 drochner * wsdisplay units. 138 1.1 drochner */ 139 1.1 drochner struct wsdisplaydev_attach_args { 140 1.1 drochner const struct wsdisplay_accessops *accessops; /* access ops */ 141 1.1 drochner void *accesscookie; /* access cookie */ 142 1.1 drochner }; 143 1.1 drochner 144 1.1 drochner /* passed to wscons by the video driver to tell about its capabilities */ 145 1.1 drochner struct wsscreen_list { 146 1.1 drochner int nscreens; 147 1.1 drochner const struct wsscreen_descr **screens; 148 1.1 drochner }; 149 1.1 drochner 150 1.1 drochner /* 151 1.1 drochner * Attachment information provided by wsemuldisplaydev devices when attaching 152 1.1 drochner * wsdisplay units. 153 1.1 drochner */ 154 1.1 drochner struct wsemuldisplaydev_attach_args { 155 1.1 drochner int console; /* is it console? */ 156 1.2 drochner const struct wsscreen_list *scrdata; /* screen cfg info */ 157 1.1 drochner const struct wsdisplay_accessops *accessops; /* access ops */ 158 1.1 drochner void *accesscookie; /* access cookie */ 159 1.1 drochner }; 160 1.1 drochner 161 1.3 drochner struct wscons_syncops { 162 1.20 augustss int (*detach)(void *, int, void (*)(void *, int, int), void *); 163 1.20 augustss int (*attach)(void *, int, void (*)(void *, int, int), void *); 164 1.20 augustss int (*check)(void *); 165 1.20 augustss void (*destroy)(void *); 166 1.3 drochner }; 167 1.3 drochner 168 1.1 drochner /* 169 1.1 drochner * Autoconfiguration helper functions. 170 1.1 drochner */ 171 1.41 macallan void wsdisplay_cnattach(const struct wsscreen_descr *, void *, int, int, 172 1.41 macallan long); 173 1.41 macallan void wsdisplay_preattach(const struct wsscreen_descr *, void *, int, int, 174 1.41 macallan long); 175 1.57 riastrad void wsdisplay_predetach(void); 176 1.51 mlelstv void wsdisplay_cndetach(void); 177 1.55 jmcneill void wsdisplay_multicons_suspend(bool); 178 1.41 macallan 179 1.20 augustss int wsdisplaydevprint(void *, const char *); 180 1.20 augustss int wsemuldisplaydevprint(void *, const char *); 181 1.1 drochner 182 1.46 drochner int wsdisplay_handlex(int); 183 1.46 drochner 184 1.1 drochner /* 185 1.1 drochner * Console interface. 186 1.1 drochner */ 187 1.40 peter void wsdisplay_cnputc(dev_t, int); 188 1.3 drochner 189 1.3 drochner /* 190 1.3 drochner * for use by compatibility code 191 1.3 drochner */ 192 1.3 drochner struct wsdisplay_softc; 193 1.3 drochner struct wsscreen; 194 1.20 augustss int wsscreen_attach_sync(struct wsscreen *, 195 1.20 augustss const struct wscons_syncops *, void *); 196 1.20 augustss int wsscreen_detach_sync(struct wsscreen *); 197 1.20 augustss int wsscreen_lookup_sync(struct wsscreen *, 198 1.20 augustss const struct wscons_syncops *, void **); 199 1.20 augustss 200 1.20 augustss int wsdisplay_maxscreenidx(struct wsdisplay_softc *); 201 1.20 augustss int wsdisplay_screenstate(struct wsdisplay_softc *, int); 202 1.20 augustss int wsdisplay_getactivescreen(struct wsdisplay_softc *); 203 1.20 augustss int wsscreen_switchwait(struct wsdisplay_softc *, int); 204 1.20 augustss 205 1.40 peter int wsdisplay_internal_ioctl(struct wsdisplay_softc *, struct wsscreen *, 206 1.42 christos u_long, void *, int, struct lwp *); 207 1.20 augustss 208 1.43 joerg int wsdisplay_usl_ioctl1(device_t, u_long, void *, int, struct lwp *); 209 1.20 augustss 210 1.20 augustss int wsdisplay_usl_ioctl2(struct wsdisplay_softc *, struct wsscreen *, 211 1.42 christos u_long, void *, int, struct lwp *); 212 1.20 augustss 213 1.42 christos int wsdisplay_stat_ioctl(struct wsdisplay_softc *, u_long, void *, 214 1.40 peter int, struct lwp *); 215 1.21 christos 216 1.42 christos int wsdisplay_cfg_ioctl(struct wsdisplay_softc *, u_long, void *, 217 1.40 peter int, struct lwp *); 218 1.21 christos 219 1.53 bouyer bool wsdisplay_isconsole(struct wsdisplay_softc *); 220 1.53 bouyer 221 1.49 macallan struct wsdisplayio_edid_info; 222 1.49 macallan int wsdisplayio_get_edid(device_t, struct wsdisplayio_edid_info *); 223 1.49 macallan 224 1.50 macallan struct wsdisplayio_fbinfo; 225 1.50 macallan struct rasops_info; 226 1.50 macallan int wsdisplayio_get_fbinfo(struct rasops_info *, struct wsdisplayio_fbinfo *); 227 1.50 macallan 228 1.26 christos #ifdef WSDISPLAY_SCROLLSUPPORT 229 1.40 peter void wsdisplay_scroll(void *, int); 230 1.26 christos #endif 231 1.26 christos 232 1.26 christos #define WSDISPLAY_SCROLL_BACKWARD 1 233 1.26 christos #define WSDISPLAY_SCROLL_FORWARD (1 << 1) 234 1.26 christos #define WSDISPLAY_SCROLL_RESET (1 << 2) 235 1.26 christos #define WSDISPLAY_SCROLL_LOW (1 << 3) 236 1.26 christos 237 1.47 cube int wsdisplay_stat_inject(device_t, u_int, int); 238 1.12 jdolecek 239 1.12 jdolecek /* 240 1.12 jdolecek * for general use 241 1.12 jdolecek */ 242 1.16 takemura #define WSDISPLAY_NULLSCREEN -1 243 1.40 peter const struct wsscreen_descr *wsdisplay_screentype_pick( 244 1.40 peter const struct wsscreen_list *, const char *); 245 1.28 jmmv 246 1.28 jmmv #if defined(_KERNEL) 247 1.28 jmmv # if defined(_KERNEL_OPT) 248 1.28 jmmv # include "opt_wsmsgattrs.h" 249 1.28 jmmv # endif 250 1.28 jmmv # if !defined(WS_DEFAULT_FG) 251 1.28 jmmv # define WS_DEFAULT_FG WSCOL_WHITE 252 1.28 jmmv # endif 253 1.28 jmmv # if !defined(WS_DEFAULT_BG) 254 1.28 jmmv # define WS_DEFAULT_BG WSCOL_BLACK 255 1.28 jmmv # endif 256 1.28 jmmv # if !defined(WS_DEFAULT_COLATTR) 257 1.28 jmmv # define WS_DEFAULT_COLATTR 0 258 1.28 jmmv # endif 259 1.28 jmmv # if !defined(WS_DEFAULT_MONOATTR) 260 1.28 jmmv # define WS_DEFAULT_MONOATTR 0 261 1.28 jmmv # endif 262 1.28 jmmv # if defined(WS_KERNEL_FG) || defined(WS_KERNEL_BG) || \ 263 1.28 jmmv defined(WS_KERNEL_COLATTR) || defined(WS_KERNEL_MONOATTR) 264 1.28 jmmv # define WS_KERNEL_CUSTOMIZED 265 1.28 jmmv # else 266 1.28 jmmv # undef WS_KERNEL_CUSTOMIZED 267 1.28 jmmv # endif 268 1.28 jmmv # if !defined(WS_KERNEL_FG) 269 1.28 jmmv # define WS_KERNEL_FG WS_DEFAULT_FG 270 1.28 jmmv # endif 271 1.28 jmmv # if !defined(WS_KERNEL_BG) 272 1.28 jmmv # define WS_KERNEL_BG WS_DEFAULT_BG 273 1.28 jmmv # endif 274 1.28 jmmv # if !defined(WS_KERNEL_COLATTR) 275 1.28 jmmv # define WS_KERNEL_COLATTR WS_DEFAULT_COLATTR 276 1.28 jmmv # endif 277 1.28 jmmv # if !defined(WS_KERNEL_MONOATTR) 278 1.28 jmmv # define WS_KERNEL_MONOATTR WS_DEFAULT_MONOATTR 279 1.28 jmmv # endif 280 1.29 jmmv # if !defined(WSDISPLAY_BORDER_COLOR) 281 1.56 uwe # define WSDISPLAY_BORDER_COLOR WS_DEFAULT_BG 282 1.29 jmmv # endif 283 1.28 jmmv #endif /* _KERNEL */ 284 1.35 jmcneill 285 1.35 jmcneill #endif /* !_DEV_WSCONS_WSDISPLAYVAR_H */ 286