From patchwork Sat Jan 17 00:56:42 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 1546 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=1768611456; bh=Wcj9+CoKenYWYurbatIMUlHkgKLUMBuyOO4jhlwp6RE=; 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=gcl19vKRVZzK4yZL8pZwzTEY0M97THalAp8v77EhgpdaSHK253ffOPfv5hUp2PTtn Ynj4vfpnpTrQDt2ArwqyEZ0Ma3ZACLkkdFdq7Rxk2cAXJewjEUIS+mJwFa50T2fnLE jB1rTcWZ8NtasYYaRbWkR/t3goqMu8NDhJi8d2PnlL9N8dtg9v7pDr75iqmOzryiQ+ JzsrZzGJTnkFEWw/bAuSscqVzg9urXnqygzzcQn0/Y+yYGyFSMylu5ROANACkRbNk9 NM+RxZ2qofrueuhSQwXzLvazOeBYmF/6I0GwOiiiXLPbgmZfI7sqWOh34zBTJ6oOX7 MHVOsJBJDs1xw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 25D25693E7 for ; Fri, 16 Jan 2026 17:57:36 -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 LtnnIQSurRHg for ; Fri, 16 Jan 2026 17:57:36 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1768611456; bh=Wcj9+CoKenYWYurbatIMUlHkgKLUMBuyOO4jhlwp6RE=; 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=gcl19vKRVZzK4yZL8pZwzTEY0M97THalAp8v77EhgpdaSHK253ffOPfv5hUp2PTtn Ynj4vfpnpTrQDt2ArwqyEZ0Ma3ZACLkkdFdq7Rxk2cAXJewjEUIS+mJwFa50T2fnLE jB1rTcWZ8NtasYYaRbWkR/t3goqMu8NDhJi8d2PnlL9N8dtg9v7pDr75iqmOzryiQ+ JzsrZzGJTnkFEWw/bAuSscqVzg9urXnqygzzcQn0/Y+yYGyFSMylu5ROANACkRbNk9 NM+RxZ2qofrueuhSQwXzLvazOeBYmF/6I0GwOiiiXLPbgmZfI7sqWOh34zBTJ6oOX7 MHVOsJBJDs1xw== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 151F9693E0 for ; Fri, 16 Jan 2026 17:57:36 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1768611454; bh=EoQyIwlTzM6nHEoHIHX6AK2bqV5huDMvbH+89sdfjRw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tRK9Uy6tzvJWboBKTGf/Zqr7uyzm6XxgDS6yn/wchi4+tlwYawcrUxqIbAclx9QRo pCNKY7YSZG01+iZvPL9bmaY0Ww+BD+93XrffiNl3b6NMxLUkW+kkHKeSyozu4iOaWw 9XYDNuXqGxsFqe0nnQyGJaFbAYgPEbPNuj2gFCNIcrxuFpRBfvkbkARsp46EOf8hOB KtcJsBRzdO5wcWVchASalvwsab4WNqNXYfTDzqwXWs2UdtZd0YpRQBE6T/Hl5it3iI JxPmqsLHHZ+seSj5wsl6tuWAOgksObvHUBPkPAE/QLGPASp5BlNKOyREJuExQSjbF6 3qkC6v7ivYsrw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 92E6B693D7; Fri, 16 Jan 2026 17:57:34 -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 EN00K_GwIVMo; Fri, 16 Jan 2026 17:57:34 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1768611450; bh=bLTAfFVxMWYIEN00lPEME8YGBiieMo0GuNTY8fpPTcw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=luuwEs+LgjzIg4ZhQCgIFVitOc0r7mah91ryQ0ROGHOS8/vgx5zUj9Ag7UcwCgFBC rSR1Wlm58DYweqCttIDJjkVzSph4EGyGlFr+lzDVkHGJuNRhnG5Mw3GXa3euW6IKvh coPcp/nrEe8ExQxD9GK77cX1zUBwnNekJv2o66yKTFg60+7vVZPai44gQ+RfWthn8W E0TJbWqpmetfa2NrUPtEWp19N6orWNlNsyba92mhc92XT9Q+U5dWcG/rHn9heNmr+3 4fvwnapUpvxjj4alD2EF3PzBOvy6B3r8tb+hCwcdk5V6VjHi7NC0fJYPYsogZAU+cB i2Xi6b0DRYLPA== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 47FE2693B1; Fri, 16 Jan 2026 17:57:30 -0700 (MST) From: Simon Glass To: U-Boot Concept Date: Fri, 16 Jan 2026 17:56:42 -0700 Message-ID: <20260117005702.1684841-5-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: BNZ2XCIPLVHVQFJKPEBSQNNYZIXOMTWB X-Message-ID-Hash: BNZ2XCIPLVHVQFJKPEBSQNNYZIXOMTWB 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 04/18] video: Move tab_width_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 tab width should be per-context so that different clients can maintain their own tab settings. Move the tab_width_frac field from vidconsole_priv into vidconsole_ctx. Co-developed-by: Claude Opus 4.5 Signed-off-by: Simon Glass --- drivers/video/console_truetype.c | 5 +++-- drivers/video/vidconsole-uclass.c | 8 ++++---- include/video_console.h | 4 ++-- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/drivers/video/console_truetype.c b/drivers/video/console_truetype.c index 36a2c33eb70..9c7c116809b 100644 --- a/drivers/video/console_truetype.c +++ b/drivers/video/console_truetype.c @@ -923,6 +923,7 @@ static void set_bitmap_font(struct udevice *dev, struct video_fontdata *fontdata) { struct vidconsole_priv *vc_priv = dev_get_uclass_priv(dev); + struct vidconsole_ctx *ctx = vidconsole_ctx_from_priv(vc_priv); struct console_tt_priv *priv = dev_get_priv(dev); priv->cur_fontdata = fontdata; @@ -930,7 +931,7 @@ static void set_bitmap_font(struct udevice *dev, vidconsole_set_bitmap_font(dev, fontdata); - vc_priv->tab_width_frac = VID_TO_POS(fontdata->width) * 8 / 2; + ctx->tab_width_frac = VID_TO_POS(fontdata->width) * 8 / 2; } static void select_metrics(struct udevice *dev, struct console_tt_metrics *met) @@ -947,7 +948,7 @@ static void select_metrics(struct udevice *dev, struct console_tt_metrics *met) com->xstart_frac = VID_TO_POS(2); com->cols = vid_priv->xsize / met->font_size; com->rows = vid_priv->ysize / met->font_size; - vc_priv->tab_width_frac = VID_TO_POS(met->font_size) * 8 / 2; + com->tab_width_frac = VID_TO_POS(met->font_size) * 8 / 2; } static int get_metrics(struct udevice *dev, const char *name, uint size, diff --git a/drivers/video/vidconsole-uclass.c b/drivers/video/vidconsole-uclass.c index bc2b3943fc8..414a33f7bf7 100644 --- a/drivers/video/vidconsole-uclass.c +++ b/drivers/video/vidconsole-uclass.c @@ -514,8 +514,8 @@ int vidconsole_put_char(struct udevice *dev, char ch) vidconsole_entry_start(dev); break; case '\t': /* Tab (8 chars alignment) */ - ctx->xcur_frac = ((ctx->xcur_frac / priv->tab_width_frac) - + 1) * priv->tab_width_frac; + ctx->xcur_frac = ((ctx->xcur_frac / ctx->tab_width_frac) + + 1) * ctx->tab_width_frac; if (ctx->xcur_frac >= priv->xsize_frac) vidconsole_newline(dev); @@ -894,8 +894,8 @@ static int vidconsole_post_probe(struct udevice *dev) struct vidconsole_ctx *ctx = vidconsole_ctx_from_priv(priv); struct stdio_dev *sdev = &priv->sdev; - if (!priv->tab_width_frac) - priv->tab_width_frac = VID_TO_POS(ctx->x_charsize) * 8; + if (!ctx->tab_width_frac) + ctx->tab_width_frac = VID_TO_POS(ctx->x_charsize) * 8; if (dev_seq(dev)) { snprintf(sdev->name, sizeof(sdev->name), "vidconsole%d", diff --git a/include/video_console.h b/include/video_console.h index cedc94a83cf..ebba1ac7572 100644 --- a/include/video_console.h +++ b/include/video_console.h @@ -114,6 +114,7 @@ struct vidconsole_ansi { * @utf8_buf: Buffer to accumulate UTF-8 byte sequence * @curs: Cursor state and management * @xstart_frac: Left margin for the text console in fractional units + * @tab_width_frac: Tab width in fractional units */ struct vidconsole_ctx { int rows; @@ -130,6 +131,7 @@ struct vidconsole_ctx { char utf8_buf[5]; struct vidconsole_cursor curs; int xstart_frac; + int tab_width_frac; }; /** @@ -148,14 +150,12 @@ struct vidconsole_ctx { * * @sdev: stdio device, acting as an output sink * @ctx: Per-client context - * @tab_width_frac: Tab width in fractional units * @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 tab_width_frac; int xsize_frac; bool quiet; };