Serenity Operating System
1/*
2 * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <Kernel/API/POSIX/sys/types.h>
10
11#ifdef __cplusplus
12extern "C" {
13#endif
14
15#define NCCS 32
16
17typedef uint32_t tcflag_t;
18typedef uint8_t cc_t;
19typedef uint32_t speed_t;
20
21struct termios {
22 tcflag_t c_iflag;
23 tcflag_t c_oflag;
24 tcflag_t c_cflag;
25 tcflag_t c_lflag;
26 cc_t c_cc[NCCS];
27 speed_t c_ispeed;
28 speed_t c_ospeed;
29};
30
31/* c_cc characters */
32#define VINTR 0
33#define VQUIT 1
34#define VERASE 2
35#define VKILL 3
36#define VEOF 4
37#define VTIME 5
38#define VMIN 6
39#define VSWTC 7
40#define VSTART 8
41#define VSTOP 9
42#define VSUSP 10
43#define VEOL 11
44#define VREPRINT 12
45#define VDISCARD 13
46#define VWERASE 14
47#define VLNEXT 15
48#define VEOL2 16
49#define VINFO 17
50
51/* c_iflag bits */
52#define IGNBRK 0000001
53#define BRKINT 0000002
54#define IGNPAR 0000004
55#define PARMRK 0000010
56#define INPCK 0000020
57#define ISTRIP 0000040
58#define INLCR 0000100
59#define IGNCR 0000200
60#define ICRNL 0000400
61#define IUCLC 0001000
62#define IXON 0002000
63#define IXANY 0004000
64#define IXOFF 0010000
65#define IMAXBEL 0020000
66#define IUTF8 0040000
67
68/* c_oflag bits */
69#define OPOST 0000001
70#define OLCUC 0000002
71#define ONLCR 0000004
72#define OCRNL 0000010
73#define ONOCR 0000020
74#define ONLRET 0000040
75#define OFILL 0000100
76#define OFDEL 0000200
77#if defined __USE_MISC || defined __USE_XOPEN
78# define NLDLY 0000400
79# define NL0 0000000
80# define NL1 0000400
81# define CRDLY 0003000
82# define CR0 0000000
83# define CR1 0001000
84# define CR2 0002000
85# define CR3 0003000
86# define TABDLY 0014000
87# define TAB0 0000000
88# define TAB1 0004000
89# define TAB2 0010000
90# define TAB3 0014000
91# define BSDLY 0020000
92# define BS0 0000000
93# define BS1 0020000
94# define FFDLY 0100000
95# define FF0 0000000
96# define FF1 0100000
97#endif
98
99#define VTDLY 0040000
100#define VT0 0000000
101#define VT1 0040000
102
103#ifdef __USE_MISC
104# define XTABS 0014000
105#endif
106
107/* c_cflag bit meaning */
108#ifdef __USE_MISC
109# define CBAUD 0010017
110#endif
111#define B0 0000000 /* hang up */
112#define B50 0000001
113#define B75 0000002
114#define B110 0000003
115#define B134 0000004
116#define B150 0000005
117#define B200 0000006
118#define B300 0000007
119#define B600 0000010
120#define B1200 0000011
121#define B1800 0000012
122#define B2400 0000013
123#define B4800 0000014
124#define B9600 0000015
125#define B19200 0000016
126#define B38400 0000017
127#ifdef __USE_MISC
128# define EXTA B19200
129# define EXTB B38400
130#endif
131#define CSIZE 0000060
132#define CS5 0000000
133#define CS6 0000020
134#define CS7 0000040
135#define CS8 0000060
136#define CSTOPB 0000100
137#define CREAD 0000200
138#define PARENB 0000400
139#define PARODD 0001000
140#define HUPCL 0002000
141#define CLOCAL 0004000
142#ifdef __USE_MISC
143# define CBAUDEX 0010000
144#endif
145#define B57600 0010001
146#define B115200 0010002
147#define B230400 0010003
148#define B460800 0010004
149#define B500000 0010005
150#define B576000 0010006
151#define B921600 0010007
152#define B1000000 0010010
153#define B1152000 0010011
154#define B1500000 0010012
155#define B2000000 0010013
156#define B2500000 0010014
157#define B3000000 0010015
158#define B3500000 0010016
159#define B4000000 0010017
160#define __MAX_BAUD B4000000
161#ifdef __USE_MISC
162# define CIBAUD 002003600000 /* input baud rate (not used) */
163# define CMSPAR 010000000000 /* mark or space (stick) parity */
164# define CRTSCTS 020000000000 /* flow control */
165#endif
166
167/* c_lflag bits */
168#define ISIG 0000001
169#define ICANON 0000002
170#if defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
171# define XCASE 0000004
172#endif
173#define ECHO 0000010
174#define ECHOE 0000020
175#define ECHOK 0000040
176#define ECHONL 0000100
177#define NOFLSH 0000200
178#define TOSTOP 0000400
179#ifdef __USE_MISC
180# define ECHOCTL 0001000
181# define ECHOPRT 0002000
182# define ECHOKE 0004000
183# define FLUSHO 0010000
184# define PENDIN 0040000
185#endif
186#define IEXTEN 0100000
187#ifdef __USE_MISC
188# define EXTPROC 0200000
189#endif
190
191/* tcflow() and TCXONC use these */
192#define TCOOFF 0
193#define TCOON 1
194#define TCIOFF 2
195#define TCION 3
196
197/* tcflush() and TCFLSH use these */
198#define TCIFLUSH 0
199#define TCOFLUSH 1
200#define TCIOFLUSH 2
201
202/* tcsetattr uses these */
203#define TCSANOW 0
204#define TCSADRAIN 1
205#define TCSAFLUSH 2
206
207#ifdef __cplusplus
208}
209#endif