[Concept,05/18] video: Move xsize_frac into vidconsole_ctx

Message ID 20260117005702.1684841-6-sjg@u-boot.org
State New
Headers
Series Refactor vidconsole context for dynamic allocation |

Commit Message

Simon Glass Jan. 17, 2026, 12:56 a.m. UTC
  From: Simon Glass <simon.glass@canonical.com>

The display width should be per-context so that different clients can
maintain their own display settings. Move the xsize_frac field from
vidconsole_priv into vidconsole_ctx.

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

 drivers/video/console_core.c      |  2 +-
 drivers/video/console_rotate.c    |  6 +++---
 drivers/video/console_truetype.c  |  2 +-
 drivers/video/vidconsole-uclass.c | 10 +++++-----
 include/video_console.h           |  4 ++--
 5 files changed, 12 insertions(+), 12 deletions(-)
  

Patch

diff --git a/drivers/video/console_core.c b/drivers/video/console_core.c
index 50f67ffcf83..18edc14bcd7 100644
--- a/drivers/video/console_core.c
+++ b/drivers/video/console_core.c
@@ -350,7 +350,7 @@  int console_fixed_putc_xy(struct udevice *dev, uint x_frac, uint y, int cp,
 	uchar *pfont = fontdata->video_fontdata +
 			ch * fontdata->char_pixel_bytes;
 
-	if (x_frac + VID_TO_POS(ctx->x_charsize) > vc_priv->xsize_frac)
+	if (x_frac + VID_TO_POS(ctx->x_charsize) > ctx->xsize_frac)
 		return -EAGAIN;
 	linenum = y;
 	x = VID_TO_PIXEL(x_frac);
diff --git a/drivers/video/console_rotate.c b/drivers/video/console_rotate.c
index 85c571accd4..378c7ec6fc7 100644
--- a/drivers/video/console_rotate.c
+++ b/drivers/video/console_rotate.c
@@ -87,7 +87,7 @@  static int console_putc_xy_1(struct udevice *dev, uint x_frac, uint y, int cp)
 	uchar *pfont = fontdata->video_fontdata +
 			ch * fontdata->char_pixel_bytes;
 
-	if (x_frac + VID_TO_POS(ctx->x_charsize) > vc_priv->xsize_frac)
+	if (x_frac + VID_TO_POS(ctx->x_charsize) > ctx->xsize_frac)
 		return -EAGAIN;
 	linenum = VID_TO_PIXEL(x_frac) + 1;
 	x = y + 1;
@@ -176,7 +176,7 @@  static int console_putc_xy_2(struct udevice *dev, uint x_frac, uint y, int cp)
 	uchar *pfont = fontdata->video_fontdata +
 			ch * fontdata->char_pixel_bytes;
 
-	if (x_frac + VID_TO_POS(ctx->x_charsize) > vc_priv->xsize_frac)
+	if (x_frac + VID_TO_POS(ctx->x_charsize) > ctx->xsize_frac)
 		return -EAGAIN;
 	linenum = vid_priv->ysize - y - 1;
 	x = vid_priv->xsize - VID_TO_PIXEL(x_frac) - 1;
@@ -267,7 +267,7 @@  static int console_putc_xy_3(struct udevice *dev, uint x_frac, uint y, int cp)
 	uchar *pfont = fontdata->video_fontdata +
 			ch * fontdata->char_pixel_bytes;
 
-	if (x_frac + VID_TO_POS(ctx->x_charsize) > vc_priv->xsize_frac)
+	if (x_frac + VID_TO_POS(ctx->x_charsize) > ctx->xsize_frac)
 		return -EAGAIN;
 	x = y;
 	linenum = vid_priv->ysize - VID_TO_PIXEL(x_frac) - 1;
diff --git a/drivers/video/console_truetype.c b/drivers/video/console_truetype.c
index 9c7c116809b..a9553cc9a53 100644
--- a/drivers/video/console_truetype.c
+++ b/drivers/video/console_truetype.c
@@ -477,7 +477,7 @@  static int console_truetype_putc_xy(struct udevice *dev, uint x, uint y,
 	x_shift = xpos - (double)tt_floor(xpos);
 	xpos += advance * met->scale;
 	width_frac = (int)VID_TO_POS((kern + advance) * met->scale);
-	if (x + width_frac >= vc_priv->xsize_frac)
+	if (x + width_frac >= vc_ctx->xsize_frac)
 		return -EAGAIN;
 
 	/* Write the current cursor position into history */
diff --git a/drivers/video/vidconsole-uclass.c b/drivers/video/vidconsole-uclass.c
index 414a33f7bf7..eda55fcf04e 100644
--- a/drivers/video/vidconsole-uclass.c
+++ b/drivers/video/vidconsole-uclass.c
@@ -476,7 +476,7 @@  static int vidconsole_output_glyph(struct udevice *dev, int ch)
 		return ret;
 	ctx->xcur_frac += ret;
 	ctx->last_ch = ch;
-	if (ctx->xcur_frac >= priv->xsize_frac)
+	if (ctx->xcur_frac >= ctx->xsize_frac)
 		vidconsole_newline(dev);
 	cli_index_adjust(priv, 1);
 
@@ -517,7 +517,7 @@  int vidconsole_put_char(struct udevice *dev, char ch)
 		ctx->xcur_frac = ((ctx->xcur_frac / ctx->tab_width_frac)
 				+ 1) * ctx->tab_width_frac;
 
-		if (ctx->xcur_frac >= priv->xsize_frac)
+		if (ctx->xcur_frac >= ctx->xsize_frac)
 			vidconsole_newline(dev);
 		break;
 	case '\b':
@@ -878,11 +878,11 @@  void vidconsole_pop_colour(struct udevice *dev, struct vidconsole_colour *old)
 /* Set up the number of rows and colours (rotated drivers override this) */
 static int vidconsole_pre_probe(struct udevice *dev)
 {
-	struct vidconsole_priv *priv = dev_get_uclass_priv(dev);
+	struct vidconsole_ctx *ctx = vidconsole_ctx(dev);
 	struct udevice *vid = dev->parent;
 	struct video_priv *vid_priv = dev_get_uclass_priv(vid);
 
-	priv->xsize_frac = VID_TO_POS(vid_priv->xsize);
+	ctx->xsize_frac = VID_TO_POS(vid_priv->xsize);
 
 	return 0;
 }
@@ -978,7 +978,7 @@  void vidconsole_set_bitmap_font(struct udevice *dev,
 	if (vid_priv->rot % 2) {
 		ctx->cols = vid_priv->ysize / fontdata->width;
 		ctx->rows = vid_priv->xsize / fontdata->height;
-		vc_priv->xsize_frac = VID_TO_POS(vid_priv->ysize);
+		ctx->xsize_frac = VID_TO_POS(vid_priv->ysize);
 	} else {
 		ctx->cols = vid_priv->xsize / fontdata->width;
 		ctx->rows = vid_priv->ysize / fontdata->height;
diff --git a/include/video_console.h b/include/video_console.h
index ebba1ac7572..43b894048ed 100644
--- a/include/video_console.h
+++ b/include/video_console.h
@@ -115,6 +115,7 @@  struct vidconsole_ansi {
  * @curs:		Cursor state and management
  * @xstart_frac:	Left margin for the text console in fractional units
  * @tab_width_frac:	Tab width in fractional units
+ * @xsize_frac:		Width of the display in fractional units
  */
 struct vidconsole_ctx {
 	int rows;
@@ -132,6 +133,7 @@  struct vidconsole_ctx {
 	struct vidconsole_cursor curs;
 	int xstart_frac;
 	int tab_width_frac;
+	int xsize_frac;
 };
 
 /**
@@ -150,13 +152,11 @@  struct vidconsole_ctx {
  *
  * @sdev:		stdio device, acting as an output sink
  * @ctx:		Per-client context
- * @xsize_frac:		Width of the display in fractional units
  * @quiet:		Suppress all output from stdio
  */
 struct vidconsole_priv {
 	struct stdio_dev sdev;
 	struct vidconsole_ctx ctx;
-	int xsize_frac;
 	bool quiet;
 };