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