hc
2024-08-16 a24a44ff9ca902811b99aa9663d697cf452e08ef
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
#ifndef _UAPI_SPARC_TERMBITS_H
#define _UAPI_SPARC_TERMBITS_H
 
#include <linux/posix_types.h>
 
typedef unsigned char   cc_t;
typedef unsigned int    speed_t;
 
#if defined(__sparc__) && defined(__arch64__)
typedef unsigned int    tcflag_t;
#else
typedef unsigned long   tcflag_t;
#endif
 
#define NCC 8
struct termio {
   unsigned short c_iflag;        /* input mode flags */
   unsigned short c_oflag;        /* output mode flags */
   unsigned short c_cflag;        /* control mode flags */
   unsigned short c_lflag;        /* local mode flags */
   unsigned char c_line;        /* line discipline */
   unsigned char c_cc[NCC];    /* control characters */
};
 
#define NCCS 17
struct termios {
   tcflag_t c_iflag;        /* input mode flags */
   tcflag_t c_oflag;        /* output mode flags */
   tcflag_t c_cflag;        /* control mode flags */
   tcflag_t c_lflag;        /* local mode flags */
   cc_t c_line;            /* line discipline */
#ifndef __KERNEL__
   cc_t c_cc[NCCS];        /* control characters */
#else
   cc_t c_cc[NCCS+2];    /* kernel needs 2 more to hold vmin/vtime */
#define SIZEOF_USER_TERMIOS sizeof (struct termios) - (2*sizeof (cc_t))
#endif
};
 
struct termios2 {
   tcflag_t c_iflag;        /* input mode flags */
   tcflag_t c_oflag;        /* output mode flags */
   tcflag_t c_cflag;        /* control mode flags */
   tcflag_t c_lflag;        /* local mode flags */
   cc_t c_line;            /* line discipline */
   cc_t c_cc[NCCS+2];        /* control characters */
   speed_t c_ispeed;        /* input speed */
   speed_t c_ospeed;        /* output speed */
};
 
struct ktermios {
   tcflag_t c_iflag;        /* input mode flags */
   tcflag_t c_oflag;        /* output mode flags */
   tcflag_t c_cflag;        /* control mode flags */
   tcflag_t c_lflag;        /* local mode flags */
   cc_t c_line;            /* line discipline */
   cc_t c_cc[NCCS+2];        /* control characters */
   speed_t c_ispeed;        /* input speed */
   speed_t c_ospeed;        /* output speed */
};
 
/* c_cc characters */
#define VINTR    0
#define VQUIT    1
#define VERASE   2
#define VKILL    3
#define VEOF     4
#define VEOL     5
#define VEOL2    6
#define VSWTC    7
#define VSTART   8
#define VSTOP    9
 
 
 
#define VSUSP    10
#define VDSUSP   11  /* SunOS POSIX nicety I do believe... */
#define VREPRINT 12
#define VDISCARD 13
#define VWERASE  14
#define VLNEXT   15
 
/* Kernel keeps vmin/vtime separated, user apps assume vmin/vtime is
 * shared with eof/eol
 */
#ifndef __KERNEL__
#define VMIN     VEOF
#define VTIME    VEOL
#endif
 
/* c_iflag bits */
#define IGNBRK    0x00000001
#define BRKINT    0x00000002
#define IGNPAR    0x00000004
#define PARMRK    0x00000008
#define INPCK    0x00000010
#define ISTRIP    0x00000020
#define INLCR    0x00000040
#define IGNCR    0x00000080
#define ICRNL    0x00000100
#define IUCLC    0x00000200
#define IXON    0x00000400
#define IXANY    0x00000800
#define IXOFF    0x00001000
#define IMAXBEL    0x00002000
#define IUTF8   0x00004000
 
/* c_oflag bits */
#define OPOST    0x00000001
#define OLCUC    0x00000002
#define ONLCR    0x00000004
#define OCRNL    0x00000008
#define ONOCR    0x00000010
#define ONLRET    0x00000020
#define OFILL    0x00000040
#define OFDEL    0x00000080
#define NLDLY    0x00000100
#define   NL0    0x00000000
#define   NL1    0x00000100
#define CRDLY    0x00000600
#define   CR0    0x00000000
#define   CR1    0x00000200
#define   CR2    0x00000400
#define   CR3    0x00000600
#define TABDLY    0x00001800
#define   TAB0    0x00000000
#define   TAB1    0x00000800
#define   TAB2    0x00001000
#define   TAB3    0x00001800
#define   XTABS    0x00001800
#define BSDLY    0x00002000
#define   BS0    0x00000000
#define   BS1    0x00002000
#define VTDLY    0x00004000
#define   VT0    0x00000000
#define   VT1    0x00004000
#define FFDLY    0x00008000
#define   FF0    0x00000000
#define   FF1    0x00008000
#define PAGEOUT 0x00010000  /* SUNOS specific */
#define WRAP    0x00020000  /* SUNOS specific */
 
