From nobody Fri Jan 9 21:03:18 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4dnvPg6MbXz6MMhW for ; Fri, 09 Jan 2026 21:03:19 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dnvPf2bb6z3Snp for ; Fri, 09 Jan 2026 21:03:18 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1767992598; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=bBLuLZ8Xyj0+TAR6oSIPDsSbg9XZWbJRHmfJT1lyv9I=; b=vvWKj0lGK30vs8vK1japzLJ+aj6DyQwE68Udez+HfzJHFXJTR6vYuwi2SB+ZEt3R+WtBiF p/0tnLpaU2pdHeIPIaowVfkZy36uv1ZYw+j8POr19m7osJVtD0+S9+05gG1hfSYgIyv4ds oo9nXfvn7evKBdmBvm6N5LTaQKNgXSQ/6GPdjhus4kckagsDi8/ckFHL7FWKRkG34busQn GzseY2PKZImb9BdBA2PwFjiHZF3jkARRtSIRv6Ho8j2zIeYmFKW29gUyDDrOqn/UDQQdnF f1A0q4lkEXm6MYdBPJOP4RnLOA6JZ+CTDhUDPqSpGVRQdxgxM52Jz/VHlmGgzA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1767992598; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=bBLuLZ8Xyj0+TAR6oSIPDsSbg9XZWbJRHmfJT1lyv9I=; b=wEMZQehChLAXD4QGPqHZPhyyAUXpSe+FRuKuoMNh0SwBQ2KSQlJn1n0IViKk42Jg6D+A0u hao6KlOIrrC0JHUZkx69dv3Krd3EAWzKEBgqgMIbpgZm71vkHIB+YsnWwGC2C3QcKNHnH0 LOGNAyx29zshBRXFEluhP0SvrfrrL1QbrDToYiF6h4sFba9JL54WJtkTdFmHlJgI/ygXkP 7V6Kw5QVWJcIH20O+hjzd791m6q6SKmQMo7GemRmU5CtMyKhx2zCtJu/M4Weply5Z78V7v cImV+W51Hc6vzM0MRZZObx+4NzajTnmoIxk9t5LNSX0YN2/zxeBwwSUb1wZqTg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1767992598; a=rsa-sha256; cv=none; b=eRBRnFdIWbAHc5x2e/YGca6GXBA1sR1owTHqvTmYwHWK4uHxRUnG2vOPTQxHZ3aP6u8OZq yaAxFHSa1jDcjUOAYchqSicur+tUjwwy0aUl18Itgyr5wsOzjLyY7T05qkOB1x36qwq+Mx HOXj/wBoXQ+KY5uvBo+tzhauzycC9AMefeUiNp8a7DoNxZkqBtykxhlLUFMIYoKqqj+t4g S6BL2/m1da7wAucEgyudymVCBOvcnop+6dHOqfWVI4wHt8iWg+csmrOCODYAxBlf2UD4Cb Q/DngnJVw1roFQPnSlQTwxCKOX5k1Om5T1tOhyqKkSDRQvNJ9w9vg22dl+4zpQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4dnvPf25Hyz8n6 for ; Fri, 09 Jan 2026 21:03:18 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id be43 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 09 Jan 2026 21:03:18 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: mothcompute From: Warner Losh Subject: git: 85bf328868c8 - main - linux: support termios2 ioctls List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: imp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 85bf328868c8f6d8fede9d8d4b4ff8a589636990 Auto-Submitted: auto-generated Date: Fri, 09 Jan 2026 21:03:18 +0000 Message-Id: <69616d16.be43.bc04c3d@gitrepo.freebsd.org> The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=85bf328868c8f6d8fede9d8d4b4ff8a589636990 commit 85bf328868c8f6d8fede9d8d4b4ff8a589636990 Author: mothcompute AuthorDate: 2026-01-06 03:19:21 +0000 Commit: Warner Losh CommitDate: 2026-01-09 20:58:25 +0000 linux: support termios2 ioctls Signed-off-by: mothcompute Reviewed by: imp Pull Request: https://github.com/freebsd/freebsd-src/pull/1949 --- sys/compat/linux/linux_ioctl.c | 69 +++++++++++++++++++++++++++++++++++++++++- sys/compat/linux/linux_ioctl.h | 10 ++++++ 2 files changed, 78 insertions(+), 1 deletion(-) diff --git a/sys/compat/linux/linux_ioctl.c b/sys/compat/linux/linux_ioctl.c index ceb17bd040b5..f6c239b08ac2 100644 --- a/sys/compat/linux/linux_ioctl.c +++ b/sys/compat/linux/linux_ioctl.c @@ -331,6 +331,17 @@ struct linux_termios { unsigned char c_cc[LINUX_NCCS]; }; +struct linux_termios2 { + unsigned int c_iflag; + unsigned int c_oflag; + unsigned int c_cflag; + unsigned int c_lflag; + unsigned char c_line; + unsigned char c_cc[LINUX_NCCS]; + unsigned int c_ispeed; + unsigned int c_ospeed; +}; + struct linux_winsize { unsigned short ws_row, ws_col; unsigned short ws_xpixel, ws_ypixel; @@ -386,7 +397,7 @@ bsd_to_linux_speed(int speed, struct speedtab *table) for ( ; table->sp_speed != -1; table++) if (table->sp_speed == speed) return (table->sp_code); - return (-1); + return (LINUX_BOTHER); } static void @@ -508,6 +519,14 @@ bsd_to_linux_termios(struct termios *bios, struct linux_termios *lios) lios->c_line = 0; } +static void +bsd_to_linux_termios2(struct termios *bios, struct linux_termios2 *lios2) +{ + bsd_to_linux_termios(bios, (struct linux_termios *)lios2); + lios2->c_ospeed = bios->c_ospeed; + lios2->c_ispeed = bios->c_ispeed; +} + static void linux_to_bsd_termios(struct linux_termios *lios, struct termios *bios) { @@ -628,6 +647,16 @@ linux_to_bsd_termios(struct linux_termios *lios, struct termios *bios) linux_to_bsd_speed(lios->c_cflag & LINUX_CBAUD, sptab); } +static void +linux_to_bsd_termios2(struct linux_termios2 *lios2, struct termios *bios) +{ + linux_to_bsd_termios((struct linux_termios *)lios2, bios); + if ((lios2->c_cflag & LINUX_CBAUD) == LINUX_BOTHER) + bios->c_ospeed = lios2->c_ospeed; + if ((lios2->c_cflag & LINUX_CIBAUD) == LINUX_BOTHER << LINUX_IBSHIFT) + bios->c_ispeed = lios2->c_ispeed; +} + static void bsd_to_linux_termio(struct termios *bios, struct linux_termio *lio) { @@ -664,6 +693,7 @@ linux_ioctl_termio(struct thread *td, struct linux_ioctl_args *args) { struct termios bios; struct linux_termios lios; + struct linux_termios2 lios2; struct linux_termio lio; struct file *fp; int error; @@ -1001,6 +1031,43 @@ linux_ioctl_termio(struct thread *td, struct linux_ioctl_args *args) args->cmd = TIOCCBRK; error = (sys_ioctl(td, (struct ioctl_args *)args)); break; + + case LINUX_TCGETS2: + error = fo_ioctl(fp, TIOCGETA, (caddr_t)&bios, td->td_ucred, + td); + if (error) + break; + bsd_to_linux_termios2(&bios, &lios2); + error = copyout(&lios2, (void *)args->arg, sizeof(lios2)); + break; + + case LINUX_TCSETS2: + error = copyin((void *)args->arg, &lios2, sizeof(lios2)); + if (error) + break; + linux_to_bsd_termios2(&lios2, &bios); + error = (fo_ioctl(fp, TIOCSETA, (caddr_t)&bios, td->td_ucred, + td)); + break; + + case LINUX_TCSETSW2: + error = copyin((void *)args->arg, &lios2, sizeof(lios2)); + if (error) + break; + linux_to_bsd_termios2(&lios2, &bios); + error = (fo_ioctl(fp, TIOCSETAW, (caddr_t)&bios, td->td_ucred, + td)); + break; + + case LINUX_TCSETSF2: + error = copyin((void *)args->arg, &lios2, sizeof(lios2)); + if (error) + break; + linux_to_bsd_termios2(&lios2, &bios); + error = (fo_ioctl(fp, TIOCSETAF, (caddr_t)&bios, td->td_ucred, + td)); + break; + case LINUX_TIOCGPTN: { int nb; diff --git a/sys/compat/linux/linux_ioctl.h b/sys/compat/linux/linux_ioctl.h index 8345b7e4b719..d01a30538981 100644 --- a/sys/compat/linux/linux_ioctl.h +++ b/sys/compat/linux/linux_ioctl.h @@ -383,6 +383,11 @@ #define LINUX_TIOCSBRK 0x5427 #define LINUX_TIOCCBRK 0x5428 +#define LINUX_TCGETS2 0x542A +#define LINUX_TCSETS2 0x542B +#define LINUX_TCSETSW2 0x542C +#define LINUX_TCSETSF2 0x542D + #define LINUX_TIOCGPTN 0x5430 #define LINUX_TIOCSPTLCK 0x5431 @@ -501,6 +506,7 @@ #define LINUX_FF1 0x0008000 #define LINUX_CBAUD 0x0000100f +#define LINUX_CIBAUD (LINUX_CBAUD << LINUX_IBSHIFT) #define LINUX_B0 0x00000000 #define LINUX_B50 0x00000001 @@ -537,8 +543,12 @@ #define LINUX_HUPCL 0x00000400 #define LINUX_CLOCAL 0x00000800 +#define LINUX_BOTHER 0x00001000 + #define LINUX_CRTSCTS 0x80000000 +#define LINUX_IBSHIFT 16 + /* Linux c_lflag masks */ #define LINUX_ISIG 0x00000001 #define LINUX_ICANON 0x00000002