From: Warner Losh <imp@bsdimp.com>
To: qemu-devel@nongnu.org
Cc: Warner Losh <imp@bsdimp.com>, Kyle Evans <kevans@freebsd.org>,
Stacey Son <sson@FreeBSD.org>,
Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
Subject: [PULL 08/25] bsd-user: Add FreeBSD tty ioctl definitions
Date: Wed, 6 May 2026 20:28:10 -0600 [thread overview]
Message-ID: <20260507022827.44499-9-imp@bsdimp.com> (raw)
In-Reply-To: <20260507022827.44499-1-imp@bsdimp.com>
From: Stacey Son <sson@FreeBSD.org>
Add os-ioctl-ttycom.h with terminal control ioctl definitions including
TARGET_TIOCGETA, TARGET_TIOCSETA, window size ioctls, and the
target_termios structure for terminal I/O control.
Signed-off-by: Stacey Son <sson@FreeBSD.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
Signed-off-by: Warner Losh <imp@bsdimp.com>
---
bsd-user/freebsd/os-ioctl-ttycom.h | 239 +++++++++++++++++++++++++++++
1 file changed, 239 insertions(+)
create mode 100644 bsd-user/freebsd/os-ioctl-ttycom.h
diff --git a/bsd-user/freebsd/os-ioctl-ttycom.h b/bsd-user/freebsd/os-ioctl-ttycom.h
new file mode 100644
index 0000000000..d4af9f2e4d
--- /dev/null
+++ b/bsd-user/freebsd/os-ioctl-ttycom.h
@@ -0,0 +1,239 @@
+/*
+ * FreeBSD ttycom definitions for ioctl(2) emulation
+ *
+ * Copyright (c) 2013 Stacey D. Son
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+#ifndef BSD_USER_FREEBSD_OS_IOCTL_TTYCOM_H
+#define BSD_USER_FREEBSD_OS_IOCTL_TTYCOM_H
+
+#include "os-ioctl-ioccom.h"
+
+/* From sys/ttycom.h and sys/_termios.h */
+
+#define TARGET_VEOF 0 /* ICANON */
+#define TARGET_VEOL 1 /* ICANON */
+#define TARGET_VEOL2 2 /* ICANON together with IEXTEN */
+#define TARGET_VERASE 3 /* ICANON */
+#define TARGET_VWERASE 4 /* ICANON together with IEXTEN */
+#define TARGET_VKILL 5 /* ICANON */
+#define TARGET_VREPRINT 6 /* ICANON together with IEXTEN */
+#define TARGET_VERASE2 7 /* ICANON */
+#define TARGET_VINTR 8 /* ISIG */
+#define TARGET_VQUIT 9 /* ISIG */
+#define TARGET_VSUSP 10 /* ISIG */
+#define TARGET_VDSUSP 11 /* ISIG together with IEXTEN */
+#define TARGET_VSTART 12 /* IXON, IXOFF */
+#define TARGET_VSTOP 13 /* IXON, IXOFF */
+#define TARGET_VLNEXT 14 /* IEXTEN */
+#define TARGET_VDISCARD 15 /* IEXTEN */
+#define TARGET_VMIN 16 /* !ICANON */
+#define TARGET_VTIME 17 /* !ICANON */
+#define TARGET_VSTATUS 18 /* ICANON together with IEXTEN */
+/* 19 spare 2 */
+#define TARGET_NCCS 20
+
+/*
+ * Input flags - software input processing
+ */
+#define TARGET_IGNBRK 0x00000001 /* ignore BREAK condition */
+#define TARGET_BRKINT 0x00000002 /* map BREAK to SIGINTR */
+#define TARGET_IGNPAR 0x00000004 /* ignore (discard) parity errors */
+#define TARGET_PARMRK 0x00000008 /* mark parity and framing errors */
+#define TARGET_INPCK 0x00000010 /* enable checking of parity errors */
+#define TARGET_ISTRIP 0x00000020 /* strip 8th bit off chars */
+#define TARGET_INLCR 0x00000040 /* map NL into CR */
+#define TARGET_IGNCR 0x00000080 /* ignore CR */
+#define TARGET_ICRNL 0x00000100 /* map CR to NL (ala CRMOD) */
+#define TARGET_IXON 0x00000200 /* enable output flow control */
+#define TARGET_IXOFF 0x00000400 /* enable input flow control */
+#define TARGET_IXANY 0x00000800 /* any char will restart after stop */
+#define TARGET_IMAXBEL 0x00002000 /* ring bell on input queue full */
+#define TARGET_IUTF8 0x00004000 /* assume input is utf-8 encoded */
+
+/*
+ * Output flags - software output processing
+ */
+#define TARGET_OPOST 0x00000001 /* enable following output processing */
+#define TARGET_ONLCR 0x00000002 /* map NL to CR-NL (ala CRMOD) */
+#define TARGET_TABDLY 0x00000004 /* tab delay mask */
+#define TARGET_TAB0 0x00000000 /* no tab delay and expansion */
+#define TARGET_TAB3 0x00000004 /* expand tabs to spaces */
+#define TARGET_ONOEOT 0x00000008 /* discard EOT's (^D) on output) */
+#define TARGET_OCRNL 0x00000010 /* map CR to NL on output */
+#define TARGET_ONOCR 0x00000020 /* no CR output at column 0 */
+#define TARGET_ONLRET 0x00000040 /* NL performs CR function */
+
+/*
+ * Control flags - hardware control of terminal
+ */
+#define TARGET_CIGNORE 0x00000001 /* ignore control flags */
+#define TARGET_CSIZE 0x00000300 /* character size mask */
+#define TARGET_CS5 0x00000000 /* 5 bits (pseudo) */
+#define TARGET_CS6 0x00000100 /* 6 bits */
+#define TARGET_CS7 0x00000200 /* 7 bits */
+#define TARGET_CS8 0x00000300 /* 8 bits */
+#define TARGET_CSTOPB 0x00000400 /* send 2 stop bits */
+#define TARGET_CREAD 0x00000800 /* enable receiver */
+#define TARGET_PARENB 0x00001000 /* parity enable */
+#define TARGET_PARODD 0x00002000 /* odd parity, else even */
+#define TARGET_HUPCL 0x00004000 /* hang up on last close */
+#define TARGET_CLOCAL 0x00008000 /* ignore modem status lines */
+#define TARGET_CCTS_OFLOW 0x00010000 /* CTS flow control of output */
+#define TARGET_CRTSCTS (TARGET_CCTS_OFLOW | TARGET_CRTS_IFLOW)
+#define TARGET_CRTS_IFLOW 0x00020000 /* RTS flow control of input */
+#define TARGET_CDTR_IFLOW 0x00040000 /* DTR flow control of input */
+#define TARGET_CDSR_OFLOW 0x00080000 /* DSR flow control of output */
+#define TARGET_CCAR_OFLOW 0x00100000 /* DCD flow control of output */
+#define TARGET_CNO_RTSDTR 0x00200000 /* Do not assert RTS or DTR automatically */
+
+/*
+ * "Local" flags - dumping ground for other state
+ */
+#define TARGET_ECHOKE 0x00000001 /* visual erase for line kill */
+#define TARGET_ECHOE 0x00000002 /* visually erase chars */
+#define TARGET_ECHOK 0x00000004 /* echo NL after line kill */
+#define TARGET_ECHO 0x00000008 /* enable echoing */
+#define TARGET_ECHONL 0x00000010 /* echo NL even if ECHO is off */
+#define TARGET_ECHOPRT 0x00000020 /* visual erase mode for hardcopy */
+#define TARGET_ECHOCTL 0x00000040 /* echo control chars as ^(Char) */
+#define TARGET_ISIG 0x00000080 /* enable signals INTR, QUIT, [D]SUSP */
+#define TARGET_ICANON 0x00000100 /* canonicalize input lines */
+#define TARGET_ALTWERASE 0x00000200 /* use alternate WERASE algorithm */
+#define TARGET_IEXTEN 0x00000400 /* enable DISCARD and LNEXT */
+#define TARGET_EXTPROC 0x00000800 /* external processing */
+#define TARGET_TOSTOP 0x00400000 /* stop background jobs from output */
+#define TARGET_FLUSHO 0x00800000 /* output being flushed (state) */
+#define TARGET_NOKERNINFO 0x02000000 /* no kernel output from VSTATUS */
+#define TARGET_PENDIN 0x20000000 /* XXX retype pending input (state) */
+#define TARGET_NOFLSH 0x80000000 /* don't flush after interrupt */
+
+struct target_termios {
+ uint32_t c_iflag; /* input flags */
+ uint32_t c_oflag; /* output flags */
+ uint32_t c_cflag; /* control flags */
+ uint32_t c_lflag; /* local flags */
+ uint8_t c_cc[TARGET_NCCS]; /* control chars */
+ uint32_t c_ispeed; /* input speed */
+ uint32_t c_ospeed; /* output speed */
+};
+
+
+struct target_winsize {
+ uint16_t ws_row; /* rows, in characters */
+ uint16_t ws_col; /* columns, in characters */
+ uint16_t ws_xpixel; /* horizontal size, pixels */
+ uint16_t ws_ypixel; /* vertical size, pixels */
+};
+
+ /* 0-2 compat */
+ /* 3-7 unused */
+ /* 8-10 compat */
+ /* 11-12 unused */
+#define TARGET_TIOCEXCL TARGET_IO('t', 13) /* set exclusive use of tty */
+#define TARGET_TIOCNXCL TARGET_IO('t', 14) /* reset exclusive use of tty */
+#define TARGET_TIOCGPTN TARGET_IOR('t', 15, int) /* Get pts number. */
+#define TARGET_TIOCFLUSH TARGET_IOW('t', 16, int) /* flush buffers */
+ /* 17-18 compat */
+/* get termios struct */
+#define TARGET_TIOCGETA TARGET_IOR('t', 19, struct target_termios)
+/* set termios struct */
+#define TARGET_TIOCSETA TARGET_IOW('t', 20, struct target_termios)
+/* drain output, set */
+#define TARGET_TIOCSETAW TARGET_IOW('t', 21, struct target_termios)
+/* drn out, fls in, set */
+#define TARGET_TIOCSETAF TARGET_IOW('t', 22, struct target_termios)
+ /* 23-25 unused */
+#define TARGET_TIOCGETD TARGET_IOR('t', 26, int) /* get line discipline */
+#define TARGET_TIOCSETD TARGET_IOW('t', 27, int) /* set line discipline */
+#define TARGET_TIOCPTMASTER TARGET_IO('t', 28) /* pts master validation */
+ /* 29-85 unused */
+/* get ttywait timeout */
+#define TARGET_TIOCGDRAINWAIT TARGET_IOR('t', 86, int)
+/* set ttywait timeout */
+#define TARGET_TIOCSDRAINWAIT TARGET_IOW('t', 87, int)
+ /* 88 unused */
+ /* 89-91 conflicts: tun and tap */
+/* enable/get timestamp of last input event */
+#define TARGET_TIOCTIMESTAMP TARGET_IOR('t', 89, struct target_timeval)
+/* modem: get wait on close */
+#define TARGET_TIOCMGDTRWAIT TARGET_IOR('t', 90, int)
+/* modem: set wait on close */
+#define TARGET_TIOCMSDTRWAIT TARGET_IOW('t', 91, int)
+ /* 92-93 tun and tap */
+ /* 94-97 conflicts: tun and tap */
+/* wait till output drained */
+#define TARGET_TIOCDRAIN TARGET_IO('t', 94)
+ /* pty: generate signal */
+#define TARGET_TIOCSIG TARGET_IOWINT('t', 95)
+/* pty: external processing */
+#define TARGET_TIOCEXT TARGET_IOW('t', 96, int)
+/* become controlling tty */
+#define TARGET_TIOCSCTTY TARGET_IO('t', 97)
+/* become virtual console */
+#define TARGET_TIOCCONS TARGET_IOW('t', 98, int)
+/* get session id */
+#define TARGET_TIOCGSID TARGET_IOR('t', 99, int)
+ /* 100 unused */
+/* simulate ^T status message */
+#define TARGET_TIOCSTAT TARGET_IO('t', 101)
+ /* pty: set/clr usr cntl mode */
+#define TARGET_TIOCUCNTL TARGET_IOW('t', 102, int)
+/* usr cntl op "n" */
+#define TARGET_TIOCCMD(n) TARGET_IO('u', n)
+/* set window size */
+#define TARGET_TIOCSWINSZ TARGET_IOW('t', 103, struct target_winsize)
+/* get window size */
+#define TARGET_TIOCGWINSZ TARGET_IOR('t', 104, struct target_winsize)
+ /* 105 unused */
+/* get all modem bits */
+#define TARGET_TIOCMGET TARGET_IOR('t', 106, int)
+#define TARGET_TIOCM_LE 0001 /* line enable */
+#define TARGET_TIOCM_DTR 0002 /* data terminal ready */
+#define TARGET_TIOCM_RTS 0004 /* request to send */
+#define TARGET_TIOCM_ST 0010 /* secondary transmit */
+#define TARGET_TIOCM_SR 0020 /* secondary receive */
+#define TARGET_TIOCM_CTS 0040 /* clear to send */
+#define TARGET_TIOCM_DCD 0100 /* data carrier detect */
+#define TARGET_TIOCM_RI 0200 /* ring indicate */
+#define TARGET_TIOCM_DSR 0400 /* data set ready */
+#define TARGET_TIOCM_CD TARGET_TIOCM_DCD
+#define TARGET_TIOCM_CAR TARGET_TIOCM_DCD
+#define TARGET_TIOCM_RNG TARGET_TIOCM_RI
+#define TARGET_TIOCMBIC TARGET_IOW('t', 107, int) /* bic modem bits */
+#define TARGET_TIOCMBIS TARGET_IOW('t', 108, int) /* bis modem bits */
+#define TARGET_TIOCMSET TARGET_IOW('t', 109, int) /* set all modem bits */
+/* start output, like ^Q */
+#define TARGET_TIOCSTART TARGET_IO('t', 110)
+/* stop output, like ^S */
+#define TARGET_TIOCSTOP TARGET_IO('t', 111)
+/* pty: set/clear packet mode */
+#define TARGET_TIOCPKT TARGET_IOW('t', 112, int)
+#define TARGET_TIOCPKT_DATA 0x00 /* data packet */
+#define TARGET_TIOCPKT_FLUSHREAD 0x01 /* flush packet */
+#define TARGET_TIOCPKT_FLUSHWRITE 0x02 /* flush packet */
+#define TARGET_TIOCPKT_STOP 0x04 /* stop output */
+#define TARGET_TIOCPKT_START 0x08 /* start output */
+#define TARGET_TIOCPKT_NOSTOP 0x10 /* no more ^S, ^Q */
+#define TARGET_TIOCPKT_DOSTOP 0x20 /* now do ^S ^Q */
+#define TARGET_TIOCPKT_IOCTL 0x40 /* state change of pty driver */
+#define TARGET_TIOCNOTTY TARGET_IO('t', 113) /* void tty association */
+#define TARGET_TIOCSTI TARGET_IOW('t', 114, char) /* simulate terminal input */
+#define TARGET_TIOCOUTQ TARGET_IOR('t', 115, int) /* output queue size */
+ /* 116-117 compat */
+#define TARGET_TIOCSPGRP TARGET_IOW('t', 118, int) /* set pgrp of tty */
+#define TARGET_TIOCGPGRP TARGET_IOR('t', 119, int) /* get pgrp of tty */
+#define TARGET_TIOCCDTR TARGET_IO('t', 120) /* clear data terminal ready */
+#define TARGET_TIOCSDTR TARGET_IO('t', 121) /* set data terminal ready */
+#define TARGET_TIOCCBRK TARGET_IO('t', 122) /* clear break bit */
+#define TARGET_TIOCSBRK TARGET_IO('t', 123) /* set break bit */
+ /* 124-127 compat */
+
+#define TARGET_TTYDISC 0 /* termios tty line discipline */
+#define TARGET_SLIPDISC 4 /* serial IP discipline */
+#define TARGET_PPPDISC 5 /* PPP discipline */
+#define TARGET_NETGRAPHDISC 6 /* Netgraph tty node discipline */
+#define TARGET_H4DISC 7 /* Netgraph Bluetooth H4 discipline */
+
+#endif /* BSD_USER_FREEBSD_OS_IOCTL_TTYCOM_H */
--
2.52.0
next prev parent reply other threads:[~2026-05-07 2:31 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-07 2:28 [PULL 00/25] Bsd user 2026 05 patches Warner Losh
2026-05-07 2:28 ` [PULL 01/25] bsd-user: Switch to SPDX-License-Expression Warner Losh
2026-05-07 2:28 ` [PULL 02/25] bsd-user: Add syscall header generator for FreeBSD Warner Losh
2026-05-07 2:28 ` [PULL 03/25] bsd-user: Delete sbrk and sstk system calls Warner Losh
2026-05-07 2:28 ` [PULL 04/25] bsd-user: Create os-syscall.h Warner Losh
2026-05-07 2:28 ` [PULL 05/25] bsd-user: Switch to generated syscall_nr.h Warner Losh
2026-05-07 2:28 ` [PULL 06/25] bsd-user: Copy linux-user/thunk.c to bsd-user Warner Losh
2026-05-07 2:28 ` [PULL 07/25] bsd-user: ioctl: add common definitions Warner Losh
2026-05-07 2:28 ` Warner Losh [this message]
2026-05-07 2:28 ` [PULL 09/25] bsd-user: Add FreeBSD file I/O ioctl definitions Warner Losh
2026-05-07 2:28 ` [PULL 10/25] bsd-user: Add FreeBSD socket " Warner Losh
2026-05-07 2:28 ` [PULL 11/25] bsd-user: Add FreeBSD cryptodev " Warner Losh
2026-05-07 2:28 ` [PULL 12/25] bsd-user: Add FreeBSD disk " Warner Losh
2026-05-07 2:28 ` [PULL 13/25] bsd-user: Add FreeBSD IPv6 " Warner Losh
2026-05-07 2:28 ` [PULL 14/25] bsd-user: Add FreeBSD ioctl type definitions Warner Losh
2026-05-07 2:28 ` [PULL 15/25] bsd-user: Add FreeBSD ioctl command table Warner Losh
2026-05-07 2:28 ` [PULL 16/25] bsd-user: Add bsd-ioctl.h header Warner Losh
2026-05-07 2:28 ` [PULL 17/25] bsd-user: Add target_sockaddr and safe_ioctl to syscall_defs.h Warner Losh
2026-05-07 2:28 ` [PULL 18/25] bsd-user: Add bsd-ioctl.c infrastructure and termios conversion Warner Losh
2026-05-07 2:28 ` [PULL 19/25] bsd-user: Add log_unsupported_ioctl function Warner Losh
2026-05-07 2:28 ` [PULL 20/25] bsd-user: Add do_ioctl_unsupported function Warner Losh
2026-05-07 2:28 ` [PULL 21/25] bsd-user: Add target_to_host_sockaddr_in6 function Warner Losh
2026-05-07 2:28 ` [PULL 22/25] bsd-user: Add do_ioctl_in6_ifreq_sockaddr_int function Warner Losh
2026-05-07 2:28 ` [PULL 23/25] bsd-user: Add do_bsd_ioctl main function Warner Losh
2026-05-07 2:28 ` [PULL 24/25] bsd-user: Add init_bsd_ioctl function Warner Losh
2026-05-07 2:28 ` [PULL 25/25] bsd-user: Add call to do_bsd_ioctl and add bsd-ioctl.c to the build Warner Losh
2026-05-11 14:21 ` [PULL 00/25] Bsd user 2026 05 patches Stefan Hajnoczi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260507022827.44499-9-imp@bsdimp.com \
--to=imp@bsdimp.com \
--cc=kevans@freebsd.org \
--cc=pierrick.bouvier@oss.qualcomm.com \
--cc=qemu-devel@nongnu.org \
--cc=sson@FreeBSD.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox