mbox series

[00/45] tty: vt: cleanup and documentation

Message ID 20240118075756.10541-1-jirislaby@kernel.org
Headers show
Series tty: vt: cleanup and documentation | expand

Message

Jiri Slaby Jan. 18, 2024, 7:57 a.m. UTC
Push the console code (vt.c, vt.h, console.h, ...) into a bit more
maintainable state. Especially all around consw structure and document
it.

CSI parser is also a bit cleaned up. More to follow some time in the
next round.

Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: dri-devel@lists.freedesktop.org
Cc: Helge Deller <deller@gmx.de>
Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: linux-doc@vger.kernel.org
Cc: linux-fbdev@vger.kernel.org
Cc: linux-parisc@vger.kernel.org
Cc: Martin Hostettler <textshell@uchuujin.de>

Jiri Slaby (SUSE) (45):
  vgacon: inline vc_scrolldelta_helper() into vgacon_scrolldelta()
  fbcon: make display_desc a static array in fbcon_startup()
  tty: vt: fix 20 vs 0x20 typo in EScsiignore
  tty: vt: expect valid vc when in tty ops
  tty: vt: pass proper pointers from tioclinux()
  tty: vt: push console lock from tioclinux() down to 2 functions
  tty: vt: pass vc_resize_user as a parameter
  tty: vt: make vc_is_sel()'s vc const
  tty: vt: define an enum for CSI+m codes
  tty: vt: use case ranges for CSI+m fg/bg colors
  tty: vt: define an enum for CSI+J codes
  tty: vt: reflow csi_J()
  tty: vt: define an enum for CSI+K codes
  tty: vt: reflow csi_K()
  tty: vt: pass vpar as unsigned to csi_J() and csi_K()
  tty: vt: define an enum for ascii characters
  tty: vt: remove extern from functions in selection.h
  tty: vt: make consw::con_debug_*() return void
  tty: vt: make init parameter of consw::con_init() a bool
  tty: vt: sanitize arguments of consw::con_clear()
  tty: vt: remove checks for count in consw::con_clear() implementations
  tty: vt: add con_putc() helper
  tty: vt: eliminate unneeded consw::con_putc() implementations
  tty: vt: sanitize consw::con_putc() parameters
  tty: vt: sanitize consw::con_putcs() parameters
  consoles: use if instead of switch-case in consw::con_cursor()
  fbdev/core: simplify cursor_state setting in fbcon_ops::cursor()
  tty: vt: remove CM_* constants
  tty: vt: make consw::con_switch() return a bool
  tty: vt: stop using -1 for blank mode in consw::con_blank()
  tty: vt: use VESA blanking constants
  tty: vt: use enum for VESA blanking modes
  tty: vt: make types around consw::con_blank() bool
  tty: vt: make font of consw::con_font_set() const
  tty: vt: make consw::con_font_default()'s name const
  tty: vt: change consw::con_set_origin() return type
  fbcon: remove consw::con_screen_pos()
  tty: vt: remove consw::con_screen_pos()
  tty: vt: make types of screenpos() more consistent
  fbcon: remove fbcon_getxy()
  tty: vt: remove consw::con_getxy()
  tty: vt: remove unused consw::con_flush_scrollback()
  tty: vt: document the rest of struct consw
  tty: vt: fix up kernel-doc
  Documentation: add console.rst

 Documentation/driver-api/tty/console.rst |  45 ++
 Documentation/driver-api/tty/index.rst   |   1 +
 drivers/tty/vt/selection.c               |  43 +-
 drivers/tty/vt/vt.c                      | 587 +++++++++++------------
 drivers/tty/vt/vt_ioctl.c                |   6 +-
 drivers/video/console/dummycon.c         |  38 +-
 drivers/video/console/mdacon.c           |  43 +-
 drivers/video/console/newport_con.c      |  69 +--
 drivers/video/console/sticon.c           |  79 ++-
 drivers/video/console/vgacon.c           | 150 +++---
 drivers/video/fbdev/core/bitblit.c       |  13 +-
 drivers/video/fbdev/core/fbcon.c         | 123 ++---
 drivers/video/fbdev/core/fbcon.h         |   4 +-
 drivers/video/fbdev/core/fbcon_ccw.c     |  13 +-
 drivers/video/fbdev/core/fbcon_cw.c      |  13 +-
 drivers/video/fbdev/core/fbcon_ud.c      |  13 +-
 drivers/video/fbdev/core/tileblit.c      |   4 +-
 include/linux/console.h                  | 132 ++---
 include/linux/console_struct.h           |   1 -
 include/linux/selection.h                |  56 +--
 include/linux/vt_kern.h                  |  12 +-
 include/uapi/linux/fb.h                  |   5 +-
 22 files changed, 725 insertions(+), 725 deletions(-)
 create mode 100644 Documentation/driver-api/tty/console.rst

