History log of /freebsd-current/sys/dev/vt/vt.h
Revision Date Author Comments
# 162a2b85 24-Nov-2023 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): New bitblt_text variant making a copy before unlocking vt_buf

[Why]
In the DRM drivers and the integration with vt(4), we need to execute
DRM code outside of the vtbuf_lock. The reason is that this DRM code
acquires locks which can't be acquired when vtbuf_lock, an MTX_SPIN
mutex, is already held.

[How]
A vt(4) backend can now set the `vd_bitblt_after_vtbuf_unlock` flag to
true if it wants to be called outside of vt_buf_lock.

In this case, vt(4) uses an internal version of bitblt_text that uses
the `vd_drawn` arrays, plus a new `vd_pos_to_flush` array, to track
characters to draw/refresh. This internal version then uses the
backend's bitblt_bmp callback to draw the characters after vt_buf has
been unlocked.

Drawing borders and CPU logos is also deferred after the vt_buf lock is
released for the same reason.

We introduce another lock (a default mutex), only used when the
`vd_bitblt_after_vtbuf_unlock` flag is set, to replace part the role of
the vt_buf lock and manage concurrent calls to vt_flush().

The `SC_NO_CONSDRAWN` define is dropped because we now always need the
`vd_drawn` arrays.

Reviewed by: manu
Approved by: manu
Differential Revision: https://reviews.freebsd.org/D42057


# 95ee2897 16-Aug-2023 Warner Losh <imp@FreeBSD.org>

sys: Remove $FreeBSD$: two-line .h pattern

Remove /^\s*\*\n \*\s+\$FreeBSD\$$\n/


# 4d846d26 10-May-2023 Warner Losh <imp@FreeBSD.org>

spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD

The SPDX folks have obsoleted the BSD-2-Clause-FreeBSD identifier. Catch
up to that fact and revert to their recommended match of BSD-2-Clause.

Discussed with: pfg
MFC After: 3 days
Sponsored by: Netflix


# 29ab1945 14-Jan-2023 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): Return errors from `vt_{,de}allocate()`

This is useful to the DRM drivers to let them know if a device is
effectively used by the console.

Reviewed by: manu
Approved by: manu
Differential Revision: https://reviews.freebsd.org/D38089


# 90b89100 05-Oct-2022 Ivan Quitschal <tezeka@hotmail.com>

vt(4): When cutting a line, append a newline character.

While at it optimise "case 3" into a default.
This way there is no need to initialize the "mark" variable in the beginning,
because all cases set it.

MFC after: 1 week
Sponsored by: NVIDIA Networking
Differential Revision: https://reviews.freebsd.org/D36042


# 2cce9aa0 26-Sep-2022 Hans Petter Selasky <hselasky@FreeBSD.org>

vt(4): Make sure vt_switch_timer() has a sleepable context.

Fixes the following panic backtrace:

panic()
usbhid_sync_xfer()
usbhid_set_report()
hid_set_report()
hidbus_write()
hid_write()
hkbd_set_leds()
hkbd_ioctl_locked()
hkbd_ioctl_locked()
hkbd_ioctl()
kbdmux_ioctl()
vt_window_switch()
vt_switch_timer()

Differential Revision: https://reviews.freebsd.org/D36715
MFC after: 1 week
Sponsored by: NVIDIA Networking


# ff1c8af8 20-Sep-2021 Mitchell Horne <mhorne@FreeBSD.org>

vt: use TERMINAL_DECLARE_EARLY() macro

It simplifies the declaration of the driver structures a little. There
are no current consumers of this macro, in fact it looks like it was
added for exactly this purpose.

This decreases the scope of some variables, so rework the initialization
in vt_init_logos() such that it doesn't require them.

No functional change intended.

MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D34820


# 2533eca1 03-Nov-2021 Warner Losh <imp@FreeBSD.org>

vt(4): Connect to teken's TP_SETBELLPD

