1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License").  You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22/*
23 * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27#ifndef	__SYS_TERMIOS_H
28#define	__SYS_TERMIOS_H
29
30#pragma ident	"%Z%%M%	%I%	%E% SMI"
31
32#include <sys/stdtypes.h>
33#include <sys/ioccom.h>
34#include <sys/ttydev.h>
35#include <sys/ttycom.h>
36
37#ifdef	__cplusplus
38extern "C" {
39#endif
40
41#define	NCCS	17
42
43/*
44 * control characters
45 * the following are not (yet) posix
46 * VEOL2, VSWTCH, VDSUSP, VREPRINT, VDISCARD, VWERASE, VLNEXT, VSTATUS
47 */
48#define	VINTR		0
49#define	VQUIT		1
50#define	VERASE		2
51#define	VKILL		3
52#define	VEOF		4
53#define	VEOL		5
54#ifndef _POSIX_SOURCE
55#define	VEOL2		6
56#define	VSWTCH		7
57#endif
58#define	VSTART		8
59#define	VSTOP		9
60#define	VSUSP		10
61#ifndef _POSIX_SOURCE
62#define	VDSUSP		11
63#define	VREPRINT	12
64#define	VDISCARD	13
65#define	VWERASE		14
66#define	VLNEXT		15
67#define	VSTATUS		16
68#endif
69
70#define	VMIN		VEOF
71#define	VTIME		VEOL
72
73#ifndef	_POSIX_SOURCE
74#define	_CTRL(c)	('c'&037)
75
76/*
77 * default control chars.
78 * guarded for ttychars.h.
79 */
80#ifndef	CINTR
81#define	CINTR	_CTRL(c)
82#define	CQUIT	034		/* FS, ^\ */
83#define	CERASE	0177		/* DEL, ^? */
84#define	CKILL	_CTRL(u)
85#define	CEOF	_CTRL(d)
86#define	CEOT	CEOF
87#define	CEOL	0
88#define	CEOL2	0
89#define	CSWTCH	0
90#define	CNSWTCH	0
91#define	CSTART	_CTRL(q)
92#define	CSTOP	_CTRL(s)
93#define	CSUSP	_CTRL(z)
94#define	CDSUSP	_CTRL(y)
95#define	CRPRNT	_CTRL(r)
96#define	CFLUSH	_CTRL(o)
97#define	CWERASE	_CTRL(w)
98#define	CLNEXT	_CTRL(v)
99#endif	/* !CINTR */
100
101#define	CESC	'\\'
102#define	CNUL	0
103#define	CDEL	0377
104#endif	/* !_POSIX_SOURCE */
105
106/* input modes */
107#define	IGNBRK	0x00000001
108#define	BRKINT	0x00000002
109#define	IGNPAR	0x00000004
110#define	PARMRK	0x00000008
111#define	INPCK	0x00000010
112#define	ISTRIP	0x00000020
113#define	INLCR	0x00000040
114#define	IGNCR	0x00000080
115#define	ICRNL	0x00000100
116/*	IUCLC	0x00000200	not posix, defined below */
117#define	IXON	0x00000400
118/*	IXANY	0x00000800	not posix, defined below */
119#define	IXOFF	0x00001000
120/*	IMAXBEL	0x00002000	not posix, defined below */
121
122#ifndef	_POSIX_SOURCE
123#define	IUCLC	0x00000200
124#define	IXANY	0x00000800
125#define	IMAXBEL	0x00002000
126#endif	/* !_POSIX_SOURCE */
127
128/* output modes */
129#define	OPOST	0x00000001
130#ifndef	_POSIX_SOURCE
131#define	OLCUC	0x00000002
132#define	ONLCR	0x00000004
133#define	OCRNL	0x00000008
134#define	ONOCR	0x00000010
135#define	ONLRET	0x00000020
136#define	OFILL	0x00000040
137#define	OFDEL	0x00000080
138#define	NLDLY	0x00000100
139#define	NL0	0
140#define	NL1	0x00000100
141#define	CRDLY	0x00000600
142#define	CR0	0
143#define	CR1	0x00000200
144#define	CR2	0x00000400
145#define	CR3	0x00000600
146#define	TABDLY	0x00001800
147#define	TAB0	0
148#define	TAB1	0x00000800
149#define	TAB2	0x00001000
150#define	XTABS	0x00001800
151#define	TAB3	XTABS
152#define	BSDLY	0x00002000
153#define	BS0	0
154#define	BS1	0x00002000
155#define	VTDLY	0x00004000
156#define	VT0	0
157#define	VT1	0x00004000
158#define	FFDLY	0x00008000
159#define	FF0	0
160#define	FF1	0x00008000
161#define	PAGEOUT	0x00010000
162#define	WRAP	0x00020000
163#endif	/* !_POSIX_SOURCE */
164
165/* control modes */
166#ifndef	_POSIX_SOURCE
167#define	CBAUD	0x0000000f
168#endif
169#define	CSIZE	0x00000030
170#define	CS5	0
171#define	CS6	0x00000010
172#define	CS7	0x00000020
173#define	CS8	0x00000030
174#define	CSTOPB	0x00000040
175#define	CREAD	0x00000080
176#define	PARENB	0x00000100
177#define	PARODD	0x00000200
178#define	HUPCL	0x00000400
179#define	CLOCAL	0x00000800
180#ifndef	_POSIX_SOURCE
181#define	LOBLK	0x00001000
182#define	CIBAUD	0x000f0000
183#define	CRTSXOFF 0x40000000
184#define	CRTSCTS	0x80000000
185#define	CBAUDEXT 0x200000
186#define	CIBAUDEXT 0x400000
187
188/*
189 * 4.4BSD flags for hardware flow control
190 */
191#define	CRTS_IFLOW 0x40000000
192#define	CCTS_OFLOW 0x80000000
193
194#define	IBSHIFT	16
195#endif	/* !_POSIX_SOURCE */
196
197/* line discipline 0 modes */
198#define	ISIG	0x00000001
199#define	ICANON	0x00000002
200/*	XCASE	0x00000004		not posix, defined below */
201#define	ECHO	0x00000008
202#define	ECHOE	0x00000010
203#define	ECHOK	0x00000020
204#define	ECHONL	0x00000040
205#define	NOFLSH	0x00000080
206#define	TOSTOP	0x00000100
207/*	ECHOCTL	0x00000200		not posix, defined below */
208/*	ECHOPRT	0x00000400		not posix, defined below */
209/*	ECHOKE	0x00000800		not posix, defined below */
210/*	DEFECHO	0x00001000		not posix, defined below */
211/*	FLUSHO	0x00002000		not posix, defined below */
212/*	PENDIN	0x00004000		not posix, defined below */
213#define	IEXTEN	0x00008000
214
215#ifndef	_POSIX_SOURCE
216#define	XCASE	0x00000004
217#define	ECHOCTL	0x00000200
218#define	ECHOPRT	0x00000400
219#define	ECHOKE	0x00000800
220#define	DEFECHO	0x00001000
221#define	FLUSHO	0x00002000
222#define	PENDIN	0x00004000
223#endif	/* !_POSIX_SOURCE */
224
225#ifndef	_POSIX_SOURCE
226/*
227 * codes 1 through 5, not shown here, are old "termio" calls
228 */
229#define	TCXONC		_IO('T', 6)
230#define	TCFLSH		_IO('T', 7)
231#define	TCGETS		_IOR('T', 8, struct termios)
232#define	TCSETS		_IOW('T', 9, struct termios)
233#define	TCSETSW		_IOW('T', 10, struct termios)
234#define	TCSETSF		_IOW('T', 11, struct termios)
235#endif	/* !_POSIX_SOURCE */
236
237#define	TCOOFF		0		/* arg to TCXONC & tcflow() */
238#define	TCOON		1		/* arg to TCXONC & tcflow() */
239#define	TCIOFF		2		/* arg to TCXONC & tcflow() */
240#define	TCION		3		/* arg to TCXONC & tcflow() */
241#define	TCIFLUSH	0		/* arg to TCFLSH & tcflush() */
242#define	TCOFLUSH	1		/* arg to TCFLSH & tcflush() */
243#define	TCIOFLUSH	2		/* arg to TCFLSH & tcflush() */
244#define	TCSANOW		0		/* arg to tcsetattr() */
245#define	TCSADRAIN	1		/* arg to tcsetattr() */
246#define	TCSAFLUSH	2		/* arg to tcsetattr() */
247
248/*
249 * Ioctl control packet
250 */
251struct	termios {
252	tcflag_t	c_iflag;	/* input modes */
253	tcflag_t	c_oflag;	/* output modes */
254	tcflag_t	c_cflag;	/* control modes */
255	tcflag_t	c_lflag;	/* line discipline modes */
256	char		c_line;		/* line discipline XXX */
257	cc_t		c_cc[NCCS];	/* control chars */
258};
259
260
261#ifndef	KERNEL
262speed_t	cfgetispeed(/* struct termios *termios_p */);
263speed_t	cfgetospeed(/* struct termios *termios_p */);
264int	cfsetispeed(/* struct termios *termios_p, speed_t speed */);
265int	cfsetospeed(/* struct termios *termios_p, speed_t speed */);
266int	tcdrain(/* int fildes */);
267int	tcflow(/* int fildes, int action */);
268int	tcflush(/* int fildes, int queue_selector */);
269int	tcgetattr(/* int fildes, struct termios *termios_p */);
270int	tcsendbreak(/* int fildes, int duration */);
271int	tcsetattr(/* int fildes, int optional_actions, struct *termios_p */);
272#endif	/* !KERNEL */
273
274#ifdef	__cplusplus
275}
276#endif
277
278#endif	/* __SYS_TERMIOS_H */
279