Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp5200291rwb; Sun, 4 Dec 2022 16:36:11 -0800 (PST) X-Google-Smtp-Source: AA0mqf7wc6h+yAJgqvEKckt0ywSq6jW8HNWUCGZz+J1WSgIcTwrMdiUFTIzoDDXzSRE3UtzVyV1Y X-Received: by 2002:a63:1e56:0:b0:470:60a5:2f70 with SMTP id p22-20020a631e56000000b0047060a52f70mr74501134pgm.99.1670200571700; Sun, 04 Dec 2022 16:36:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670200571; cv=none; d=google.com; s=arc-20160816; b=W3sXTywVlUuJueAJ1FteNiy4VFu9Sl0vDS0ssmv9mD4HjgPiaYxNls1bQhTKLMof8y uBoa76SlJB0K/klJdO1mUn7YTq8E5uEoLuWvLWhWsFFXnKnnxfYqoEDCzMhJhVspwe9Y u7c1MEGDMty/y9N0BNwtbgKqRvmNfraoOFEpsZYEB+0Nm+v1xNB7FyqPjNv5/iRQ5ZOz Y1eINPKOOtkgyT8EGnA/imprxpgT1hHQ3FjTpmlG1ITJBcHB0i/6P4rVREDQYoDaPyIt EW7E0VdWomHu5Efdx7GQl6da9f7LIVqMOUyRS7rbf8Dfij7wamLVnv0lTqPGurVX4J0Q 6mXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:subject:cc:to:from:date :user-agent:message-id; bh=l73fC64ccu8ncbrRCW2NKFPhU+voWUpvmAP+8oIcqL0=; b=qIglyARfNbIArp3IfHLcFgZJgs2Kx0RDfSBgn3iu90+MMuGJo4xgkSzaugrHLIAZgG VdX2PV726IKfevkTpcBQCk8hq5MD3kV4tjgVCmqwTP+xK3VLqw848ajtKy4r4GMHAZ4E zZEwLDGk9PY5GZBNqavyYHjcKEEfPhfakmXnrgVjFqz6Hf0P/8XAnKKH+LT//1/XHsOJ F8cBtJi2KIdslD4dSZ73pnZHrsAF9lQeDORdqMyLgffteN0HXtlRxDXBf1kNh9zOpyYq rTP+L2R+Rl2h1X0O9sMgXDjW83Ow3f73NZOpaSqRHfBoWHzJ2flPO+Gnu7evkBXZf2Hb W2xw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ob6-20020a17090b390600b002196be3a2adsi13230778pjb.21.2022.12.04.16.36.01; Sun, 04 Dec 2022 16:36:11 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230519AbiLEAOH (ORCPT + 82 others); Sun, 4 Dec 2022 19:14:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44900 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230518AbiLEANy (ORCPT ); Sun, 4 Dec 2022 19:13:54 -0500 Received: from sonata.ens-lyon.org (sonata.ens-lyon.org [140.77.166.138]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 45DD7101E9 for ; Sun, 4 Dec 2022 16:13:53 -0800 (PST) Received: from localhost (localhost [127.0.0.1]) by sonata.ens-lyon.org (Postfix) with ESMTP id EC4442014B; Mon, 5 Dec 2022 01:13:51 +0100 (CET) Received: from sonata.ens-lyon.org ([127.0.0.1]) by localhost (sonata.ens-lyon.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id DMjfWew5khfR; Mon, 5 Dec 2022 01:13:51 +0100 (CET) Received: from begin (lfbn-bor-1-376-208.w109-215.abo.wanadoo.fr [109.215.91.208]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by sonata.ens-lyon.org (Postfix) with ESMTPSA id 46C2820137; Mon, 5 Dec 2022 01:13:51 +0100 (CET) Received: from samy by begin with local (Exim 4.96) (envelope-from ) id 1p1z7G-00FkeD-2m; Mon, 05 Dec 2022 01:13:50 +0100 Message-ID: <20221205000807.822728995@ens-lyon.org> User-Agent: quilt/0.66 Date: Mon, 05 Dec 2022 01:07:41 +0100 From: Samuel Thibault To: Greg Kroah-Hartman , Jiri Slaby , kbd@lists.altlinux.org Cc: linux-kernel@vger.kernel.org, Samuel Thibault Subject: [patch 2/3] VT: Add KD_FONT_OP_SET/GET_TALL operations References: <20221205000739.583233140@ens-lyon.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_LOW, SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The KD_FONT_OP_SET/GET operations hardcode vpitch to be 32 pixels, which only dates from the old VGA hardware which as asserting this. Drivers such as fbcon however do not have such limitation, so this introduces KD_FONT_OP_SET/GET_TALL operations, which userland can try to use to avoid this limitation, thus opening the patch to >32 pixels font height. Signed-off-by: Samuel Thibault Index: linux-6.0/drivers/tty/vt/vt.c =================================================================== --- linux-6.0.orig/drivers/tty/vt/vt.c +++ linux-6.0/drivers/tty/vt/vt.c @@ -4592,6 +4592,7 @@ static int con_font_get(struct vc_data * struct console_font font; int rc = -EINVAL; int c; + unsigned int vpitch = op->op == KD_FONT_OP_GET_TALL ? op->height : 32; if (op->data) { font.data = kmalloc(max_font_size, GFP_KERNEL); @@ -4604,7 +4605,7 @@ static int con_font_get(struct vc_data * if (vc->vc_mode != KD_TEXT) rc = -EINVAL; else if (vc->vc_sw->con_font_get) - rc = vc->vc_sw->con_font_get(vc, &font, 32); + rc = vc->vc_sw->con_font_get(vc, &font, vpitch); else rc = -ENOSYS; console_unlock(); @@ -4612,7 +4613,7 @@ static int con_font_get(struct vc_data * if (rc) goto out; - c = (font.width+7)/8 * 32 * font.charcount; + c = (font.width+7)/8 * vpitch * font.charcount; if (op->data && font.charcount > op->charcount) rc = -ENOSPC; @@ -4638,6 +4639,7 @@ static int con_font_set(struct vc_data * struct console_font font; int rc = -EINVAL; int size; + unsigned int vpitch = op->op == KD_FONT_OP_SET_TALL ? op->height : 32; if (vc->vc_mode != KD_TEXT) return -EINVAL; @@ -4647,7 +4649,9 @@ static int con_font_set(struct vc_data * return -EINVAL; if (op->width <= 0 || op->width > 32 || !op->height || op->height > 32) return -EINVAL; - size = (op->width+7)/8 * 32 * op->charcount; + if (vpitch < op->height) + return -EINVAL; + size = (op->width+7)/8 * vpitch * op->charcount; if (size > max_font_size) return -ENOSPC; @@ -4665,7 +4669,7 @@ static int con_font_set(struct vc_data * else if (vc->vc_sw->con_font_set) { if (vc_is_sel(vc)) clear_selection(); - rc = vc->vc_sw->con_font_set(vc, &font, 32, op->flags); + rc = vc->vc_sw->con_font_set(vc, &font, vpitch, op->flags); } else rc = -ENOSYS; console_unlock(); @@ -4711,8 +4715,10 @@ int con_font_op(struct vc_data *vc, stru { switch (op->op) { case KD_FONT_OP_SET: + case KD_FONT_OP_SET_TALL: return con_font_set(vc, op); case KD_FONT_OP_GET: + case KD_FONT_OP_GET_TALL: return con_font_get(vc, op); case KD_FONT_OP_SET_DEFAULT: return con_font_default(vc, op); Index: linux-6.0/include/uapi/linux/kd.h =================================================================== --- linux-6.0.orig/include/uapi/linux/kd.h +++ linux-6.0/include/uapi/linux/kd.h @@ -161,19 +161,25 @@ struct console_font_op { unsigned int flags; /* KD_FONT_FLAG_* */ unsigned int width, height; /* font size */ unsigned int charcount; - unsigned char __user *data; /* font data with height fixed to 32 */ + unsigned char __user *data; /* font data with vpitch fixed to 32 for + * KD_FONT_OP_SET/GET + */ }; struct console_font { unsigned int width, height; /* font size */ unsigned int charcount; - unsigned char *data; /* font data with height fixed to 32 */ + unsigned char *data; /* font data with vpitch fixed to 32 for + * KD_FONT_OP_SET/GET + */ }; #define KD_FONT_OP_SET 0 /* Set font */ #define KD_FONT_OP_GET 1 /* Get font */ #define KD_FONT_OP_SET_DEFAULT 2 /* Set font to default, data points to name / NULL */ #define KD_FONT_OP_COPY 3 /* Obsolete, do not use */ +#define KD_FONT_OP_SET_TALL 4 /* Set font with vpitch = height */ +#define KD_FONT_OP_GET_TALL 5 /* Get font with vpitch = height */ #define KD_FONT_FLAG_DONT_RECALC 1 /* Don't recalculate hw charcell size [compat] */