summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/sys/ptyvar.h
blob: 76bc74c36a4048981ac685f0e65e0bef23a0476d (plain)
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
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 1989-2003 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

/*
 * Pseudo-tty driver data structures.
 */

#ifndef	_SYS_PTYVAR_H
#define	_SYS_PTYVAR_H

#pragma ident	"%Z%%M%	%I%	%E% SMI"

#include <sys/tty.h>

#ifdef	__cplusplus
extern "C" {
#endif

struct pty {
	int	pt_flags;		/* flag bits */
	mblk_t	*pt_stuffqfirst;	/* head of queue for ioctls */
	mblk_t	*pt_stuffqlast;		/* tail of queue for ioctls */
	int	pt_stuffqlen;		/* number of bytes of queued ioctls */
	tty_common_t pt_ttycommon;	/* data common to all tty drivers */
	bufcall_id_t pt_wbufcid;	/* id of pending write-side bufcall */
	struct proc *pt_selr;		/* proc selecting on controller read */
	struct proc *pt_selw;		/* proc selecting on controller write */
	struct proc *pt_sele;		/* proc selecting on exception */
	dev_t	pt_sdev;		/* XXX dev no for the slave */
	struct vnode *pt_vnode;		/* XXX vnode for the slave */
	short	pt_pgrp;		/* controller side process group */
	uchar_t	pt_send;		/* pending message to controller */
	uchar_t	pt_ucntl;		/* pending iocontrol for controller */
	kmutex_t ptc_lock;		/* per pty mutex lock */
	kcondvar_t pt_cv_flags;		/* condition variable for flag state */
	kcondvar_t pt_cv_readq;		/* condition variable for read state */
	kcondvar_t pt_cv_writeq;	/* condition variable for write state */
};

#define	PF_RCOLL	0x00000001	/* > 1 process selecting for read */
#define	PF_WCOLL	0x00000002	/* > 1 process selecting for write */
#define	PF_ECOLL	0x00000004	/* > 1 process selecting for excep. */
#define	PF_NBIO		0x00000008	/* non-blocking I/O on controller */
#define	PF_ASYNC	0x00000010	/* asynchronous I/O on controller */
#define	PF_WOPEN	0x00000020	/* waiting for open to complete */
#define	PF_CARR_ON	0x00000040	/* "carrier" is on (cntlr. is open) */
#define	PF_SLAVEGONE	0x00000080	/* slave was open, but is now closed */
#define	PF_PKT		0x00000100	/* packet mode */
#define	PF_STOPPED	0x00000200	/* user told stopped */
#define	PF_REMOTE	0x00000400	/* remote and flow controlled input */
#define	PF_NOSTOP	0x00000800	/* slave is doing XON/XOFF */
#define	PF_UCNTL	0x00001000	/* user control mode */
#define	PF_43UCNTL	0x00002000	/* real 4.3 user control mode */
#define	PF_IOCTL	0x00004000	/* ioctl call in progress */
#define	PF_WAIT		0x00008000	/* wait in close */
#define	PF_READ		0x00010000	/* serialise read */
#define	PF_WRITE	0x00020000	/* serialise write */
#define	PF_WREAD	0x00040000	/* want to read */
#define	PF_WWRITE	0x00080000	/* want to write */

/*
 * M_CTL message types.
 */
#define	MC_NOCANON	0	/* module below saying it will canonicalize */
#define	MC_DOCANON	1	/* module below saying it won't canonicalize */
#define	MC_CANONQUERY	2	/* module above asking whether module below */
				/* canonicalizes */
#define	MC_SERVICEIMM	3	/* tell the ZS driver to return input */
				/* immediately */
#define	MC_SERVICEDEF	4	/* tell the ZS driver it can wait */
#define	MC_NOIFLAG	5	/* module below saying don't do i flags */
#define	MC_NOOFLAG	6	/* module below saying don't do o flags */
#define	MC_NOLFLAG	7	/* module below saying don't do l flags */


/*
 * Thus stuff is from the 4.1 termios.h, but we don't want to
 * put it in the real system, so we hide it here.
 */

/*
 * Sun version of winsize.
 */
struct ttysize {
	int	ts_lines;		/* number of lines on terminal */
	int	ts_cols;		/* number of columns on terminal */
};


#define	TIOCPKT		_IOW('t', 112, int)	/* pty: set/clear packet mode */
#define		TIOCPKT_DATA		0x00	/* data packet */
#define		TIOCPKT_FLUSHREAD	0x01	/* flush data not yet written */
						/* to controller */
#define		TIOCPKT_FLUSHWRITE	0x02	/* flush data read from */
						/* controller but not yet */
						/* processed */
#define		TIOCPKT_STOP		0x04	/* stop output */
#define		TIOCPKT_START		0x08	/* start output */
#define		TIOCPKT_NOSTOP		0x10	/* no more ^S, ^Q */
#define		TIOCPKT_DOSTOP		0x20	/* now do ^S, ^Q */
#define		TIOCPKT_IOCTL		0x40	/* "ioctl" packet */

#define	TIOCUCNTL	_IOW('t', 102, int)	/* pty: set/clr usr cntl mode */
#define	TIOCTCNTL	_IOW('t', 32, int)	/* pty: set/clr intercept */
						/* ioctl mode */
#define	TIOCISPACE	_IOR('t', 128, int)	/* space left in input queue */
#define	TIOCISIZE	_IOR('t', 129, int)	/* size of input queue */

#define	TIOCSSIZE	_IOW('t', 37, struct ttysize) /* set tty size */
#define	TIOCGSIZE	_IOR('t', 38, struct ttysize) /* get tty size */

#ifdef _KERNEL

/*
 * pty_softc, npty, ptcph, and pty_initspace are defined in tty_ptyconf.c
 */

extern int	npty;
extern struct	pty *pty_softc;
extern struct	pollhead ptcph;
extern void	pty_initspace(void);

/*
 * define the Berkeley style naming convention
 */
#define	PTY_BANKS	"pqrstuvwxyz"
#define	PTY_DIGITS	"0123456789abcdef"
#endif /* _KERNEL */

#ifdef	__cplusplus
}
#endif

#endif	/* _SYS_PTYVAR_H */