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(-) 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; }; -- 2.43.0