1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2/*
3 * This file is subject to the terms and conditions of the GNU General Public
4 * License.  See the file "COPYING" in the main directory of this archive
5 * for more details.
6 *
7 * Copyright (C) 1995, 96, 99, 2001, 06 Ralf Baechle
8 * Copyright (C) 1999 Silicon Graphics, Inc.
9 * Copyright (C) 2001 MIPS Technologies, Inc.
10 */
11#ifndef _ASM_TERMBITS_H
12#define _ASM_TERMBITS_H
13
14#include <asm-generic/termbits-common.h>
15
16typedef unsigned int	tcflag_t;
17
18/*
19 * The ABI says nothing about NCC but seems to use NCCS as
20 * replacement for it in struct termio
21 */
22#define NCCS	23
23struct termios {
24	tcflag_t c_iflag;		/* input mode flags */
25	tcflag_t c_oflag;		/* output mode flags */
26	tcflag_t c_cflag;		/* control mode flags */
27	tcflag_t c_lflag;		/* local mode flags */
28	cc_t c_line;			/* line discipline */
29	cc_t c_cc[NCCS];		/* control characters */
30};
31
32struct termios2 {
33	tcflag_t c_iflag;		/* input mode flags */
34	tcflag_t c_oflag;		/* output mode flags */
35	tcflag_t c_cflag;		/* control mode flags */
36	tcflag_t c_lflag;		/* local mode flags */
37	cc_t c_line;			/* line discipline */
38	cc_t c_cc[NCCS];		/* control characters */
39	speed_t c_ispeed;		/* input speed */
40	speed_t c_ospeed;		/* output speed */
41};
42
43struct ktermios {
44	tcflag_t c_iflag;		/* input mode flags */
45	tcflag_t c_oflag;		/* output mode flags */
46	tcflag_t c_cflag;		/* control mode flags */
47	tcflag_t c_lflag;		/* local mode flags */
48	cc_t c_line;			/* line discipline */
49	cc_t c_cc[NCCS];		/* control characters */
50	speed_t c_ispeed;		/* input speed */
51	speed_t c_ospeed;		/* output speed */
52};
53
54/* c_cc characters */
55#define VINTR		 0		/* Interrupt character [ISIG] */
56#define VQUIT		 1		/* Quit character [ISIG] */
57#define VERASE		 2		/* Erase character [ICANON] */
58#define VKILL		 3		/* Kill-line character [ICANON] */
59#define VMIN		 4		/* Minimum number of bytes read at once [!ICANON] */
60#define VTIME		 5		/* Time-out value (tenths of a second) [!ICANON] */
61#define VEOL2		 6		/* Second EOL character [ICANON] */
62#define VSWTC		 7		/* ??? */
63#define VSWTCH		VSWTC
64#define VSTART		 8		/* Start (X-ON) character [IXON, IXOFF] */
65#define VSTOP		 9		/* Stop (X-OFF) character [IXON, IXOFF] */
66#define VSUSP		10		/* Suspend character [ISIG] */
67#if 0
68/*
69 * VDSUSP is not supported
70 */
71#define VDSUSP		11		/* Delayed suspend character [ISIG] */
72#endif
73#define VREPRINT	12		/* Reprint-line character [ICANON] */
74#define VDISCARD	13		/* Discard character [IEXTEN] */
75#define VWERASE		14		/* Word-erase character [ICANON] */
76#define VLNEXT		15		/* Literal-next character [IEXTEN] */
77#define VEOF		16		/* End-of-file character [ICANON] */
78#define VEOL		17		/* End-of-line character [ICANON] */
79
80/* c_iflag bits */
81#define IUCLC	0x0200		/* Map upper case to lower case on input */
82#define IXON	0x0400		/* Enable start/stop output control */
83#define IXOFF	0x1000		/* Enable start/stop input control */
84#define IMAXBEL	0x2000		/* Ring bell when input queue is full */
85#define IUTF8	0x4000		/* Input is UTF-8 */
86
87/* c_oflag bits */
88#define OLCUC	0x00002		/* Map lower case to upper case on output */
89#define ONLCR	0x00004		/* Map NL to CR-NL on output */
90#define NLDLY	0x00100
91#define   NL0	0x00000
92#define   NL1	0x00100
93#define CRDLY	0x00600
94#define   CR0	0x00000
95#define   CR1	0x00200
96#define   CR2	0x00400
97#define   CR3	0x00600
98#define TABDLY	0x01800
99#define   TAB0	0x00000
100#define   TAB1	0x00800
101#define   TAB2	0x01000
102#define   TAB3	0x01800
103#define   XTABS	0x01800
104#define BSDLY	0x02000
105#define   BS0	0x00000
106#define   BS1	0x02000
107#define VTDLY	0x04000
108#define   VT0	0x00000
109#define   VT1	0x04000
110#define FFDLY	0x08000
111#define   FF0	0x00000
112#define   FF1	0x08000
113/*
114#define PAGEOUT ???
115#define WRAP	???
116 */
117
118/* c_cflag bit meaning */
119#define CBAUD		0x0000100f
120#define CSIZE		0x00000030	/* Number of bits per byte (mask) */
121#define   CS5		0x00000000	/* 5 bits per byte */
122#define   CS6		0x00000010	/* 6 bits per byte */
123#define   CS7		0x00000020	/* 7 bits per byte */
124#define   CS8		0x00000030	/* 8 bits per byte */
125#define CSTOPB		0x00000040	/* Two stop bits instead of one */
126#define CREAD		0x00000080	/* Enable receiver */
127#define PARENB		0x00000100	/* Parity enable */
128#define PARODD		0x00000200	/* Odd parity instead of even */
129#define HUPCL		0x00000400	/* Hang up on last close */
130#define CLOCAL		0x00000800	/* Ignore modem status lines */
131#define CBAUDEX		0x00001000
132#define BOTHER		0x00001000
133#define     B57600	0x00001001
134#define    B115200	0x00001002
135#define    B230400	0x00001003
136#define    B460800	0x00001004
137#define    B500000	0x00001005
138#define    B576000	0x00001006
139#define    B921600	0x00001007
140#define   B1000000	0x00001008
141#define   B1152000	0x00001009
142#define   B1500000	0x0000100a
143#define   B2000000	0x0000100b
144#define   B2500000	0x0000100c
145#define   B3000000	0x0000100d
146#define   B3500000	0x0000100e
147#define   B4000000	0x0000100f
148#define CIBAUD		0x100f0000	/* input baud rate */
149
150/* c_lflag bits */
151#define ISIG	0x00001		/* Enable signals */
152#define ICANON	0x00002		/* Do erase and kill processing */
153#define XCASE	0x00004
154#define ECHO	0x00008		/* Enable echo */
155#define ECHOE	0x00010		/* Visual erase for ERASE */
156#define ECHOK	0x00020		/* Echo NL after KILL */
157#define ECHONL	0x00040		/* Echo NL even if ECHO is off */
158#define NOFLSH	0x00080		/* Disable flush after interrupt */
159#define IEXTEN	0x00100		/* Enable DISCARD and LNEXT */
160#define ECHOCTL	0x00200		/* Echo control characters as ^X */
161#define ECHOPRT	0x00400		/* Hardcopy visual erase */
162#define ECHOKE	0x00800		/* Visual erase for KILL */
163#define FLUSHO	0x02000
164#define PENDIN	0x04000		/* Retype pending input (state) */
165#define TOSTOP	0x08000		/* Send SIGTTOU for background output */
166#define ITOSTOP	TOSTOP
167#define EXTPROC	0x10000		/* External processing on pty */
168
169/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
170#define TIOCSER_TEMT	0x01	/* Transmitter physically empty */
171
172/* tcsetattr uses these */
173#define TCSANOW		TCSETS	/* Change immediately */
174#define TCSADRAIN	TCSETSW /* Change when pending output is written */
175#define TCSAFLUSH	TCSETSF /* Flush pending input before changing */
176
177#endif /* _ASM_TERMBITS_H */
178