mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Ahmad Fatoum <a.fatoum@barebox.org>
To: barebox@lists.infradead.org
Cc: Ahmad Fatoum <a.fatoum@barebox.org>
Subject: [PATCH 3/5] serial: virtio_console: report the console size
Date: Sun,  8 Nov 2026 10:32:05 +0100	[thread overview]
Message-ID: <20261108093354.1247607-4-a.fatoum@barebox.org> (raw)
In-Reply-To: <20261108093354.1247607-1-a.fatoum@barebox.org>

Hosts that offer VIRTIO_CONSOLE_F_SIZE, like TinyEMU, keep the size of
their terminal in the config space. Implement get_size with it, so that
sedit and watch don't need to query the terminal and wait up to 100ms
for the reply. When the reply takes longer, as in the barebox web demo,
sedit gives up and the reply ends up in the edited file:

  [24;80R#!/bin/sh

Signed-off-by: Ahmad Fatoum <a.fatoum@barebox.org>
---
 drivers/serial/virtio_console.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/drivers/serial/virtio_console.c b/drivers/serial/virtio_console.c
index ae36cad6e5bd..3d14bf502489 100644
--- a/drivers/serial/virtio_console.c
+++ b/drivers/serial/virtio_console.c
@@ -18,6 +18,7 @@
 #include <xfuncs.h>
 #include <linux/spinlock.h>
 #include <linux/virtio.h>
+#include <linux/virtio_config.h>
 #include <linux/virtio_ring.h>
 #include <linux/virtio_console.h>
 
@@ -105,6 +106,24 @@ static int virtcons_getc(struct console_device *cdev)
 	return ch;
 }
 
+static int virtcons_get_size(struct console_device *cdev, int *width, int *height)
+{
+	struct virtio_device *vdev = dev_to_virtio(cdev->dev);
+	u16 cols, rows;
+
+	virtio_cread(vdev, struct virtio_console_config, cols, &cols);
+	virtio_cread(vdev, struct virtio_console_config, rows, &rows);
+
+	/* the host may not have filled them in yet */
+	if (!cols || !rows)
+		return -ENODATA;
+
+	*width = cols;
+	*height = rows;
+
+	return 0;
+}
+
 static int virtcons_probe(struct virtio_device *vdev)
 {
 	struct virtqueue *vqs[2];
@@ -146,6 +165,8 @@ static int virtcons_probe(struct virtio_device *vdev)
 	virtcons->cdev.tstc = virtcons_tstc;
 	virtcons->cdev.getc = virtcons_getc;
 	virtcons->cdev.putc = virtcons_putc;
+	if (virtio_has_feature(vdev, VIRTIO_CONSOLE_F_SIZE))
+		virtcons->cdev.get_size = virtcons_get_size;
 
 	have_one = true;
 
@@ -168,9 +189,15 @@ static struct virtio_device_id id_table[] = {
 	{ 0 },
 };
 
+static const unsigned int features[] = {
+	VIRTIO_CONSOLE_F_SIZE,
+};
+
 static struct virtio_driver virtio_console = {
 	.driver.name =	"virtio_console",
 	.id_table =	id_table,
+	.feature_table = features,
+	.feature_table_size = ARRAY_SIZE(features),
 	.probe =	virtcons_probe,
 	.remove =	virtcons_remove,
 };
-- 
2.47.3




  parent reply	other threads:[~2026-11-08  9:35 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-08  9:32 [PATCH 0/5] console: escape sequence handling improvement Ahmad Fatoum
2026-11-08  9:32 ` [PATCH 1/5] readkey: wait for the rest of an escape sequence Ahmad Fatoum
2026-11-08  9:32 ` [PATCH 2/5] lib: term: ask the terminal when a console can't tell its size Ahmad Fatoum
2026-11-08  9:32 ` Ahmad Fatoum [this message]
2026-11-08  9:32 ` [PATCH 4/5] console: give each console implementation its own console_ctrlc() Ahmad Fatoum
2026-11-08  9:32 ` [PATCH 5/5] console: keep the keys typed ahead when checking for Ctrl-C Ahmad Fatoum
2026-11-09  9:50 ` [PATCH 0/5] console: escape sequence handling improvement Sascha Hauer

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=20261108093354.1247607-4-a.fatoum@barebox.org \
    --to=a.fatoum@barebox.org \
    --cc=barebox@lists.infradead.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