[Concept,08/13] console: Add vidconsole support for length-based output

Message ID 20260204001002.2638622-9-sjg@u-boot.org
State New
Headers
Series Add putsn() for length-based console output |

Commit Message

Simon Glass Feb. 4, 2026, 12:09 a.m. UTC
  From: Simon Glass <simon.glass@canonical.com>

Add putsn() support to the video console driver to enable efficient
rendering of length-specified strings. The vidconsole infrastructure
already supports length-based operations through vidconsole_put_stringn(),
so this just adds the stdio_dev wrapper.

Co-developed-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Signed-off-by: Simon Glass <simon.glass@canonical.com>
---

 drivers/video/vidconsole-uclass.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)
  

Patch

diff --git a/drivers/video/vidconsole-uclass.c b/drivers/video/vidconsole-uclass.c
index d13b4eac272..3d440e8e672 100644
--- a/drivers/video/vidconsole-uclass.c
+++ b/drivers/video/vidconsole-uclass.c
@@ -589,7 +589,7 @@  static void vidconsole_putc(struct stdio_dev *sdev, const char ch)
 	}
 }
 
-static void vidconsole_puts(struct stdio_dev *sdev, const char *s)
+static void vidconsole_putsn(struct stdio_dev *sdev, const char *s, int len)
 {
 	struct udevice *dev = sdev->priv;
 	struct vidconsole_priv *priv = dev_get_uclass_priv(dev);
@@ -597,12 +597,12 @@  static void vidconsole_puts(struct stdio_dev *sdev, const char *s)
 
 	if (priv->quiet)
 		return;
-	ret = vidconsole_put_string(dev, NULL, s);
+	ret = vidconsole_put_stringn(dev, NULL, s, len);
 	if (ret) {
 #ifdef DEBUG
 		char str[30];
 
-		snprintf(str, sizeof(str), "[vc err: puts %d]", ret);
+		snprintf(str, sizeof(str), "[vc err: putsn %d]", ret);
 		console_puts_select_stderr(true, str);
 #endif
 	}
@@ -614,6 +614,11 @@  static void vidconsole_puts(struct stdio_dev *sdev, const char *s)
 	}
 }
 
+static void vidconsole_puts(struct stdio_dev *sdev, const char *s)
+{
+	vidconsole_putsn(sdev, s, strlen(s));
+}
+
 void vidconsole_list_fonts(struct udevice *dev)
 {
 	struct vidfont_info info;
@@ -950,6 +955,7 @@  static int vidconsole_post_probe(struct udevice *dev)
 	sdev->flags = DEV_FLAGS_OUTPUT | DEV_FLAGS_DM;
 	sdev->putc = vidconsole_putc;
 	sdev->puts = vidconsole_puts;
+	sdev->putsn = vidconsole_putsn;
 	sdev->priv = dev;
 
 	return stdio_register(sdev);