Add the glue needed to listen to TP_SETBELLPD which teken uses to
inform its client drivers about the results of parsing
\e[=<pitch>;<duration>B. It converts these to a Hz value for the
tone/pitch of the bell and a duration in ms. There's some loss of
precision because <pitch> in the escape seuquence is defined to be
(1193182 / pitch) Hz and <duration> is in 10ms units. Also note that
kbdcontrol also parses 'off' but then doesn't send the proper escape
sequence, leading me to wonder if that's another bug since teken
appears to parse that sequence properly and I've added code here to
treat that as the same as quiet or disabled.

In general, Hz from 100 to 2000 is good. Outside that range is possible,
but even at 100Hz the square wave is starting to sound bad and above
2000Hz the speaker may not respond.

Reviewed by: mav
Differential Revision: https://reviews.freebsd.org/D32620


# 9feff969 08-Aug-2021 Ed Maste <emaste@FreeBSD.org>

Remove "All Rights Reserved" from FreeBSD Foundation sys/ copyrights

These ones were unambiguous cases where the Foundation was the only
listed copyright holder (in the associated license block).

Sponsored by: The FreeBSD Foundation


# c4a0333b 31-Dec-2020 Kyle Evans <kevans@FreeBSD.org>

vt: restore tty when console is ungrabbed

When a break-to-debugger is triggered, kdb will grab the console and vt(4)
will generally switch back to ttyv0. If one issues a continue from the
debugger, then kdb will ungrab the console and the system rolls on.

This change adds a perhaps minor feature: when we're down to grab == 0 and
if vt actually switched away to ttyv0, switch back to the tty it was
previously on before the console was grabbed.

The justification behind this is that a typical flow is to work in
!ttyv0 to avoid console spam while occasionally dropping to ddb to inspect
system state before returning. This could easily enough be tossed behind
a sysctl or something if it's not generally appreciated, but I anticipate
indifference.

Reviewed by: ray
Differential Revision: https://reviews.freebsd.org/D27110


# d276d86e 01-Sep-2020 Mateusz Guzik <mjg@FreeBSD.org>

vt: clean up empty lines in .c and .h files


# e7fd9688 14-Jun-2020 Toomas Soome <tsoome@FreeBSD.org>

Move font related data structured to sys/font.c and update vtfontcvt

Prepare support to be able to handle font data in loader, consolidate
data structures to sys/font.h and update vtfontcvt.

vtfontcvt update is about to output set of glyphs in form of C source,
the implementation does allow to output compressed or uncompressed font
bitmaps.

Reviewed by: bcr
Differential Revision: https://reviews.freebsd.org/D24189


# 98f7cf02 28-May-2020 Jason A. Harmening <jah@FreeBSD.org>

vt(4): Add support for `vidcontrol -C'

Extract scrollback buffer initialization into a common routine, used both
during vt(4) init and in handling the CONS_CLRHIST ioctl.

PR: 224436
Reviewed by: emaste
Differential Revision: https://reviews.freebsd.org/D24815


# eee77063 20-Dec-2019 Kyle Evans <kevans@FreeBSD.org>

vt: store a pointer to the keyboard instead of index

This effectively reverts r355935, but is functionally equivalent. We gain no
benefit from storing the index and repeatedly fetching the keyboard with
`kbd_get_keyboard` when we need it. We'll be notified when it's going away
so we can clean up the pointer.

All existing references were trivially converted. Only once instance
actually needed the index.


# df1bc27a 25-Sep-2019 Toomas Soome <tsoome@FreeBSD.org>

vt: use colors from terminal emulator

Instead of hardcoded colors, use terminal state. This also means,
we need to record the pointer to terminal state with vtbuf.


# ee97b233 25-Aug-2018 Colin Percival <cperciva@FreeBSD.org>

Speed up vt(4) by keeping a record of the most recently drawn character and
the foreground and background colours. In bitblt_text functions, compare
values to this cache and don't re-draw the characters if they haven't changed.
When invalidating the display, clear this cache in order to force characters
to be redrawn; also force full redraws between suspend/resume pairs since odd
artifacts can otherwise result.

When scrolling the display (which is where most time is spent within the vt
driver) this yields a significant performance improvement if most lines are
less than the width of the terminal, since this avoids re-drawing blanks on
top of blanks.

(Note that "re-drawing" here includes writing to the VGA text mode buffer; on
virtualized systems this can be extremely slow since it triggers a glyph
being rendered onto a 640x480 screen).

On a c5.4xlarge EC2 instance (with emulated text mode VGA) this cuts the time
spent in vt(4) during the kernel boot from 1200 ms to 700ms; on my laptop
(with a 3200x1800 display) the corresponding time is reduced from 970 ms down
to 155 ms.

Reviewed by: imp, cem
Approved by: re (gjb)
Relnotes: Significant speedup in vt(4) and the system boot generally.
Differential Revision: https://reviews.freebsd.org/D16723


# c9a1264c 16-May-2018 Ed Maste <emaste@FreeBSD.org>

Clean up vt source whitespace issues


# 4e5a8fdb 16-May-2018 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): Resume vt_timer() in vtterm_post_input() only

There is no need to try to resume it after each smaller operations
(putchar, cursor_position, copy, fill).

The resume function already checks if the timer is armed before doing
anything, but it uses an atomic cmpset which is expensive. And resuming
the timer at the end of input processing is enough.

While here, we also skip timer resume if the input is for another
windows than the currently displayed one. I.e. if `ttyv0` is currently
displayed, any changes to `ttyv1` shouldn't resume the timer (which
would refresh `ttyv0`).

By doing the same benchmark as r333669, I get:
* vt(4), before r333669: 1500 ms
* vt(4), with this patch: 760 ms
* syscons(4): 700 ms


# 547e74a8 16-May-2018 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

teken, vt(4): New callbacks to lock the terminal once

... to process input, instead of inside each smaller operations such as
appending a character or moving the cursor forward.

In other words, before we were doing (oversimplified):

teken_input()
<for each input character>
vtterm_putchar()
VTBUF_LOCK()
VTBUF_UNLOCK()
vtterm_cursor_position()
VTBUF_LOCK()
VTBUF_UNLOCK()

Now, we are doing:

vtterm_pre_input()
VTBUF_LOCK()
teken_input()
<for each input character>
vtterm_putchar()
vtterm_cursor_position()
vtterm_post_input()
VTBUF_UNLOCK()

The situation was even worse when the vtterm_copy() and vtterm_fill()
callbacks were involved.

The new callbacks are:
* struct terminal_class->tc_pre_input()
* struct terminal_class->tc_post_input()

They are called in teken_input(), surrounding the while() loop.

The goal is to improve input processing speed of vt(4). As a benchmark,
here is the time taken to write a text file of 360 000 lines (26 MiB) on
`ttyv0`:

* vt(4), unmodified: 1500 ms
* vt(4), with this patch: 1200 ms
* syscons(4): 700 ms

This is on a Haswell laptop with a GENERIC-NODEBUG kernel.

At the same time, the locking is changed in the vt_flush() function
which is responsible to draw the text on screen. So instead of
(indirectly) using VTBUF_LOCK() just to read and reset the dirty area
of the internal buffer, the lock is held for about the entire function,
including the drawing part.

The change is mostly visible while content is scrolling fast: before,
lines could appear garbled while scrolling because the internal buffer
was accessed without locks (once the scrolling was finished, the output
was correct). Now, the scrolling appears correct.

In the end, the locking model is closer to what syscons(4) does.

Differential Revision: https://reviews.freebsd.org/D15302


# e1734edf 05-Dec-2017 Ed Maste <emaste@FreeBSD.org>

Implement "vidcontrol -h <history_size>" for vt(4)

PR: 210415
Submitted by: Siva Mahadevan
Reviewed by: ray (earlier)
MFC after: 1 month
Relnotes: yes
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D11814


# 718cf2cc 27-Nov-2017 Pedro F. Giffuni <pfg@FreeBSD.org>

sys/dev: further adoption of SPDX licensing ID tags.

Mainly focus on files that use BSD 2-Clause license, however the tool I
was using misidentified many licenses so this was mostly a manual - error
prone - task.

The Software Package Data Exchange (SPDX) group provides a specification
to make it easier for automated tools to detect and summarize well known
opensource licenses. We are gradually adopting the specification, noting
that the tags are considered only advisory and do not, in any way,
superceed or replace the license texts.


# f41bde66 19-Jul-2016 Conrad Meyer <cem@FreeBSD.org>

Increase vt(4) framebuffer maximum size

And rename "DEFAULT" constants to the more accurate "MAX."

PR: 210382
Submitted by: Felix <felixphew0 at gmail.com>
Reviewed by: wblock, cem
Tested by: Dave Cottlehuber <dch at skunkwerks.at>


# 15d449a5 21-Aug-2015 Conrad Meyer <cem@FreeBSD.org>

vt_cpulogos: Resize all terms/windows when tearing down logos

PR: 202288 (partial)
Tested by: Jakob Alvermark
Reviewed by: ed
Approved by: markj (mentor)
Sponsored by: EMC / Isilon Storage Division
Differential Revision: https://reviews.freebsd.org/D3388


# ec6b1f6a 17-Aug-2015 Marcel Moolenaar <marcel@FreeBSD.org>

Support frame buffers that are larger than the default screen
size as defined by VT_FB_DEFAULT_WIDTH and VT_FB_DEFAULT_HEIGHT
(at this time 2048x1200). The default is really a max. We cap
the height and width to those defaults and position the screen
in the center of the frame buffer.

Ideally we use a bigger font to utility the entire real estate
that is the frame buffer, but that's seen as an improvement over
making it work first.

PR: 193745


# 75ac3a73 21-Jul-2015 Conrad Meyer <cem@FreeBSD.org>

vt: Draw logos per CPU core

This feature is inspired by another Unix-alike OS commonly found on
airplane headrests.

A number of beasties[0] are drawn at top of framebuffer during boot,
based on the number of active SMP CPUs[1]. Console buffer output
continues to scroll in the screen area below beastie(s)[2].

After some time[3] has passed, the beasties are erased leaving the
entire terminal for use.

Includes two 80x80 vga16 beastie graphics and an 80x80 vga16 orb
graphic. (The graphics are RLE compressed to save some space -- 3x 3200
bytes uncompressed, or 4208 compressed.)

[0]: The user may select the style of beastie with

kern.vt.splash_cpu_style=(0|1|2)

[1]: Or the number may be overridden with tunable kern.vt.splash_ncpu.
[2]: https://www.youtube.com/watch?v=UP2jizfr3_o
[3]: Configurable with kern.vt.splash_cpu_duration (seconds, def. 10).

Differential Revision: https://reviews.freebsd.org/D2181
Reviewed by: dumbbell, emaste
Approved by: markj (mentor)
MFC after: 2 weeks


# bcfb2e3d 21-Jul-2015 Conrad Meyer <cem@FreeBSD.org>

vt: De-static VT_SYSCTL_INT-defined objects

Explicitly mark existing VT_SYSCTL_INTs static. This is in preparation for
D2181.

Reviewed by: dumbbell, emaste
Approved by: markj (mentor)
MFC after: 1 week


# e4a5ee71 08-May-2015 Hans Petter Selasky <hselasky@FreeBSD.org>

The "SYSCTL_INT()" default value is only used for read only SYSCTLs
and is not applicable unless the integer pointer is NULL. Set it to
zero to avoid confusion. While at it remove extra semicolon at the end
of the "VT_SYSCTL_INT()" macro.

MFC after: 1 week


# 76e2f976 28-Feb-2015 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): Add support to "downgrade" from eg. vt_fb to vt_vga

The main purpose of this feature is to be able to unload a KMS driver.

When going back from the current vt(4) backend to the previous backend,
the previous backend is reinitialized with the special VDF_DOWNGRADE
flag set. Then the current driver is terminated with the new "vd_fini"
callback.

In the case of vt_fb and vt_vga, this allows the former to pass the
vgapci device vt_fb used to vt_vga so the device can be rePOSTed.

Differential Revision: https://reviews.freebsd.org/D687


# 6dfa4578 27-Jan-2015 Andriy Gapon <avg@FreeBSD.org>

vt(4): Use power_{suspend,resume} event handlers to implement
suspend/resume

The goal is to avoid that the vt(4) resume happens before the video
display is resumed. The original patch was provided by Andriy Gapon.

This new patch registers the handlers in vt_upgrade(). This is done
once, thanks to the VDF_ASYNC flag. I abused this flag because it was
already abused by the keyboard allocation. The event handlers then call
the backend if it provides callbacks for suspend/resume.

Differential Revision: https://reviews.freebsd.org/D1004
On behalf of: dumbbell
MFC after: 2 weeks


# a09a539f 26-Dec-2014 Ed Maste <emaste@FreeBSD.org>

Support ALT_BREAK_TO_DEBUGGER in vt(4)

Submitted by: Andre Albsmeier on -hackers


# 0d265707 04-Nov-2014 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): Support syscons' SC_HISTORY_SIZE to configure history size

Therefore, to set histry size to 2000 lines, add the following line to
your kernel configuration file:
options SC_HISTORY_SIZE=2000

The default history remains at 500 lines.

MFC after: 1 week


# 61220c0d 02-Oct-2014 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): Save/restore keyboard mode & LED states when switching window

Add new functions to manipulate these mode & state, instead of calling
kbdd_ioctl() everyhere.

This fixes at least two bugs:

1. The state of the Scroll Lock LED and the state of scroll mode
could be out-of-sync. For instance, if one enables scroll mode on
window #1 and switches to window #2, the LED would remain on, but
the window wouldn't be in scroll mode.

Similarily, when switching between a console and an X.Org
session, the LED states could be inconsistent with the real
state.

2. When exiting from an X.Org session, the user could be unable to
type anything. The workaround was to switch to another console
window and come back.

Differential Revision: https://reviews.freebsd.org/D821
Reviewed by: ray@
Approved by: ray@
Tested by: kwm@
MFC after: 3 days


# c3a05e54 19-Sep-2014 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): Remove vt_buf->vb_dirtymask

This structure and the associated functions were unused since the
implementation of vd_bitblt_text_t callbacks.

MFC after: 3 days


# 4f4b93ae 12-Sep-2014 Aleksandr Rybalko <ray@FreeBSD.org>

Switch vt(4) to traditional behaviour with copy-paste same as syscons(4) do.
(forgetted in last commit)

Reviewed by: dumbbell (as D755)
MFC after: 1 week


# 8a6a5892 09-Sep-2014 Aleksandr Rybalko <ray@FreeBSD.org>

Revert r269474. Special keyboard combinations should be handled by separate
sysctls.


# b7fe4961 29-Aug-2014 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): Change vb_history_size from "int" to "unsigned int"

CID: 1230002, 1230003
MFC after: 1 week


# 3e206539 27-Aug-2014 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): Add cngrab() and cnungrab() callbacks

They are used when a panic occurs or when entering a DDB session for
instance.

cngrab() forces a vt-switch to the console window, no matter if the
original window is another terminal or an X session. However, cnungrab()
doesn't vt-switch back to the original window currently.

MFC after: 1 week


# d3773c6e 27-Aug-2014 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): Implement basic support for KDSETMODE ioctl

With the current implementation, this allows an X11 server to tell
the console it switches a particular window in "graphics mode". This
information is used by the mouse handling code to ignore sysmouse events
in the window taken by the X server: only him should receive those
events.

Reported by: flo@, glebius@, kan@
Tested by: flo@
Reviewed by: kan@
MFC after: 1 week


# 83fbb296 25-Aug-2014 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): Store a rectangle for the drawable area, not just the top-left corner

This allows backends to verify they do not draw outside of this area.
This fixes a bug in vt_vga where the text was happily drawn over the
right and bottom margins, when using the Gallant font.

MFC after: 1 week


# 9de6b2c5 24-Aug-2014 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): Remove vd_bitbltchr_t

It's replaced by vd_bitblt_text_t, which gives more context to the
backend and allows it to perform more efficiently when redrawing a given
area.

MFC after: 1 week


# 631bb572 23-Aug-2014 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): Add vd_bitblt_bmp_t callback

The code was already there in all backends, we just expose it. This is
used to display the splash screen.

MFC after: 1 week


# 946d0288 23-Aug-2014 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): Fix cursor handling in vt_flush()

There were situations where the cursor was not erased/redrawn or its
position was marked as dirty even though it's not displayed. The code is
now more straightforward.

At the same, add a function to determine if the cursor covers a given
area. This is used by backends to know if they need to draw the cursor.

This new function should be paired with a new state in struct vt_device,
called vd_mshown, which indicates if the cursor should be displayed.
This again simplifies vd_bitblt_text_t callback's API.

MFC after: 1 week


# 82276bbb 22-Aug-2014 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): Use the actual size of the mouse when marking its position as dirty

This fixes a bug where part of the cursor was not erased.

MFC after: 1 week


# ccd5615a 22-Aug-2014 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): The offset to center the text area is per-window now

The previous global offset, based on the last loaded font, had no
meaning for other windows. This caused a shifted text area, often partly
out-of-screen.

MFC after: 1 week


# ab06c776 22-Aug-2014 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): Give the window to vd_bitblt_text_t callback

... instead of both the buffer and the font. Again, this simplifies the
API.

MFC after: 1 week


# 3235c9eb 22-Aug-2014 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): Store cursor bitmap & colors in struct vt_device

This removes the need to specify them to each call to vd_bitblt_text_t
and, therefore, simplifies the API.

MFC after: 1 week


# bdcaf97c 22-Aug-2014 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): Add new vd_bitblt_text_t callback, and implement it for vt_vga

Compared to the deprecated vd_bitbltchr_t callback, vd_bitblt_text_t
receives:
o the whole text buffer
o the dirty area
o the mouse cursor (map, position, colors)

This allows the backend to perform optimization on how to draw things.
The goal is to remove vd_bitbltchr_t and vd_putchar_t, once all driver
are converted (only vt_vga is included in this commit).

In vt_vga, this allows to draw the text and the cursor in one pass,
without ever reading from video memory (because it has all the context).
The main benefit is the speed improvement: no more slideshow during
boot!

Other bugs fixed in vt_vga are:
o left-most characters are drawn properly (the left-most pixels were
missing with bold characters and some wide letters such as 'm')
o no more black square around the cursor
o no cursor flickering when the text is scrolling

There are still many problems to fix: the known issues are marked with
"FIXME" inside the code.

MFC after: 1 week


# 02ebdd50 21-Aug-2014 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): Rename the "mouse_cursor" structure to "vt_mouse_cursor"

At the same time, "w" and "h" members are now called "width" and
"height". The goal is to have a more "public" structure, because it will
soon be passed as argument to a new callback, replacing vd_bitbltchr_t.

MFC after: 1 week


# c6e1a987 21-Aug-2014 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): Constify vt_buf argument of vtbuf_iscursor()

MFC after: 1 week


# 52ff33d9 21-Aug-2014 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): Pause the flush timer while swithing window

This fixes bad looking refresh when switching window: squares instead
of text, flashing screen, and so on. In the worst case, vt_flush() came
at a very inappropriate timing and the screen was not refreshed at all
(leaving squares all over the place).

This doesn't fix the flickering of the screen with vt_vga, because the
sync signal is temporarily stopped and the video memory is cleared.

MFC after: 1 week


# 608b7cea 21-Aug-2014 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>

vt(4): If the cursor didn't move, don't mark its position as dirty

Currently, this has no effect, because the cursor is always redrawn
anyway. But this will be useful after improvements to the vd_bitbltchr_t
callback API.

The vt_device structure members used to store the position of the cursor
as of the last redraw are renamed from vd_mdirty{x,y} to vd_mold{x,y}.
The associated comment is fixed too. Also, their value is now expressed
in pixels, not in character columns/row.

MFC after: 1 week


# 0f3ec4da 07-Aug-2014 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Retire vd_maskbitbltchr. The same functionality can be obtained by testing
for mask != NULL in vd_bitbltchr, which all implementations of vd_bitbltchr()
were doing anyway.


# 45dc3700 03-Aug-2014 Aleksandr Rybalko <ray@FreeBSD.org>

Allow to disable some special key combinations handled by vt(4), like debug
request, reboot request.

Requested by: Claude Buisson

Sponsored by: The FreeBSD Foundation


# 3f71a6b8 28-Jul-2014 Aleksandr Rybalko <ray@FreeBSD.org>

Remove unused macro VT_CONSDEV_DECLARE. Join console device now declared in one
place.

MFC after: 1 week
Sponsored by: The FreeBSD Foundation


# af3b2549 27-Jun-2014 Hans Petter Selasky <hselasky@FreeBSD.org>

Pull in r267961 and r267973 again. Fix for issues reported will follow.


# 37a107a4 27-Jun-2014 Glen Barber <gjb@FreeBSD.org>

Revert r267961, r267973:

These changes prevent sysctl(8) from returning proper output,
such as:

1) no output from sysctl(8)
2) erroneously returning ENOMEM with tools like truss(1)
or uname(1)
truss: can not get etype: Cannot allocate memory


# 7344ee18 27-Jun-2014 Marius Strobl <marius@FreeBSD.org>

In order to get vt(4) a bit closer to the feature set provided by sc(4),
implement options TERMINAL_{KERN,NORM}_ATTR. These are aliased to
SC_{KERNEL_CONS,NORM}_ATTR and like these latter, allow to change the
default colors of normal and kernel text respectively.
Note on the naming: Although affecting the output of vt(4), technically
kern/subr_terminal.c is primarily concerned with changing default colors
so it would be inconsistent to term these options VT_{KERN,NORM}_ATTR.
Actually, if the architecture and abstraction of terminal+teken+vt would
be perfect, dev/vt/* wouldn't be touched by this commit at all.

Reviewed by: emaste
MFC after: 3 days
Sponsored by: Bally Wulff Games & Entertainment GmbH


# 3da1cf1e 27-Jun-2014 Hans Petter Selasky <hselasky@FreeBSD.org>

Extend the meaning of the CTLFLAG_TUN flag to automatically check if
there is an environment variable which shall initialize the SYSCTL
during early boot. This works for all SYSCTL types both statically and
dynamically created ones, except for the SYSCTL NODE type and SYSCTLs
which belong to VNETs. A new flag, CTLFLAG_NOFETCH, has been added to
be used in the case a tunable sysctl has a custom initialisation
function allowing the sysctl to still be marked as a tunable. The
kernel SYSCTL API is mostly the same, with a few exceptions for some
special operations like iterating childrens of a static/extern SYSCTL
node. This operation should probably be made into a factored out
common macro, hence some device drivers use this. The reason for
changing the SYSCTL API was the need for a SYSCTL parent OID pointer
and not only the SYSCTL parent OID list pointer in order to quickly
generate the sysctl path. The motivation behind this patch is to avoid
parameter loading cludges inside the OFED driver subsystem. Instead of
adding special code to the OFED driver subsystem to post-load tunables
into dynamically created sysctls, we generalize this in the kernel.

Other changes:
- Corrected a possibly incorrect sysctl name from "hw.cbb.intr_mask"
to "hw.pcic.intr_mask".
- Removed redundant TUNABLE statements throughout the kernel.
- Some minor code rewrites in connection to removing not needed
TUNABLE statements.
- Added a missing SYSCTL_DECL().
- Wrapped two very long lines.
- Avoid malloc()/free() inside sysctl string handling, in case it is
called to initialize a sysctl from a tunable, hence malloc()/free() is
not ready when sysctls from the sysctl dataset are registered.
- Bumped FreeBSD version to indicate SYSCTL API change.

MFC after: 2 weeks
Sponsored by: Mellanox Technologies


# c3586380 18-Jun-2014 Aleksandr Rybalko <ray@FreeBSD.org>

syscons(4) and vt(4) can be built together now.

MFC after: 1 week
Sponsored by: The FreeBSD Foundation


# bfc00339 03-Jun-2014 Aleksandr Rybalko <ray@FreeBSD.org>

Fix case when vt(4) started w/o driver assigned.
o Always init locks and cv ASAP.
o Initialize driver-independent parts even if driver probing fail.
o Allow to call vt_upgrade anytime, for later loaded drivers.
o New window flag VWF_READY, to track if window already initialized.
Other updates:
o Pass vd as a cookie for kbd_allocate.
o Do not blank window on driver replacement.

Tested by: hselasky (RPi), emaste(VGA, EFIFB, KMS), me

MFC after: 7 days
Sponsored by: The FreeBSD Foundation


# 16aa1f09 08-May-2014 Aleksandr Rybalko <ray@FreeBSD.org>

Hide debug messages under VT_DEBUG.

Sponsored by: The FreeBSD Foundation


# 90fdc1c6 05-May-2014 Aleksandr Rybalko <ray@FreeBSD.org>

Create dataset for vt(4) drivers.

Sponsored by: The FreeBSD Foundation


# f06a8166 05-May-2014 Aleksandr Rybalko <ray@FreeBSD.org>

Define a new method for probing vt(4) driver before attach it at early stage.

Sponsored by: The FreeBSD Foundation


# b2d52f78 26-Apr-2014 Nathan Whitehorn <nwhitehorn@FreeBSD.org>

Increase the maximum framebuffer size to more reasonable values reflecting
the high-resolution boot consoles present on Open Firmware and EFI systems.


# 1da9f0d7 28-Mar-2014 Aleksandr Rybalko <ray@FreeBSD.org>

o Add new vd_driver method to do bitblt with mask, named vd_maskbitbltchr.
o Move vd_bitbltchr vga's driver method to vd_maskbitbltchr.
o Implement new vd_bitbltchr method for vga driver. (It do single write for 8
pixels, have to be a bit faster).

MFC after: 7 days
Sponsored by: The FreeBSD Foundation


# 9e497e7b 06-Feb-2014 Aleksandr Rybalko <ray@FreeBSD.org>

Add two new vt(9) driver methods: vd_drawrect and vd_setpixel.
Implement vd_drawrect and vd_setpixel for vt_fb driver.

Sponsored by: The FreeBSD Foundation


# 650c134f 25-Dec-2013 Aleksandr Rybalko <ray@FreeBSD.org>

Use statndard (syscons) way to disable bell.

Testesd by: markj

Sponsored by: The FreeBSD Foundation


# 7a1a32c4 23-Dec-2013 Aleksandr Rybalko <ray@FreeBSD.org>

o Add virtual terminal mmap request handler.
o Forward termianl framebuffer ioctl to fbd.
o Forward terminal mmap request to fbd.
o Move inclusion of sys/conf.h to vt.h.

Sponsored by: The FreeBSD Foundation


# 41fb0665 21-Dec-2013 Ed Maste <emaste@FreeBSD.org>

Support double-width characters in vt(9)

Normal and bold fonts each have a glyph map for single or left half-
glyphs, and right half glyphs. The flag TF_CJK_RIGHT in term_char_t
requests the right half-glyph.

Reviewed by: ed@
Sponsored by: The FreeBSD Foundation


# d454a052 20-Dec-2013 Aleksandr Rybalko <ray@FreeBSD.org>

Set mouse level per window, instead of global.

Sponsored by: The FreeBSD Foundation


# 0a036e52 19-Dec-2013 Aleksandr Rybalko <ray@FreeBSD.org>

Enable mouse support for terminal clients (like dialog(1)).

Sponsored by: The FreeBSD Foundation


# 00f4f023 10-Dec-2013 Aleksandr Rybalko <ray@FreeBSD.org>

Break build with error in case when both syscons and newcons are enabled.

Sponsored by: The FreeBSD Foundation


# c323f803 09-Dec-2013 Aleksandr Rybalko <ray@FreeBSD.org>

o Compat options have to be defined before sys/ioccom.h included, so move
inclusion of right after sys/param.h.
o Only vt_core module use compat options, move it from common header to module.

Reported by: Larry Rosenman ler at lerctr dot org

Sponsored by: The FreeBSD Foundation


# 0f49db6e 09-Dec-2013 Aleksandr Rybalko <ray@FreeBSD.org>

Respect SC_NO_CUTPASTE option. It disable mouse cursor and cut/paste support
for vt(9). Note: /dev/sysmouse not affected.

Sponsored by: The FreeBSD Foundation


# 37fd54ff 08-Dec-2013 Aleksandr Rybalko <ray@FreeBSD.org>

o Build syscons(9)'s splash support if both sc and splash are enabled.
o Include opt_splash.h for vt(9) to know when splash device is enabled.
o Build logo_freebsd.c only if splash and vt are enabled.
o Include opt_compat.h to know when we have to respect compatibility.

Sponsored by: The FreeBSD Foundation


# 27cf7d04 05-Dec-2013 Aleksandr Rybalko <ray@FreeBSD.org>

Merge VT(9) project (a.k.a. newcons).

Reviewed by: nwhitehorn
MFC_to_10_after: re approval

Sponsored by: The FreeBSD Foundation