diff mbox series

[5/6] video: use int for character in putc_xy()

Message ID 20210227130840.166193-6-xypron.glpk@gmx.de
State Superseded, archived
Delegated to: Heinrich Schuchardt
Headers show
Series efi_loader: Unicode output in UEFI applications | expand

Commit Message

Heinrich Schuchardt Feb. 27, 2021, 1:08 p.m. UTC
The truetype console expects the character to be a Unicode code point. This
value cannot be passed as char. Use int instead.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
---
 drivers/video/console_normal.c    | 2 +-
 drivers/video/console_rotate.c    | 6 +++---
 drivers/video/console_truetype.c  | 2 +-
 drivers/video/vidconsole-uclass.c | 9 +++++++++
 include/video_console.h           | 2 +-
 5 files changed, 15 insertions(+), 6 deletions(-)

--
2.30.0
diff mbox series

Patch

diff --git a/drivers/video/console_normal.c b/drivers/video/console_normal.c
index 04f022491e..9cfd11ae41 100644
--- a/drivers/video/console_normal.c
+++ b/drivers/video/console_normal.c
@@ -80,7 +80,7 @@  static int console_normal_move_rows(struct udevice *dev, uint rowdst,
 }

 static int console_normal_putc_xy(struct udevice *dev, uint x_frac, uint y,
-				  char ch)
+				  int ch)
 {
 	struct vidconsole_priv *vc_priv = dev_get_uclass_priv(dev);
 	struct udevice *vid = dev->parent;
diff --git a/drivers/video/console_rotate.c b/drivers/video/console_rotate.c
index 36c8d0609d..78ca36431f 100644
--- a/drivers/video/console_rotate.c
+++ b/drivers/video/console_rotate.c
@@ -86,7 +86,7 @@  static int console_move_rows_1(struct udevice *dev, uint rowdst, uint rowsrc,
 	return 0;
 }

-static int console_putc_xy_1(struct udevice *dev, uint x_frac, uint y, char ch)
+static int console_putc_xy_1(struct udevice *dev, uint x_frac, uint y, int ch)
 {
 	struct vidconsole_priv *vc_priv = dev_get_uclass_priv(dev);
 	struct udevice *vid = dev->parent;
@@ -221,7 +221,7 @@  static int console_move_rows_2(struct udevice *dev, uint rowdst, uint rowsrc,
 	return 0;
 }

-static int console_putc_xy_2(struct udevice *dev, uint x_frac, uint y, char ch)
+static int console_putc_xy_2(struct udevice *dev, uint x_frac, uint y, int ch)
 {
 	struct vidconsole_priv *vc_priv = dev_get_uclass_priv(dev);
 	struct udevice *vid = dev->parent;
@@ -362,7 +362,7 @@  static int console_move_rows_3(struct udevice *dev, uint rowdst, uint rowsrc,
 	return 0;
 }

-static int console_putc_xy_3(struct udevice *dev, uint x_frac, uint y, char ch)
+static int console_putc_xy_3(struct udevice *dev, uint x_frac, uint y, int ch)
 {
 	struct vidconsole_priv *vc_priv = dev_get_uclass_priv(dev);
 	struct udevice *vid = dev->parent;
diff --git a/drivers/video/console_truetype.c b/drivers/video/console_truetype.c
index fa11b3bbef..293b3a5ef4 100644
--- a/drivers/video/console_truetype.c
+++ b/drivers/video/console_truetype.c
@@ -198,7 +198,7 @@  static int console_truetype_move_rows(struct udevice *dev, uint rowdst,
 }

 static int console_truetype_putc_xy(struct udevice *dev, uint x, uint y,
-				    char ch)
+				    int ch)
 {
 	struct vidconsole_priv *vc_priv = dev_get_uclass_priv(dev);
 	struct udevice *vid = dev->parent;
diff --git a/drivers/video/vidconsole-uclass.c b/drivers/video/vidconsole-uclass.c
index 81b65f5aae..a355328851 100644
--- a/drivers/video/vidconsole-uclass.c
+++ b/drivers/video/vidconsole-uclass.c
@@ -8,6 +8,7 @@ 
  */

 #include <common.h>
+#include <charset.h>
 #include <command.h>
 #include <console.h>
 #include <log.h>
@@ -509,6 +510,14 @@  int vidconsole_put_char(struct udevice *dev, char ch)
 	struct vidconsole_priv *priv = dev_get_uclass_priv(dev);
 	int ret;

+	if (IS_ENABLED(CONFIG_EFI_LOADER)) {
+		static char buffer[5];
+
+		ch = utf8_to_cp437_stream(ch, buffer);
+		if (!ch)
+			return 0;
+	}
+
 	if (priv->escape) {
 		vidconsole_escape_char(dev, ch);
 		return 0;
diff --git a/include/video_console.h b/include/video_console.h
index 06b798ef10..5e6eb3cc81 100644
--- a/include/video_console.h
+++ b/include/video_console.h
@@ -106,7 +106,7 @@  struct vidconsole_ops {
 	 * if all is OK, -EAGAIN if we ran out of space on this line, other -ve
 	 * on error
 	 */
-	int (*putc_xy)(struct udevice *dev, uint x_frac, uint y, char ch);
+	int (*putc_xy)(struct udevice *dev, uint x_frac, uint y, int ch);

 	/**
 	 * move_rows() - Move text rows from one place to another