Comments

Thomas Zimmermann Jan. 18, 2024, 8:30 a.m. UTC | #1
Hi

Am 18.01.24 um 08:57 schrieb Jiri Slaby (SUSE):
> There are VESA blanking constants defined in console.h already. So use
> them in the console code instead of constant values.

These constants also exist in include/uapi/linux/fb.h. It would be nice 
to find a common header where they can be shared.

Best regards
Thomas

> 
> Signed-off-by: Jiri Slaby (SUSE) <jirislaby@kernel.org>
> Cc: Helge Deller <deller@gmx.de>
> Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
> Cc: linux-fbdev@vger.kernel.org
> Cc: dri-devel@lists.freedesktop.org
> Cc: linux-parisc@vger.kernel.org
> ---
>   drivers/tty/vt/vt.c                 | 9 +++++----
>   drivers/video/console/newport_con.c | 2 +-
>   drivers/video/console/sticon.c      | 2 +-
>   drivers/video/console/vgacon.c      | 6 +++---
>   4 files changed, 10 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
> index 279f802aa222..6f46fefedcfb 100644
> --- a/drivers/tty/vt/vt.c
> +++ b/drivers/tty/vt/vt.c
> @@ -4334,7 +4334,7 @@ static int set_vesa_blanking(u8 __user *mode_user)
>   		return -EFAULT;
>   
>   	console_lock();
> -	vesa_blank_mode = (mode < 4) ? mode : 0;
> +	vesa_blank_mode = (mode < 4) ? mode : VESA_NO_BLANKING;
>   	console_unlock();
>   
>   	return 0;
> @@ -4361,7 +4361,7 @@ void do_blank_screen(int entering_gfx)
>   	if (entering_gfx) {
>   		hide_cursor(vc);
>   		save_screen(vc);
> -		vc->vc_sw->con_blank(vc, 1, 1);
> +		vc->vc_sw->con_blank(vc, VESA_VSYNC_SUSPEND, 1);
>   		console_blanked = fg_console + 1;
>   		blank_state = blank_off;
>   		set_origin(vc);
> @@ -4382,7 +4382,8 @@ void do_blank_screen(int entering_gfx)
>   
>   	save_screen(vc);
>   	/* In case we need to reset origin, blanking hook returns 1 */
> -	i = vc->vc_sw->con_blank(vc, vesa_off_interval ? 1 : (vesa_blank_mode + 1), 0);
> +	i = vc->vc_sw->con_blank(vc, vesa_off_interval ? VESA_VSYNC_SUSPEND :
> +				 (vesa_blank_mode + 1), 0);
>   	console_blanked = fg_console + 1;
>   	if (i)
>   		set_origin(vc);
> @@ -4433,7 +4434,7 @@ void do_unblank_screen(int leaving_gfx)
>   	}
>   
>   	console_blanked = 0;
> -	if (vc->vc_sw->con_blank(vc, 0, leaving_gfx))
> +	if (vc->vc_sw->con_blank(vc, VESA_NO_BLANKING, leaving_gfx))
>   		/* Low-level driver cannot restore -> do it ourselves */
>   		update_screen(vc);
>   	if (console_blank_hook)
> diff --git a/drivers/video/console/newport_con.c b/drivers/video/console/newport_con.c
> index 039d1c9937d2..ad3a09142770 100644
> --- a/drivers/video/console/newport_con.c
> +++ b/drivers/video/console/newport_con.c
> @@ -480,7 +480,7 @@ static int newport_blank(struct vc_data *c, int blank, int mode_switch)
>   {
>   	unsigned short treg;
>   
> -	if (blank == 0) {
> +	if (blank == VESA_NO_BLANKING) {
>   		/* unblank console */
>   		treg = newport_vc2_get(npregs, VC2_IREG_CONTROL);
>   		newport_vc2_set(npregs, VC2_IREG_CONTROL,
> diff --git a/drivers/video/console/sticon.c b/drivers/video/console/sticon.c
> index f3bb48a0e980..817b89c45e81 100644
> --- a/drivers/video/console/sticon.c
> +++ b/drivers/video/console/sticon.c
> @@ -300,7 +300,7 @@ static bool sticon_switch(struct vc_data *conp)
>   
>   static int sticon_blank(struct vc_data *c, int blank, int mode_switch)
>   {
> -    if (blank == 0) {
> +    if (blank == VESA_NO_BLANKING) {
>   	if (mode_switch)
>   	    vga_is_gfx = 0;
>   	return 1;
> diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c
> index 5025ab501f02..910dc73874b7 100644
> --- a/drivers/video/console/vgacon.c
> +++ b/drivers/video/console/vgacon.c
> @@ -800,10 +800,10 @@ static void vga_pal_blank(struct vgastate *state)
>   static int vgacon_blank(struct vc_data *c, int blank, int mode_switch)
>   {
>   	switch (blank) {
> -	case 0:		/* Unblank */
> +	case VESA_NO_BLANKING:		/* Unblank */
>   		if (vga_vesa_blanked) {
>   			vga_vesa_unblank(&vgastate);
> -			vga_vesa_blanked = 0;
> +			vga_vesa_blanked = VESA_NO_BLANKING;
>   		}
>   		if (vga_palette_blanked) {
>   			vga_set_palette(c, color_table);
> @@ -813,7 +813,7 @@ static int vgacon_blank(struct vc_data *c, int blank, int mode_switch)
>   		vga_is_gfx = false;
>   		/* Tell console.c that it has to restore the screen itself */
>   		return 1;
> -	case 1:		/* Normal blanking */
> +	case VESA_VSYNC_SUSPEND:	/* Normal blanking */
>   		if (!mode_switch && vga_video_type == VIDEO_TYPE_VGAC) {
>   			vga_pal_blank(&vgastate);
>   			vga_palette_blanked = true;
Jiri Slaby Jan. 18, 2024, 8:52 a.m. UTC | #2
On 18. 01. 24, 9:41, Thomas Zimmermann wrote:
> Is it hard to get a new UAPI header accepted (honest question)?

Not at all, IMO. The header just needs to be correct™ as it would be set 
in stone once released.

thanks,
Geert Uytterhoeven Jan. 18, 2024, 8:56 a.m. UTC | #3
Hi Jiri,

On Thu, Jan 18, 2024 at 9:03 AM Jiri Slaby (SUSE) <jirislaby@kernel.org> wrote:
> The 'init' parameter of consw::con_init() is true for the first call of
> the hook on a particular console. So make the parameter a bool.
>
> And document the hook.
>
> Signed-off-by: Jiri Slaby (SUSE) <jirislaby@kernel.org>

Thanks for your patch!

> --- a/drivers/video/console/vgacon.c
> +++ b/drivers/video/console/vgacon.c
> @@ -367,7 +367,7 @@ static const char *vgacon_startup(void)
>         return display_desc;
>  }
>
> -static void vgacon_init(struct vc_data *c, int init)
> +static void vgacon_init(struct vc_data *c, bool init)
>  {
>         struct uni_pagedict *p;
>

Below, there is one more line to update:

    -        /* set dimensions manually if init != 0 since vc_resize()
will fail */
    +        /* set dimensions manually if init is true since
vc_resize() will fail */

With the above fixed:
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>

Gr{oetje,eeting}s,

                        Geert