diff options
Diffstat (limited to 'static/netbsd/man4/wsdisplay.4')
| -rw-r--r-- | static/netbsd/man4/wsdisplay.4 | 652 |
1 files changed, 652 insertions, 0 deletions
diff --git a/static/netbsd/man4/wsdisplay.4 b/static/netbsd/man4/wsdisplay.4 new file mode 100644 index 00000000..031c1d56 --- /dev/null +++ b/static/netbsd/man4/wsdisplay.4 @@ -0,0 +1,652 @@ +.\" $NetBSD: wsdisplay.4,v 1.51 2024/09/02 13:41:33 gutteridge Exp $ +.\" +.\" Copyright (c) 1999 Matthias Drochner. +.\" Copyright (c) 2002 Ben Harris. +.\" Copyright (c) 2004 Julio M. Merino Vidal. +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.Dd May 16, 2020 +.Dt WSDISPLAY 4 +.Os +.Sh NAME +.Nm wsdisplay +.Nd generic display device support in wscons +.Sh SYNOPSIS +.Cd "wsdisplay* at ega? console ?" +(EGA display on ISA) +.Cd "wsdisplay* at vga? console ?" +(VGA display on ISA or PCI) +.Cd "wsdisplay* at pcdisplay? console ?" +(generic PC (ISA) display) +.Cd "wsdisplay* at tga? console ?" +(DEC TGA display, alpha only) +.Cd "wsdisplay* at pfb? console ?" +(PCI framebuffer, bebox only) +.Cd "wsdisplay0 at ofb? console ?" +(Open Firmware framebuffer, macppc only) +.Cd "wsdisplay* at nextdisplay? console ?" +(NeXT display) +.Cd "wsdisplay0 at smg0" +(VAXstation small monochrome display) +.Cd "wsdisplay* at ... kbdmux N" +.Pp +.Cd options WSDISPLAY_BORDER_COLOR=WSCOL_XXX +.Cd options WSDISPLAY_CUSTOM_BORDER +.Cd options WSDISPLAY_CUSTOM_OUTPUT +.Cd options WSDISPLAY_DEFAULTSCREENS=N +.Cd options WSDISPLAY_SCROLLSUPPORT +.Sh DESCRIPTION +The +.Nm +driver is an abstraction layer for display devices within the +.Xr wscons 4 +framework. +It attaches to the hardware specific display device driver and makes it +available as a text terminal or graphics interface. +.Pp +A display device can have the ability to display characters on it +(without the help of an X server), either directly by hardware or through +software putting pixel data into the display memory. +Such displays are called +.Dq emulating , +the +.Nm +driver will connect a terminal emulation module and provide a tty-like +software interface. +In contrary, non-emulating displays can only be used by special programs +like X servers. +.Pp +The +.Cd console +locator in the configuration line refers to the device's use as the output +part of the operating system console. +A device specification containing a positive value here will only match if +the device is in use as the system console. +(The console device selection in early system startup is not influenced.) +This way, the console device can be connected to a known wsdisplay device +instance. +(Naturally, only +.Dq emulating +display devices are usable as console.) +.Pp +The +.Cd kbdmux +locator in the configuration line refers to the +.Xr wsmux 4 +that will be used to get keyboard events. +If this locator is -1 no mux will be used. +.Pp +The logical unit of independent contents displayed on a display +(sometimes referred to as +.Dq virtual terminal ) +is called a +.Dq screen +here. +If the underlying device driver supports it, multiple screens can +be used on one display. +(As of this writing, only the +.Xr vga 4 +and the VAX +.Dq smg +display drivers provide this ability.) +Screens have different minor device numbers and separate tty instances. +One screen possesses the +.Dq focus , +this means it is visible and its tty device will get +the keyboard input. +(In some cases \- if no screen is set up or if a screen +was just deleted \- it is possible that no focus is present at all.) +The focus can be switched by either special keyboard input (typically +.Ao "Ctrl" Ac Ns \| Ns Ao "Alt" Ac Ns \| Ns Ao "F" Ns Ar "n" Ac , +.Ao "Stop" Ac Ns \| Ns Ao "F" Ns Ar "n" Ac +on Sun hardware, +.Ao "Command" Ac Ns \| Ns Ao "F" Ns Ar "n" Ac +on ADB keyboards) +or an ioctl command issued by a user program. +Screens are created and deleted through the +.Pa /dev/ttyEcfg +control device (preferably using the +.Xr wsconscfg 8 +utility). +Alternatively, the compile-time option +.Dv WSDISPLAY_DEFAULTSCREENS Ns = Ns Ar n +will also create (at autoconfiguration time) +.Ar n +initial screens of the display driver's default type with +the system's default terminal emulator. +.Ss Kernel options +The following kernel options are available to configure the behavior of the +.Nm +driver: +.Bl -tag -width xxxxxxxx +.It Cd options WSDISPLAY_BORDER_COLOR=WSCOL_XXX +Sets the border color at boot time. +Possible values are defined in +.Pa src/sys/dev/wscons/wsdisplayvar.h . +Defaults to +.Dv WSCOL_BLACK . +.It Cd options WSDISPLAY_CUSTOM_BORDER +Enables the +.Dv WSDISPLAYIO_GBORDER +and +.Dv WSDISPLAYIO_SBORDER +ioctls, which allow the customization of the border color from userland +(after boot). +See +.Xr wsconsctl 8 . +.It Cd options WSDISPLAY_CUSTOM_OUTPUT +Enables the +.Dv WSDISPLAYIO_GMSGATTRS +and +.Dv WSDISPLAYIO_SMSGATTRS +ioctls, which allow the customization of the console output and kernel +messages from userland (after boot). +See +.Xr wsconsctl 8 . +.It Cd options WSDISPLAY_DEFAULTSCREENS=N +Sets the number of virtual screens to allocate at boot time. +Useful for small root filesystems where the +.Xr wsconscfg 8 +utility is not wanted. +.It Cd options WSDISPLAY_SCROLLSUPPORT +Enables scrolling support. +The key combinations are +.Ao "Left\ Shift" Ac Ns \| Ns Ao "Page\ Up" Ac +and +.Ao "Left\ Shift" Ac Ns \| Ns Ao "Page\ Down" Ac +by default. +Please note that this function may not work under the system console and +is available depending on the framebuffer you are using. +.El +.Ss Ioctls +The following +.Xr ioctl 2 +calls are provided by the +.Nm +driver or by devices which use it. +Their definitions are found in +.In dev/wscons/wsconsio.h . +.Bl -tag -width Dv +.It Dv WSDISPLAYIO_GTYPE Pq Li int +Retrieve the type of the display. +The list of types is in +.In dev/wscons/wsconsio.h . +.It Dv WSDISPLAYIO_GET_FBINFO Pq Li "struct wsdisplayio_fbinfo" +Retrieve extended information about a framebuffer display, +including the framebuffer's pixel packing layout. +The returned structure is as follows: +.Bd -literal -offset indent +struct wsdisplayio_fbinfo { + uint64_t fbi_fbsize; + uint64_t fbi_fboffset; + uint32_t fbi_width; + uint32_t fbi_height; + uint32_t fbi_stride; + uint32_t fbi_bitsperpixel; + uint32_t fbi_pixeltype; + union _fbi_subtype { + struct _fbi_rgbmasks { + uint32_t red_offset; + uint32_t red_size; + uint32_t green_offset; + uint32_t green_size; + uint32_t blue_offset; + uint32_t blue_size; + uint32_t alpha_offset; + uint32_t alpha_size; + } fbi_rgbmasks; + struct _fbi_cmapinfo { + uint32_t cmap_entries; + } fbi_cmapinfo; + } fbi_subtype; + uint32_t fbi_flags; +}; +.Ed +.Pp +For a "true colour" display, the +.Va fbi_pixeltype +field contains +.Dv WSFB_RGB +and the +.Va fbi_rgbmasks +field contains the pixel packing layout. +For a colour indexed display, the +.Va fbi_pixeltype +field contains +.Dv WSFB_CI +and the +.Va fbi_cmapinfo +field contains the number of color map entries. +.It Dv WSDISPLAYIO_GINFO Pq Li "struct wsdisplay_fbinfo" +Retrieve basic information about a framebuffer display. +The returned structure is as follows: +.Bd -literal -offset indent +struct wsdisplay_fbinfo { + u_int height; + u_int width; + u_int depth; + u_int cmsize; +}; +.Ed +.Pp +The +.Va height +and +.Va width +members are counted in pixels. +The +.Va depth +member indicates the number of bits per pixel, and +.Va cmsize +indicates the number of color map entries accessible through +.Dv WSDISPLAYIO_GETCMAP +and +.Dv WSDISPLAYIO_PUTCMAP . +This call is likely to be unavailable on text-only displays. +.It Dv WSDISPLAYIO_GETCMAP Pq Li "struct wsdisplay_cmap" +Retrieve the current color map from the display. +This call needs the +following structure set up beforehand: +.Bd -literal -offset indent +struct wsdisplay_cmap { + u_int index; + u_int count; + u_char *red; + u_char *green; + u_char *blue; +}; +.Ed +.Pp +The +.Va index +and +.Va count +members specify the range of color map entries to retrieve. +The +.Va red , +.Va green , +and +.Va blue +members should each point to an array of +.Va count +.Vt u_char Ns No \^s . +On return, these will be filled in with the appropriate entries from the +color map. +On all displays that support this call, values range from 0 for minimum +intensity to 255 for maximum intensity, even if the display does not use +eight bits internally to represent intensity. +.It Dv WSDISPLAYIO_PUTCMAP Pq Li "struct wsdisplay_cmap" +Change the display's color map. +The argument structure is the same as for +.Dv WSDISPLAYIO_GETCMAP , +but +.Va red , +.Va green , +and +.Va blue +are taken as pointers to the values to use to set the color map. +This call is not available on displays with fixed color maps. +.It Dv WSDISPLAYIO_GVIDEO Pq Li int +Get the current state of the display's video output. +Possible values are: +.Bl -tag -width Dv +.It Dv WSDISPLAYIO_VIDEO_OFF +The display is blanked. +.It Dv WSDISPLAYIO_VIDEO_ON +The display is enabled. +.El +.It Dv WSDISPLAYIO_SVIDEO Pq Li int +Set the state of the display's video output. +See +.Dv WSDISPLAYIO_GVIDEO +above for possible values. +.It Dv WSDISPLAYIO_GCURPOS Pq Li "struct wsdisplay_curpos" +Retrieve the current position of the hardware cursor. +The returned structure +is as follows: +.Bd -literal -offset indent +struct wsdisplay_curpos { + u_int x, y; +}; +.Ed +.Pp +The +.Va x +and +.Va y +members count the number of pixels right and down, respectively, from +the top-left corner of the display to the hot spot of the cursor. +This call is not available on displays without a hardware cursor. +.It Dv WSDISPLAYOP_SCURPOS Pq Li "struct wsdisplay_curpos" +Set the current cursor position. +The argument structure, and its semantics, are the same as for +.Dv WSDISPLAYIO_GCURPOS . +This call is not available on displays without a hardware cursor. +.It Dv WSDISPLAYIO_GCURMAX Pq Li "struct wsdisplay_curpos" +Retrieve the maximum size of cursor supported by the display. +The +.Va x +and +.Va y +members of the returned structure indicate the maximum number of pixel rows +and columns, respectively, in a hardware cursor on this display. +This call is not available on displays without a hardware cursor. +.It Dv WSDISPLAYIO_GCURSOR Pq Li "struct wsdisplay_cursor" +Retrieve some or all of the hardware cursor's attributes. +The argument structure is as follows: +.Bd -literal -offset indent +struct wsdisplay_cursor { + u_int which; + u_int enable; + struct wsdisplay_curpos pos; + struct wsdisplay_curpos hot; + struct wsdisplay_cmap cmap; + struct wsdisplay_curpos size; + u_char *image; + u_char *mask; +}; +.Pp +.Ed +The +.Va which +member indicates which of the values the application requires to be returned. +It should contain the logical OR of the following flags: +.Bl -tag -width Dv +.It Dv WSDISPLAY_CURSOR_DOCUR +Get +.Va enable , +which indicates whether the cursor is currently displayed (non-zero) or +not (zero). +.It Dv WSDISPLAY_CURSOR_DOPOS +Get +.Va pos , +which indicates the current position of the cursor on the display, as +would be returned by +.Dv WSDISPLAYIO_GCURPOS . +.It Dv WSDISPLAY_CURSOR_DOHOT +Get +.Va hot , +which indicates the location of the +.Dq hot spot +within the cursor. +This is the point on the cursor whose position on the display is treated +as being the position of the cursor by other calls. +Its location is counted in pixels from the top-right corner of the cursor. +.It Dv WSDISPLAY_CURSOR_DOCMAP +Get +.Va cmap , +which indicates the current cursor color map. +Unlike in a call to +.Dv WSDISPLAYIO_GETCMAP , +.Va cmap +here need not have its +.Va index +and +.Va count +members initialized. +They will be set to 0 and 2 respectively by the call. +This means that +.Va cmap . Ns Va red , +.Va cmap . Ns Va green , +and +.Va cmap . Ns Va blue +must each point to at least enough space to hold two +.Vt u_char Ns No \^s . +.It Dv WSDISPLAY_CURSOR_DOSHAPE +Get +.Va size , image , +and +.Va mask . +These are, respectively, the dimensions of the cursor in pixels, the +bitmap of set pixels in the cursor and the bitmap of opaque pixels in +the cursor. +The format in which these bitmaps are returned, and hence the amount of +space that must be provided by the application, are device-dependent. +.It Dv WSDISPLAY_CURSOR_DOALL +Get all of the above. +.El +.Pp +The device may elect to return information that was not requested by the user, +so those elements of +.Li "struct wsdisplay_cursor" +which are pointers should be initialized to +.Dv NULL +if not otherwise used. +This call is not available on displays without a hardware cursor. +.It Dv WSDISPLAYIO_SCURSOR Pq Li "struct wsdisplay_cursor" +Set some or all of the hardware cursor's attributes. +The argument structure is the same as for +.Dv WSDISPLAYIO_GCURSOR . +The +.Va which +member specifies which attributes of the cursor are to be changed. +It should contain the logical OR of the following flags: +.Bl -tag -width Dv +.It Dv WSDISPLAY_CURSOR_DOCUR +If +.Va enable +is zero, hide the cursor. +Otherwise, display it. +.It Dv WSDISPLAY_CURSOR_DOPOS +Set the cursor's position on the display to +.Va pos , +the same as +.Dv WSDISPLAYIO_SCURPOS . +.It Dv WSDISPLAY_CURSOR_DOHOT +Set the +.Dq hot spot +of the cursor, as defined above, to +.Va hot . +.It Dv WSDISPLAY_CURSOR_DOCMAP +Set some or all of the cursor color map based on +.Va cmap . +The +.Va index +and +.Va count +elements of +.Va cmap +indicate which color map entries to set, and the entries themselves come from +.Va cmap . Ns Va red , +.Va cmap . Ns Va green , +and +.Va cmap . Ns Va blue . +.It Dv WSDISPLAY_CURSOR_DOSHAPE +Set the cursor shape from +.Va size , image , +and +.Va mask . +See above for their meanings. +.It Dv WSDISPLAY_CURSOR_DOALL +Do all of the above. +.El +.Pp +This call is not available on displays without a hardware cursor. +.It Dv WSDISPLAYIO_GMODE Pq Li u_int +Get the current mode of the display. +Possible results include: +.Bl -tag -width Dv +.It Dv WSDISPLAYIO_MODE_EMUL +The display is in emulating (text) mode. +.It Dv WSDISPLAYIO_MODE_MAPPED +The display is in mapped (graphics) mode. +.It Dv WSDISPLAYIO_MODE_DUMBFB +The display is in mapped (frame buffer) mode. +.El +.It Dv WSDISPLAYIO_SMODE Pq Li u_int +Set the current mode of the display. +For possible arguments, see +.Dv WSDISPLAYIO_GMODE . +.It Dv WSDISPLAYIO_LINEBYTES Pq Li u_int +Get the number of bytes per row, which may be the same as the number of pixels. +.It Dv WSDISPLAYIO_GMSGATTRS Pq Li struct wsdisplay_msgattrs +Get the attributes (colors and flags) used to print console messages, including +separate fields for default output and kernel output. +The returned structure is as follows: +.Bd -literal -offset indent +struct wsdisplay_msgattrs { + int default_attrs, default_bg, default_fg; + int kernel_attrs, kernel_bg, kernel_fg; +}; +.Ed +.Pp +The +.Va default_attrs +and +.Va kernel_attrs +variables are a combination of +.Dv WSATTR_ Ns Ar * +bits, and specify the attributes used to draw messages. +The +.Va default_bg , +.Va default_fg , +.Va kernel_bg +and +.Va kernel_fg +variables specify the colors used to print messages, being +.Sq _bg +for the background and +.Sq _fg +for the foreground; their values are one of all the +.Dv WSCOL_ Ns Ar * +macros available. +.It Dv WSDISPLAYIO_SMSGATTRS Pq Li struct wsdisplay_msgattrs +Set the attributes (colors and flags) used to print console messages, including +separate fields for default output and kernel output. +The argument structure is the same as for +.Dv WSDISPLAYIO_GMSGATTRS . +.It Dv WSDISPLAYIO_GBORDER Pq Li u_int +Retrieve the color of the screen border. +This number corresponds to an ANSI standard color. +.It Dv WSDISPLAYIO_SBORDER Pq Li u_int +Set the color of the screen border, if applicable. +This number corresponds to an ANSI standard color. +Not all drivers support this feature. +.It Dv WSDISPLAYIO_GETWSCHAR Pq Li struct wsdisplay_char +Gets a single character from the screen, specified by its position. +The structure used is as follows: +.Bd -literal -offset indent +struct wsdisplay_char { + int row, col; + uint16_t letter; + uint8_t background, foreground; + char flags; +}; +.Ed +.Pp +The +.Va row +and +.Va col +parameters are used as input; the rest of the structure is filled by the +ioctl and is returned to you. +.Va letter +is the ASCII code of the letter found at the specified position, +.Va background +and +.Va foreground +are its colors and +.Va flags +is a combination of +.Dv WSDISPLAY_CHAR_BRIGHT +and/or +.Dv WSDISPLAY_CHAR_BLINK . +.It Dv WSDISPLAYIO_PUTWSCHAR Pq Li struct wsdisplay_char +Puts a character on the screen. +The structure has the same meaning as described in +.Dv WSDISPLAY_GETWSCHAR , +although all of its fields are treated as input. +.\" Splash screen control +.It Dv WSDISPLAYIO_SSPLASH Pq Li u_int +Toggle the splash screen. +This call is only available with the +.Dv SPLASHSCREEN +kernel option. +.It Dv WSDISPLAYIO_GET_EDID Pq Li struct wsdisplayio_edid_info +Retrieve EDID data from a driver. +.Bd -literal -offset indent +struct wsdisplayio_edid_info { + uint32_t buffer_size; + uint32_t data_size; + void *edid_data; +}; +.Ed +The caller is responsible for allocating a buffer of at least 128 bytes +(the minimum size of an EDID block) and set data_size to its size. +If the EDID block is bigger the call will fail with +.Er EAGAIN +and the driver will set data_size to the required buffer size. +Otherwise the EDID block will be written into the buffer pointed +at by edid_data and data_size will be set to the number of bytes +written. +.It Dv WSDISPLAYIO_SETVERSION Pq Li "int" +Set the wscons_event protocol version. +The default is 0 for binary compatibility. +The latest version is +always available as +.Dv WSDISPLAYIO_EVENT_VERSION , +and is currently 1. +All new code should use a call similar to the below to ensure the +correct version is returned. +.Bd -literal -offset indent +int ver = WSDISPLAYIO_EVENT_VERSION; +if (ioctl(fd, WSDISPLAYIO_SETVERSION, &ver) == -1) + err(EXIT_FAILURE, "cannot set version"); +.Ed +.El +.Sh FILES +.Bl -tag -width "/dev/ttyEstat" -compact +.It Pa /dev/ttyE* +Terminal devices (per screen). +.It Pa /dev/ttyEcfg +Control device. +.It Pa /dev/ttyEstat +Status device. +.Pp +.It Pa /usr/include/dev/wscons/wsconsio.h +.El +.Sh SEE ALSO +.Xr ioctl 2 , +.\" .Xr ega 4 , +.Xr pcdisplay 4 , +.Xr tty 4 , +.Xr vga 4 , +.Xr wscons 4 , +.Xr wsconscfg 8 , +.Xr wsconsctl 8 , +.Xr wsfontload 8 , +.Xr wsdisplay 9 +.Sh BUGS +The +.Nm +code currently limits the number of screens on one display to 8. +.Pp +The terms +.Dq wscons +and +.Dq wsdisplay +are not cleanly distinguished in the code and in manual pages. +.Pp +.Dq Non-emulating +display devices are not tested. |
