Migrated Akaros code to use pragma once (XCC)
[akaros.git] / kern / include / termios.h
1 /* Glibc termios struct and supporting bits
2  *
3  * For whatever reason, OSs/glibc don't have a shared interface for this.  Linux
4  * has it's own (different) termios interface.  We'll just use glibc's interface
5  * so that we can be interoperable/compatibile.
6  *
7  * This all is from sysdeps/ros/bits/termios.h.  Check that out for the original
8  * CR statement.  I'm fairly certain you can't CR this sort of stuff.
9  *
10  * Differences include removing some ifdefs and things we'll never use.  You can
11  * tell this is compatibility crap that I didn't write because it uses octal.
12  * Bastages. */
13
14 #pragma once
15
16 typedef unsigned char   cc_t;
17 typedef unsigned int    speed_t;
18 typedef unsigned int    tcflag_t;
19
20 #define NCCS 32
21 struct termios
22 {
23         tcflag_t c_iflag;                       /* input mode flags */
24         tcflag_t c_oflag;                       /* output mode flags */
25         tcflag_t c_cflag;                       /* control mode flags */
26         tcflag_t c_lflag;                       /* local mode flags */
27         cc_t c_line;                            /* line discipline */
28         cc_t c_cc[NCCS];                        /* control characters */
29         /* these last two might not be supported by all glibc builds.  search for
30          * _HAVE_STRUCT_TERMIOS_C_ISPEED and friends. */
31         speed_t c_ispeed;                       /* input speed */
32         speed_t c_ospeed;                       /* output speed */
33 };
34
35 /* c_cc characters */
36 #define VINTR 0
37 #define VQUIT 1
38 #define VERASE 2
39 #define VKILL 3
40 #define VEOF 4
41 #define VTIME 5
42 #define VMIN 6
43 #define VSWTC 7
44 #define VSTART 8
45 #define VSTOP 9
46 #define VSUSP 10
47 #define VEOL 11
48 #define VREPRINT 12
49 #define VDISCARD 13
50 #define VWERASE 14
51 #define VLNEXT 15
52 #define VEOL2 16
53
54 /* c_iflag bits */
55 #define IGNBRK  0000001
56 #define BRKINT  0000002
57 #define IGNPAR  0000004
58 #define PARMRK  0000010
59 #define INPCK   0000020
60 #define ISTRIP  0000040
61 #define INLCR   0000100
62 #define IGNCR   0000200
63 #define ICRNL   0000400
64 #define IUCLC   0001000
65 #define IXON    0002000
66 #define IXANY   0004000
67 #define IXOFF   0010000
68 #define IMAXBEL 0020000
69 #define IUTF8   0040000
70
71 /* c_oflag bits */
72 #define OPOST   0000001
73 #define OLCUC   0000002
74 #define ONLCR   0000004
75 #define OCRNL   0000010
76 #define ONOCR   0000020
77 #define ONLRET  0000040
78 #define OFILL   0000100
79 #define OFDEL   0000200
80 #define NLDLY   0000400
81 #define   NL0   0000000
82 #define   NL1   0000400
83 #define CRDLY   0003000
84 #define   CR0   0000000
85 #define   CR1   0001000
86 #define   CR2   0002000
87 #define   CR3   0003000
88 #define TABDLY  0014000
89 #define   TAB0  0000000
90 #define   TAB1  0004000
91 #define   TAB2  0010000
92 #define   TAB3  0014000
93 #define BSDLY   0020000
94 #define   BS0   0000000
95 #define   BS1   0020000
96 #define FFDLY   0100000
97 #define   FF0   0000000
98 #define   FF1   0100000
99
100 #define VTDLY   0040000
101 #define   VT0   0000000
102 #define   VT1   0040000
103
104 #define XTABS   0014000
105
106 /* c_cflag bit meaning */
107 #define CBAUD   0010017
108 #define  B0     0000000         /* hang up */
109 #define  B50    0000001
110 #define  B75    0000002
111 #define  B110   0000003
112 #define  B134   0000004
113 #define  B150   0000005
114 #define  B200   0000006
115 #define  B300   0000007
116 #define  B600   0000010
117 #define  B1200  0000011
118 #define  B1800  0000012
119 #define  B2400  0000013
120 #define  B4800  0000014
121 #define  B9600  0000015
122 #define  B19200 0000016
123 #define  B38400 0000017
124 #define EXTA B19200
125 #define EXTB B38400
126 #define CSIZE   0000060
127 #define   CS5   0000000
128 #define   CS6   0000020
129 #define   CS7   0000040
130 #define   CS8   0000060
131 #define CSTOPB  0000100
132 #define CREAD   0000200
133 #define PARENB  0000400
134 #define PARODD  0001000
135 #define HUPCL   0002000
136 #define CLOCAL  0004000
137 #define CBAUDEX 0010000
138 #define  B57600   0010001
139 #define  B115200  0010002
140 #define  B230400  0010003
141 #define  B460800  0010004
142 #define  B500000  0010005
143 #define  B576000  0010006
144 #define  B921600  0010007
145 #define  B1000000 0010010
146 #define  B1152000 0010011
147 #define  B1500000 0010012
148 #define  B2000000 0010013
149 #define  B2500000 0010014
150 #define  B3000000 0010015
151 #define  B3500000 0010016
152 #define  B4000000 0010017
153 #define __MAX_BAUD B4000000
154 #define CIBAUD    002003600000          /* input baud rate (not used) */
155 #define CMSPAR   010000000000           /* mark or space (stick) parity */
156 #define CRTSCTS  020000000000           /* flow control */
157
158 /* c_lflag bits */
159 #define ISIG    0000001
160 #define ICANON  0000002
161 #define XCASE   0000004
162 #define ECHO    0000010
163 #define ECHOE   0000020
164 #define ECHOK   0000040
165 #define ECHONL  0000100
166 #define NOFLSH  0000200
167 #define TOSTOP  0000400
168 #define ECHOCTL 0001000
169 #define ECHOPRT 0002000
170 #define ECHOKE   0004000
171 #define FLUSHO   0010000
172 #define PENDIN   0040000
173 #define IEXTEN  0100000
174
175 /* tcflow() and TCXONC use these */
176 #define TCOOFF          0
177 #define TCOON           1
178 #define TCIOFF          2
179 #define TCION           3
180
181 /* tcflush() and TCFLSH use these */
182 #define TCIFLUSH        0
183 #define TCOFLUSH        1
184 #define TCIOFLUSH       2
185
186 /* tcsetattr uses these */
187 #define TCSANOW         0
188 #define TCSADRAIN       1
189 #define TCSAFLUSH       2