master
h 239 lines 11.5 KB
Raw
1 /*
2 * FreeBSD ttycom definitions for ioctl(2) emulation
3 *
4 * Copyright (c) 2013 Stacey D. Son
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
8 #ifndef BSD_USER_FREEBSD_OS_IOCTL_TTYCOM_H
9 #define BSD_USER_FREEBSD_OS_IOCTL_TTYCOM_H
10
11 #include "os-ioctl-ioccom.h"
12
13 /* From sys/ttycom.h and sys/_termios.h */
14
15 #define TARGET_VEOF 0 /* ICANON */
16 #define TARGET_VEOL 1 /* ICANON */
17 #define TARGET_VEOL2 2 /* ICANON together with IEXTEN */
18 #define TARGET_VERASE 3 /* ICANON */
19 #define TARGET_VWERASE 4 /* ICANON together with IEXTEN */
20 #define TARGET_VKILL 5 /* ICANON */
21 #define TARGET_VREPRINT 6 /* ICANON together with IEXTEN */
22 #define TARGET_VERASE2 7 /* ICANON */
23 #define TARGET_VINTR 8 /* ISIG */
24 #define TARGET_VQUIT 9 /* ISIG */
25 #define TARGET_VSUSP 10 /* ISIG */
26 #define TARGET_VDSUSP 11 /* ISIG together with IEXTEN */
27 #define TARGET_VSTART 12 /* IXON, IXOFF */
28 #define TARGET_VSTOP 13 /* IXON, IXOFF */
29 #define TARGET_VLNEXT 14 /* IEXTEN */
30 #define TARGET_VDISCARD 15 /* IEXTEN */
31 #define TARGET_VMIN 16 /* !ICANON */
32 #define TARGET_VTIME 17 /* !ICANON */
33 #define TARGET_VSTATUS 18 /* ICANON together with IEXTEN */
34 /* 19 spare 2 */
35 #define TARGET_NCCS 20
36
37 /*
38 * Input flags - software input processing
39 */
40 #define TARGET_IGNBRK 0x00000001 /* ignore BREAK condition */
41 #define TARGET_BRKINT 0x00000002 /* map BREAK to SIGINTR */
42 #define TARGET_IGNPAR 0x00000004 /* ignore (discard) parity errors */
43 #define TARGET_PARMRK 0x00000008 /* mark parity and framing errors */
44 #define TARGET_INPCK 0x00000010 /* enable checking of parity errors */
45 #define TARGET_ISTRIP 0x00000020 /* strip 8th bit off chars */
46 #define TARGET_INLCR 0x00000040 /* map NL into CR */
47 #define TARGET_IGNCR 0x00000080 /* ignore CR */
48 #define TARGET_ICRNL 0x00000100 /* map CR to NL (ala CRMOD) */
49 #define TARGET_IXON 0x00000200 /* enable output flow control */
50 #define TARGET_IXOFF 0x00000400 /* enable input flow control */
51 #define TARGET_IXANY 0x00000800 /* any char will restart after stop */
52 #define TARGET_IMAXBEL 0x00002000 /* ring bell on input queue full */
53 #define TARGET_IUTF8 0x00004000 /* assume input is utf-8 encoded */
54
55 /*
56 * Output flags - software output processing
57 */
58 #define TARGET_OPOST 0x00000001 /* enable following output processing */
59 #define TARGET_ONLCR 0x00000002 /* map NL to CR-NL (ala CRMOD) */
60 #define TARGET_TABDLY 0x00000004 /* tab delay mask */
61 #define TARGET_TAB0 0x00000000 /* no tab delay and expansion */
62 #define TARGET_TAB3 0x00000004 /* expand tabs to spaces */
63 #define TARGET_ONOEOT 0x00000008 /* discard EOT's (^D) on output) */
64 #define TARGET_OCRNL 0x00000010 /* map CR to NL on output */
65 #define TARGET_ONOCR 0x00000020 /* no CR output at column 0 */
66 #define TARGET_ONLRET 0x00000040 /* NL performs CR function */
67
68 /*
69 * Control flags - hardware control of terminal
70 */
71 #define TARGET_CIGNORE 0x00000001 /* ignore control flags */
72 #define TARGET_CSIZE 0x00000300 /* character size mask */
73 #define TARGET_CS5 0x00000000 /* 5 bits (pseudo) */
74 #define TARGET_CS6 0x00000100 /* 6 bits */
75 #define TARGET_CS7 0x00000200 /* 7 bits */
76 #define TARGET_CS8 0x00000300 /* 8 bits */
77 #define TARGET_CSTOPB 0x00000400 /* send 2 stop bits */
78 #define TARGET_CREAD 0x00000800 /* enable receiver */
79 #define TARGET_PARENB 0x00001000 /* parity enable */
80 #define TARGET_PARODD 0x00002000 /* odd parity, else even */
81 #define TARGET_HUPCL 0x00004000 /* hang up on last close */
82 #define TARGET_CLOCAL 0x00008000 /* ignore modem status lines */
83 #define TARGET_CCTS_OFLOW 0x00010000 /* CTS flow control of output */
84 #define TARGET_CRTSCTS (TARGET_CCTS_OFLOW | TARGET_CRTS_IFLOW)
85 #define TARGET_CRTS_IFLOW 0x00020000 /* RTS flow control of input */
86 #define TARGET_CDTR_IFLOW 0x00040000 /* DTR flow control of input */
87 #define TARGET_CDSR_OFLOW 0x00080000 /* DSR flow control of output */
88 #define TARGET_CCAR_OFLOW 0x00100000 /* DCD flow control of output */
89 #define TARGET_CNO_RTSDTR 0x00200000 /* Do not assert RTS or DTR automatically */
90
91 /*
92 * "Local" flags - dumping ground for other state
93 */
94 #define TARGET_ECHOKE 0x00000001 /* visual erase for line kill */
95 #define TARGET_ECHOE 0x00000002 /* visually erase chars */
96 #define TARGET_ECHOK 0x00000004 /* echo NL after line kill */
97 #define TARGET_ECHO 0x00000008 /* enable echoing */
98 #define TARGET_ECHONL 0x00000010 /* echo NL even if ECHO is off */
99 #define TARGET_ECHOPRT 0x00000020 /* visual erase mode for hardcopy */
100 #define TARGET_ECHOCTL 0x00000040 /* echo control chars as ^(Char) */
101 #define TARGET_ISIG 0x00000080 /* enable signals INTR, QUIT, [D]SUSP */
102 #define TARGET_ICANON 0x00000100 /* canonicalize input lines */
103 #define TARGET_ALTWERASE 0x00000200 /* use alternate WERASE algorithm */
104 #define TARGET_IEXTEN 0x00000400 /* enable DISCARD and LNEXT */
105 #define TARGET_EXTPROC 0x00000800 /* external processing */
106 #define TARGET_TOSTOP 0x00400000 /* stop background jobs from output */
107 #define TARGET_FLUSHO 0x00800000 /* output being flushed (state) */
108 #define TARGET_NOKERNINFO 0x02000000 /* no kernel output from VSTATUS */
109 #define TARGET_PENDIN 0x20000000 /* XXX retype pending input (state) */
110 #define TARGET_NOFLSH 0x80000000 /* don't flush after interrupt */
111
112 struct target_termios {
113 uint32_t c_iflag; /* input flags */
114 uint32_t c_oflag; /* output flags */
115 uint32_t c_cflag; /* control flags */
116 uint32_t c_lflag; /* local flags */
117 uint8_t c_cc[TARGET_NCCS]; /* control chars */
118 uint32_t c_ispeed; /* input speed */
119 uint32_t c_ospeed; /* output speed */
120 };
121
122
123 struct target_winsize {
124 uint16_t ws_row; /* rows, in characters */
125 uint16_t ws_col; /* columns, in characters */
126 uint16_t ws_xpixel; /* horizontal size, pixels */
127 uint16_t ws_ypixel; /* vertical size, pixels */
128 };
129
130 /* 0-2 compat */
131 /* 3-7 unused */
132 /* 8-10 compat */
133 /* 11-12 unused */
134 #define TARGET_TIOCEXCL TARGET_IO('t', 13) /* set exclusive use of tty */
135 #define TARGET_TIOCNXCL TARGET_IO('t', 14) /* reset exclusive use of tty */
136 #define TARGET_TIOCGPTN TARGET_IOR('t', 15, int) /* Get pts number. */
137 #define TARGET_TIOCFLUSH TARGET_IOW('t', 16, int) /* flush buffers */
138 /* 17-18 compat */
139 /* get termios struct */
140 #define TARGET_TIOCGETA TARGET_IOR('t', 19, struct target_termios)
141 /* set termios struct */
142 #define TARGET_TIOCSETA TARGET_IOW('t', 20, struct target_termios)
143 /* drain output, set */
144 #define TARGET_TIOCSETAW TARGET_IOW('t', 21, struct target_termios)
145 /* drn out, fls in, set */
146 #define TARGET_TIOCSETAF TARGET_IOW('t', 22, struct target_termios)
147 /* 23-25 unused */
148 #define TARGET_TIOCGETD TARGET_IOR('t', 26, int) /* get line discipline */
149 #define TARGET_TIOCSETD TARGET_IOW('t', 27, int) /* set line discipline */
150 #define TARGET_TIOCPTMASTER TARGET_IO('t', 28) /* pts master validation */
151 /* 29-85 unused */
152 /* get ttywait timeout */
153 #define TARGET_TIOCGDRAINWAIT TARGET_IOR('t', 86, int)
154 /* set ttywait timeout */
155 #define TARGET_TIOCSDRAINWAIT TARGET_IOW('t', 87, int)
156 /* 88 unused */
157 /* 89-91 conflicts: tun and tap */
158 /* enable/get timestamp of last input event */
159 #define TARGET_TIOCTIMESTAMP TARGET_IOR('t', 89, struct target_timeval)
160 /* modem: get wait on close */
161 #define TARGET_TIOCMGDTRWAIT TARGET_IOR('t', 90, int)
162 /* modem: set wait on close */
163 #define TARGET_TIOCMSDTRWAIT TARGET_IOW('t', 91, int)
164 /* 92-93 tun and tap */
165 /* 94-97 conflicts: tun and tap */
166 /* wait till output drained */
167 #define TARGET_TIOCDRAIN TARGET_IO('t', 94)
168 /* pty: generate signal */
169 #define TARGET_TIOCSIG TARGET_IOWINT('t', 95)
170 /* pty: external processing */
171 #define TARGET_TIOCEXT TARGET_IOW('t', 96, int)
172 /* become controlling tty */
173 #define TARGET_TIOCSCTTY TARGET_IO('t', 97)
174 /* become virtual console */
175 #define TARGET_TIOCCONS TARGET_IOW('t', 98, int)
176 /* get session id */
177 #define TARGET_TIOCGSID TARGET_IOR('t', 99, int)
178 /* 100 unused */
179 /* simulate ^T status message */
180 #define TARGET_TIOCSTAT TARGET_IO('t', 101)
181 /* pty: set/clr usr cntl mode */
182 #define TARGET_TIOCUCNTL TARGET_IOW('t', 102, int)
183 /* usr cntl op "n" */
184 #define TARGET_TIOCCMD(n) TARGET_IO('u', n)
185 /* set window size */
186 #define TARGET_TIOCSWINSZ TARGET_IOW('t', 103, struct target_winsize)
187 /* get window size */
188 #define TARGET_TIOCGWINSZ TARGET_IOR('t', 104, struct target_winsize)
189 /* 105 unused */
190 /* get all modem bits */
191 #define TARGET_TIOCMGET TARGET_IOR('t', 106, int)
192 #define TARGET_TIOCM_LE 0001 /* line enable */
193 #define TARGET_TIOCM_DTR 0002 /* data terminal ready */
194 #define TARGET_TIOCM_RTS 0004 /* request to send */
195 #define TARGET_TIOCM_ST 0010 /* secondary transmit */
196 #define TARGET_TIOCM_SR 0020 /* secondary receive */
197 #define TARGET_TIOCM_CTS 0040 /* clear to send */
198 #define TARGET_TIOCM_DCD 0100 /* data carrier detect */
199 #define TARGET_TIOCM_RI 0200 /* ring indicate */
200 #define TARGET_TIOCM_DSR 0400 /* data set ready */
201 #define TARGET_TIOCM_CD TARGET_TIOCM_DCD
202 #define TARGET_TIOCM_CAR TARGET_TIOCM_DCD
203 #define TARGET_TIOCM_RNG TARGET_TIOCM_RI
204 #define TARGET_TIOCMBIC TARGET_IOW('t', 107, int) /* bic modem bits */
205 #define TARGET_TIOCMBIS TARGET_IOW('t', 108, int) /* bis modem bits */
206 #define TARGET_TIOCMSET TARGET_IOW('t', 109, int) /* set all modem bits */
207 /* start output, like ^Q */
208 #define TARGET_TIOCSTART TARGET_IO('t', 110)
209 /* stop output, like ^S */
210 #define TARGET_TIOCSTOP TARGET_IO('t', 111)
211 /* pty: set/clear packet mode */
212 #define TARGET_TIOCPKT TARGET_IOW('t', 112, int)
213 #define TARGET_TIOCPKT_DATA 0x00 /* data packet */
214 #define TARGET_TIOCPKT_FLUSHREAD 0x01 /* flush packet */
215 #define TARGET_TIOCPKT_FLUSHWRITE 0x02 /* flush packet */
216 #define TARGET_TIOCPKT_STOP 0x04 /* stop output */
217 #define TARGET_TIOCPKT_START 0x08 /* start output */
218 #define TARGET_TIOCPKT_NOSTOP 0x10 /* no more ^S, ^Q */
219 #define TARGET_TIOCPKT_DOSTOP 0x20 /* now do ^S ^Q */
220 #define TARGET_TIOCPKT_IOCTL 0x40 /* state change of pty driver */
221 #define TARGET_TIOCNOTTY TARGET_IO('t', 113) /* void tty association */
222 #define TARGET_TIOCSTI TARGET_IOW('t', 114, char) /* simulate terminal input */
223 #define TARGET_TIOCOUTQ TARGET_IOR('t', 115, int) /* output queue size */
224 /* 116-117 compat */
225 #define TARGET_TIOCSPGRP TARGET_IOW('t', 118, int) /* set pgrp of tty */
226 #define TARGET_TIOCGPGRP TARGET_IOR('t', 119, int) /* get pgrp of tty */
227 #define TARGET_TIOCCDTR TARGET_IO('t', 120) /* clear data terminal ready */
228 #define TARGET_TIOCSDTR TARGET_IO('t', 121) /* set data terminal ready */
229 #define TARGET_TIOCCBRK TARGET_IO('t', 122) /* clear break bit */
230 #define TARGET_TIOCSBRK TARGET_IO('t', 123) /* set break bit */
231 /* 124-127 compat */
232
233 #define TARGET_TTYDISC 0 /* termios tty line discipline */
234 #define TARGET_SLIPDISC 4 /* serial IP discipline */
235 #define TARGET_PPPDISC 5 /* PPP discipline */
236 #define TARGET_NETGRAPHDISC 6 /* Netgraph tty node discipline */
237 #define TARGET_H4DISC 7 /* Netgraph Bluetooth H4 discipline */
238
239 #endif /* BSD_USER_FREEBSD_OS_IOCTL_TTYCOM_H */