From: Thomas Zimmermann <tzimmermann@suse.de>
To: "Jiri Slaby (SUSE)" <jirislaby@kernel.org>, gregkh@linuxfoundation.org
Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org,
Helge Deller <deller@gmx.de>,
"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
Daniel Vetter <daniel@ffwll.ch>,
linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org,
linux-parisc@vger.kernel.org
Subject: Re: [PATCH 32/45] tty: vt: use enum for VESA blanking modes
Date: Thu, 18 Jan 2024 09:38:23 +0100 [thread overview]
Message-ID: <1261336c-e8da-4a85-acac-18a7c6230ff6@suse.de> (raw)
In-Reply-To: <20240118075756.10541-33-jirislaby@kernel.org>
[-- Attachment #1.1: Type: text/plain, Size: 10003 bytes --]
Hi
Am 18.01.24 um 08:57 schrieb Jiri Slaby (SUSE):
> Switch VESA macros to an enum and add and use VESA_BLANK_MAX. This
> improves type checking in consw::con_blank().
>
> There is a downside of this. The macros were defined twice: in
> linux/console.h and uapi/linux/fb.h. We cannot remove the latter (uapi
> header), but nor we want to expand them in the kernel too. So protect
> them using __KERNEL__. In the kernel case, include linux/console.h
> instead. This header dependency is preexisting.
>
> Alternatively, we could create a vesa.h header with that sole enum and
> include it. If it turns out linux/console.h is too much for fb.h.
Personally I'd prefer something like include/uapi/video/vesa.h that
contains the current defines. Fbdev is deprecated and the more we can
avoid building upon it, the better. If you want an enum type in the
kernel, maybe create it from the constants like this:
enum vesa_blank_mode {
VESA_BLANK_MODE_NO_BLANKING = VESA_NO_BLANKING,
VESA_BLANK_MODE_VSYNC = VESA_VSYNC_SYSPEND,
[...]
VESA_MAX_BLANK_MODE = ...,
};
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: Daniel Vetter <daniel@ffwll.ch>
> Cc: linux-fbdev@vger.kernel.org
> Cc: dri-devel@lists.freedesktop.org
> Cc: linux-parisc@vger.kernel.org
> ---
> drivers/tty/vt/vt.c | 4 ++--
> drivers/video/console/dummycon.c | 6 ++++--
> drivers/video/console/mdacon.c | 3 ++-
> drivers/video/console/newport_con.c | 3 ++-
> drivers/video/console/sticon.c | 3 ++-
> drivers/video/console/vgacon.c | 7 ++++---
> drivers/video/fbdev/core/fbcon.c | 3 ++-
> include/linux/console.h | 18 +++++++++++-------
> include/uapi/linux/fb.h | 5 ++++-
> 9 files changed, 33 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
> index 6f46fefedcfb..756291f37d47 100644
> --- a/drivers/tty/vt/vt.c
> +++ b/drivers/tty/vt/vt.c
> @@ -175,7 +175,7 @@ int do_poke_blanked_console;
> int console_blanked;
> EXPORT_SYMBOL(console_blanked);
>
> -static int vesa_blank_mode; /* 0:none 1:suspendV 2:suspendH 3:powerdown */
> +static enum vesa_blank_mode vesa_blank_mode;
> static int vesa_off_interval;
> static int blankinterval;
> core_param(consoleblank, blankinterval, int, 0444);
> @@ -4334,7 +4334,7 @@ static int set_vesa_blanking(u8 __user *mode_user)
> return -EFAULT;
>
> console_lock();
> - vesa_blank_mode = (mode < 4) ? mode : VESA_NO_BLANKING;
> + vesa_blank_mode = (mode <= VESA_BLANK_MAX) ? mode : VESA_NO_BLANKING;
> console_unlock();
>
> return 0;
> diff --git a/drivers/video/console/dummycon.c b/drivers/video/console/dummycon.c
> index c8d5aa0e3ed0..d86c1d798690 100644
> --- a/drivers/video/console/dummycon.c
> +++ b/drivers/video/console/dummycon.c
> @@ -79,7 +79,8 @@ static void dummycon_putcs(struct vc_data *vc, const u16 *s, unsigned int count,
> raw_notifier_call_chain(&dummycon_output_nh, 0, NULL);
> }
>
> -static int dummycon_blank(struct vc_data *vc, int blank, int mode_switch)
> +static int dummycon_blank(struct vc_data *vc, enum vesa_blank_mode blank,
> + int mode_switch)
> {
> /* Redraw, so that we get putc(s) for output done while blanked */
> return 1;
> @@ -89,7 +90,8 @@ static void dummycon_putc(struct vc_data *vc, u16 c, unsigned int y,
> unsigned int x) { }
> static void dummycon_putcs(struct vc_data *vc, const u16 *s, unsigned int count,
> unsigned int ypos, unsigned int xpos) { }
> -static int dummycon_blank(struct vc_data *vc, int blank, int mode_switch)
> +static int dummycon_blank(struct vc_data *vc, enum vesa_blank_mode blank,
> + int mode_switch)
> {
> return 0;
> }
> diff --git a/drivers/video/console/mdacon.c b/drivers/video/console/mdacon.c
> index 4485ef923bb3..63e3ce678aab 100644
> --- a/drivers/video/console/mdacon.c
> +++ b/drivers/video/console/mdacon.c
> @@ -451,7 +451,8 @@ static bool mdacon_switch(struct vc_data *c)
> return true; /* redrawing needed */
> }
>
> -static int mdacon_blank(struct vc_data *c, int blank, int mode_switch)
> +static int mdacon_blank(struct vc_data *c, enum vesa_blank_mode blank,
> + int mode_switch)
> {
> if (mda_type == TYPE_MDA) {
> if (blank)
> diff --git a/drivers/video/console/newport_con.c b/drivers/video/console/newport_con.c
> index ad3a09142770..38437a53b7f1 100644
> --- a/drivers/video/console/newport_con.c
> +++ b/drivers/video/console/newport_con.c
> @@ -476,7 +476,8 @@ static bool newport_switch(struct vc_data *vc)
> return true;
> }
>
> -static int newport_blank(struct vc_data *c, int blank, int mode_switch)
> +static int newport_blank(struct vc_data *c, enum vesa_blank_mode blank,
> + int mode_switch)
> {
> unsigned short treg;
>
> diff --git a/drivers/video/console/sticon.c b/drivers/video/console/sticon.c
> index 817b89c45e81..e9d5d1f92883 100644
> --- a/drivers/video/console/sticon.c
> +++ b/drivers/video/console/sticon.c
> @@ -298,7 +298,8 @@ static bool sticon_switch(struct vc_data *conp)
> return true; /* needs refreshing */
> }
>
> -static int sticon_blank(struct vc_data *c, int blank, int mode_switch)
> +static int sticon_blank(struct vc_data *c, enum vesa_blank_mode blank,
> + int mode_switch)
> {
> if (blank == VESA_NO_BLANKING) {
> if (mode_switch)
> diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c
> index 910dc73874b7..a4bd97ab502d 100644
> --- a/drivers/video/console/vgacon.c
> +++ b/drivers/video/console/vgacon.c
> @@ -81,7 +81,7 @@ static unsigned int vga_video_num_lines; /* Number of text lines */
> static bool vga_can_do_color; /* Do we support colors? */
> static unsigned int vga_default_font_height __read_mostly; /* Height of default screen font */
> static unsigned char vga_video_type __read_mostly; /* Card type */
> -static int vga_vesa_blanked;
> +static enum vesa_blank_mode vga_vesa_blanked;
> static bool vga_palette_blanked;
> static bool vga_is_gfx;
> static bool vga_512_chars;
> @@ -683,7 +683,7 @@ static struct {
> unsigned char ClockingMode; /* Seq-Controller:01h */
> } vga_state;
>
> -static void vga_vesa_blank(struct vgastate *state, int mode)
> +static void vga_vesa_blank(struct vgastate *state, enum vesa_blank_mode mode)
> {
> /* save original values of VGA controller registers */
> if (!vga_vesa_blanked) {
> @@ -797,7 +797,8 @@ static void vga_pal_blank(struct vgastate *state)
> }
> }
>
> -static int vgacon_blank(struct vc_data *c, int blank, int mode_switch)
> +static int vgacon_blank(struct vc_data *c, enum vesa_blank_mode blank,
> + int mode_switch)
> {
> switch (blank) {
> case VESA_NO_BLANKING: /* Unblank */
> diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
> index d5d924225209..69be5f2106bc 100644
> --- a/drivers/video/fbdev/core/fbcon.c
> +++ b/drivers/video/fbdev/core/fbcon.c
> @@ -2198,7 +2198,8 @@ static void fbcon_generic_blank(struct vc_data *vc, struct fb_info *info,
> }
> }
>
> -static int fbcon_blank(struct vc_data *vc, int blank, int mode_switch)
> +static int fbcon_blank(struct vc_data *vc, enum vesa_blank_mode blank,
> + int mode_switch)
> {
> struct fb_info *info = fbcon_info_from_console(vc->vc_num);
> struct fbcon_ops *ops = info->fbcon_par;
> diff --git a/include/linux/console.h b/include/linux/console.h
> index f7c6b5fc3a36..5ea984b8c5e4 100644
> --- a/include/linux/console.h
> +++ b/include/linux/console.h
> @@ -31,6 +31,15 @@ enum con_scroll {
> SM_DOWN,
> };
>
> +/* Note: fbcon defines the below as macros for userspace (in fb.h). */
> +enum vesa_blank_mode {
> + VESA_NO_BLANKING = 0,
> + VESA_VSYNC_SUSPEND = 1,
> + VESA_HSYNC_SUSPEND = 2,
> + VESA_POWERDOWN = VESA_VSYNC_SUSPEND | VESA_HSYNC_SUSPEND,
> + VESA_BLANK_MAX = VESA_POWERDOWN,
> +};
> +
> enum vc_intensity;
>
> /**
> @@ -69,7 +78,8 @@ struct consw {
> unsigned int bottom, enum con_scroll dir,
> unsigned int lines);
> bool (*con_switch)(struct vc_data *vc);
> - int (*con_blank)(struct vc_data *vc, int blank, int mode_switch);
> + int (*con_blank)(struct vc_data *vc, enum vesa_blank_mode blank,
> + int mode_switch);
> int (*con_font_set)(struct vc_data *vc, struct console_font *font,
> unsigned int vpitch, unsigned int flags);
> int (*con_font_get)(struct vc_data *vc, struct console_font *font,
> @@ -520,12 +530,6 @@ void vcs_remove_sysfs(int index);
> */
> extern atomic_t ignore_console_lock_warning;
>
> -/* VESA Blanking Levels */
> -#define VESA_NO_BLANKING 0
> -#define VESA_VSYNC_SUSPEND 1
> -#define VESA_HSYNC_SUSPEND 2
> -#define VESA_POWERDOWN 3
> -
> extern void console_init(void);
>
> /* For deferred console takeover */
> diff --git a/include/uapi/linux/fb.h b/include/uapi/linux/fb.h
> index 3a49913d006c..562bdbb76ad9 100644
> --- a/include/uapi/linux/fb.h
> +++ b/include/uapi/linux/fb.h
> @@ -294,11 +294,14 @@ struct fb_con2fbmap {
> };
>
> /* VESA Blanking Levels */
> +#ifdef __KERNEL__
> +#include <linux/console.h>
> +#else
> #define VESA_NO_BLANKING 0
> #define VESA_VSYNC_SUSPEND 1
> #define VESA_HSYNC_SUSPEND 2
> #define VESA_POWERDOWN 3
> -
> +#endif
>
> enum {
> /* screen: unblanked, hsync: on, vsync: on */
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 840 bytes --]
next prev parent reply other threads:[~2024-01-18 8:38 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-18 7:57 [PATCH 00/45] tty: vt: cleanup and documentation Jiri Slaby (SUSE)
2024-01-18 7:57 ` [PATCH 01/45] vgacon: inline vc_scrolldelta_helper() into vgacon_scrolldelta() Jiri Slaby (SUSE)
2024-01-18 7:57 ` [PATCH 02/45] fbcon: make display_desc a static array in fbcon_startup() Jiri Slaby (SUSE)
2024-01-18 7:57 ` [PATCH 07/45] tty: vt: pass vc_resize_user as a parameter Jiri Slaby (SUSE)
2024-01-18 7:57 ` [PATCH 18/45] tty: vt: make consw::con_debug_*() return void Jiri Slaby (SUSE)
2024-01-18 7:57 ` [PATCH 19/45] tty: vt: make init parameter of consw::con_init() a bool Jiri Slaby (SUSE)
2024-01-18 8:56 ` Geert Uytterhoeven
2024-01-18 7:57 ` [PATCH 20/45] tty: vt: sanitize arguments of consw::con_clear() Jiri Slaby (SUSE)
2024-01-18 7:57 ` [PATCH 21/45] tty: vt: remove checks for count in consw::con_clear() implementations Jiri Slaby (SUSE)
2024-01-18 7:57 ` [PATCH 23/45] tty: vt: eliminate unneeded consw::con_putc() implementations Jiri Slaby (SUSE)
2024-01-18 7:57 ` [PATCH 24/45] tty: vt: sanitize consw::con_putc() parameters Jiri Slaby (SUSE)
2024-01-18 7:57 ` [PATCH 26/45] consoles: use if instead of switch-case in consw::con_cursor() Jiri Slaby (SUSE)
2024-01-18 7:57 ` [PATCH 27/45] fbdev/core: simplify cursor_state setting in fbcon_ops::cursor() Jiri Slaby (SUSE)
2024-01-18 7:57 ` [PATCH 28/45] tty: vt: remove CM_* constants Jiri Slaby (SUSE)
2024-01-18 7:57 ` [PATCH 29/45] tty: vt: make consw::con_switch() return a bool Jiri Slaby (SUSE)
2024-01-18 7:57 ` [PATCH 30/45] tty: vt: stop using -1 for blank mode in consw::con_blank() Jiri Slaby (SUSE)
2024-01-18 7:57 ` [PATCH 31/45] tty: vt: use VESA blanking constants Jiri Slaby (SUSE)
2024-01-18 8:30 ` Thomas Zimmermann
2024-01-18 8:32 ` Jiri Slaby
2024-01-18 8:41 ` Thomas Zimmermann
2024-01-18 8:52 ` Jiri Slaby
2024-01-18 8:54 ` Greg KH
2024-01-18 7:57 ` [PATCH 32/45] tty: vt: use enum for VESA blanking modes Jiri Slaby (SUSE)
2024-01-18 8:38 ` Thomas Zimmermann [this message]
2024-01-18 7:57 ` [PATCH 33/45] tty: vt: make types around consw::con_blank() bool Jiri Slaby (SUSE)
2024-01-18 7:57 ` [PATCH 34/45] tty: vt: make font of consw::con_font_set() const Jiri Slaby (SUSE)
2024-01-18 7:57 ` [PATCH 35/45] tty: vt: make consw::con_font_default()'s name const Jiri Slaby (SUSE)
2024-01-18 7:57 ` [PATCH 36/45] tty: vt: change consw::con_set_origin() return type Jiri Slaby (SUSE)
2024-01-18 7:57 ` [PATCH 37/45] fbcon: remove consw::con_screen_pos() Jiri Slaby (SUSE)
2024-01-18 7:57 ` [PATCH 40/45] fbcon: remove fbcon_getxy() Jiri Slaby (SUSE)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1261336c-e8da-4a85-acac-18a7c6230ff6@suse.de \
--to=tzimmermann@suse.de \
--cc=James.Bottomley@HansenPartnership.com \
--cc=daniel@ffwll.ch \
--cc=deller@gmx.de \
--cc=dri-devel@lists.freedesktop.org \
--cc=gregkh@linuxfoundation.org \
--cc=jirislaby@kernel.org \
--cc=linux-fbdev@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-parisc@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).