From patchwork Sat Jan 17 00:56:43 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 1547 Return-Path: X-Original-To: u-boot-concept@u-boot.org Delivered-To: u-boot-concept@u-boot.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1768611460; bh=scIEiMYdfOMBzGSV2kHN0rAYUHBfjqP9fnq7TEkNukM=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=D2OfF7zQiOEFPyAfnvVOueuabYcyYjz+qpXfIIw6sQ2ped+tvV5yZTM1ipj2q/pkq vgesayAqf4JkVBBOdvtxPElgBjwn79pqdH9FA8F01lJAbYGCeWhhKG7Qe/BuXEf458 zYquBwgXb28w32Pzz9Kq+Czdk4gAICQBWfCUIFT+8bK+697SdXLASmh0GSKAjsquKI 6tWde9D8UUr4deMkorSg1TG8t10iWFIMVSD2tKn2JZZBU70P2Q0PesUENtG2u35ofH +wSuyreIqMuKu3gVtqZZN7lKHaTFdK5wf4pa1jhfZ4q0yZrKGelZVQrbABOaI2wtl3 3SVhXHRkvt0IA== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id D45C3693E6 for ; Fri, 16 Jan 2026 17:57:40 -0700 (MST) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id c-hrykTuSPko for ; Fri, 16 Jan 2026 17:57:40 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1768611460; bh=scIEiMYdfOMBzGSV2kHN0rAYUHBfjqP9fnq7TEkNukM=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=D2OfF7zQiOEFPyAfnvVOueuabYcyYjz+qpXfIIw6sQ2ped+tvV5yZTM1ipj2q/pkq vgesayAqf4JkVBBOdvtxPElgBjwn79pqdH9FA8F01lJAbYGCeWhhKG7Qe/BuXEf458 zYquBwgXb28w32Pzz9Kq+Czdk4gAICQBWfCUIFT+8bK+697SdXLASmh0GSKAjsquKI 6tWde9D8UUr4deMkorSg1TG8t10iWFIMVSD2tKn2JZZBU70P2Q0PesUENtG2u35ofH +wSuyreIqMuKu3gVtqZZN7lKHaTFdK5wf4pa1jhfZ4q0yZrKGelZVQrbABOaI2wtl3 3SVhXHRkvt0IA== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id C0CE6693D7 for ; Fri, 16 Jan 2026 17:57:40 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1768611459; bh=8VTHlsCkHiBYJXw5y0Ec4Ka9LUfMVyAQFuz1q1AmYOc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qc0AyaYxjnpWmu2hsRxt6Wh7UUTa4l8W86/KvVA+c2I9vVcDzxwFIMUVyod0SHZl+ dRU3OAuveWvdoyBoZVw3jWqqQA5Zjd5HTIdA/8GQjJ/6LYKjox9TwxYVK1bxILnkzz 8IrUeOfvSPmqOMzIthbhMZf8NdC+TeQ55Lcu8F66ujI3rCX/d35jx7LmI6sk14FlVH leyILjy64lRz1dlkk6m/PVw75IzEu3IRyZOnkVMJR5Klep8INoB/OULqnFSaSEprSc 3RISuIh8QK6knIVcfpf5hCzJoov8JE1gi6kvy4Xg5ck3V1qktC+rYfc6GHM+w9toLe Om8RDMsy7jnmA== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 34EED693D7; Fri, 16 Jan 2026 17:57:39 -0700 (MST) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10026) with ESMTP id Uca3LDxaLzhI; Fri, 16 Jan 2026 17:57:39 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1768611455; bh=YtLHzqkQrkSKSy0hVZn6gjaCrgB81YjZoI3Ah6Wecao=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Mu99OuGqAeZd1YkxKA11gkbHa1Ko1tZiuFn7HwfiaztVIh0OYHzil77/52QKyrgFB Cs+tHM0z2g6wd2I3tO46Ba2LJLaicM9A1dlYiY8cvxa7ZY3Xkew2qXDfTo+spEVqmA Nytb3HbsRLj/fh2EG04n6tz3wh1+DRdbuXGdaqb0NW1lTIQL+jWwjHZuk6BDYm/7lP dSlai33s3iEJ+kvROJBl/tA3Ze2SO6iF468ggl/dTM/w6sdgJ0mlpSl+zH3W52/8mI 4DqIxe4lGAc7WpzJ0h5I4RCCtu2zGMerY9DenNXgJBMLxKWz1bmPwBQCoD2j0Kxasq gWxbefVOSNsAw== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id D5562693B1; Fri, 16 Jan 2026 17:57:34 -0700 (MST) From: Simon Glass To: U-Boot Concept Date: Fri, 16 Jan 2026 17:56:43 -0700 Message-ID: <20260117005702.1684841-6-sjg@u-boot.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260117005702.1684841-1-sjg@u-boot.org> References: <20260117005702.1684841-1-sjg@u-boot.org> MIME-Version: 1.0 Message-ID-Hash: QP45HR2WNXDIHANLBTODJ3C2DCRVQU4A X-Message-ID-Hash: QP45HR2WNXDIHANLBTODJ3C2DCRVQU4A X-MailFrom: sjg@u-boot.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Simon Glass , "Claude Opus 4 . 5" X-Mailman-Version: 3.3.10 Precedence: list Subject: [Concept] [PATCH 05/18] video: Move xsize_frac into vidconsole_ctx List-Id: Discussion and patches related to U-Boot Concept Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Simon Glass 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 Signed-off-by: Simon Glass --- 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; };