/* c_cflag bit meaning */
#define CBAUD      0x0000100f
#define  B0      0x00000000   /* hang up */
#define  B50      0x00000001
#define  B75      0x00000002
#define  B110      0x00000003
#define  B134      0x00000004
#define  B150      0x00000005
#define  B200      0x00000006
#define  B300      0x00000007
#define  B600      0x00000008
#define  B1200      0x00000009
#define  B1800      0x0000000a
#define  B2400      0x0000000b
#define  B4800      0x0000000c
#define  B9600      0x0000000d
#define  B19200      0x0000000e
#define  B38400      0x0000000f
#define EXTA      B19200
#define EXTB      B38400
#define  CSIZE    0x00000030
#define   CS5      0x00000000
#define   CS6      0x00000010
#define   CS7      0x00000020
#define   CS8      0x00000030
#define CSTOPB      0x00000040
#define CREAD      0x00000080
#define PARENB      0x00000100
#define PARODD      0x00000200
#define HUPCL      0x00000400
#define CLOCAL      0x00000800
#define CBAUDEX   0x00001000
/* We'll never see these speeds with the Zilogs, but for completeness... */
#define  BOTHER   0x00001000
#define  B57600   0x00001001
#define  B115200  0x00001002
#define  B230400  0x00001003
#define  B460800  0x00001004
/* This is what we can do with the Zilogs. */
#define  B76800   0x00001005
/* This is what we can do with the SAB82532. */
#define  B153600  0x00001006
#define  B307200  0x00001007
#define  B614400  0x00001008
#define  B921600  0x00001009
/* And these are the rest... */
#define  B500000  0x0000100a
#define  B576000  0x0000100b
#define B1000000  0x0000100c
#define B1152000  0x0000100d
#define B1500000  0x0000100e
#define B2000000  0x0000100f
/* These have totally bogus values and nobody uses them
   so far. Later on we'd have to use say 0x10000x and
   adjust CBAUD constant and drivers accordingly.
#define B2500000  0x00001010
#define B3000000  0x00001011
#define B3500000  0x00001012
#define B4000000  0x00001013  */
#define CIBAUD      0x100f0000  /* input baud rate (not used) */
#define CMSPAR      0x40000000  /* mark or space (stick) parity */
#define CRTSCTS      0x80000000  /* flow control */
 
#define IBSHIFT      16        /* Shift from CBAUD to CIBAUD */
 
/* c_lflag bits */
#define ISIG    0x00000001
#define ICANON    0x00000002
#define XCASE    0x00000004
#define ECHO    0x00000008
#define ECHOE    0x00000010
#define ECHOK    0x00000020
#define ECHONL    0x00000040
#define NOFLSH    0x00000080
#define TOSTOP    0x00000100
#define ECHOCTL    0x00000200
#define ECHOPRT    0x00000400
#define ECHOKE    0x00000800
#define DEFECHO 0x00001000  /* SUNOS thing, what is it? */
#define FLUSHO    0x00002000
#define PENDIN    0x00004000
#define IEXTEN    0x00008000
#define EXTPROC    0x00010000
 
/* modem lines */
#define TIOCM_LE    0x001
#define TIOCM_DTR    0x002
#define TIOCM_RTS    0x004
#define TIOCM_ST    0x008
#define TIOCM_SR    0x010
#define TIOCM_CTS    0x020
#define TIOCM_CAR    0x040
#define TIOCM_RNG    0x080
#define TIOCM_DSR    0x100
#define TIOCM_CD    TIOCM_CAR
#define TIOCM_RI    TIOCM_RNG
#define TIOCM_OUT1    0x2000
#define TIOCM_OUT2    0x4000
#define TIOCM_LOOP    0x8000
 
/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
#define TIOCSER_TEMT    0x01    /* Transmitter physically empty */
 
 
/* tcflow() and TCXONC use these */
#define    TCOOFF        0
#define    TCOON        1
#define    TCIOFF        2
#define    TCION        3
 
/* tcflush() and TCFLSH use these */
#define    TCIFLUSH    0
#define    TCOFLUSH    1
#define    TCIOFLUSH    2
 
/* tcsetattr uses these */
#define    TCSANOW        0
#define    TCSADRAIN    1
#define    TCSAFLUSH    2
 
#endif /* _UAPI_SPARC_TERMBITS_H */