pty.c (12813) | pty.c (12819) |
---|---|
1/* 2 * Copyright (c) 1982, 1986, 1989, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 17 unchanged lines hidden (view full) --- 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 * 33 * @(#)tty_pty.c 8.2 (Berkeley) 9/23/93 | 1/* 2 * Copyright (c) 1982, 1986, 1989, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 17 unchanged lines hidden (view full) --- 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 * 33 * @(#)tty_pty.c 8.2 (Berkeley) 9/23/93 |
34 * $Id: tty_pty.c,v 1.31 1995/12/10 15:55:17 bde Exp $ | 34 * $Id: tty_pty.c,v 1.32 1995/12/13 15:13:15 julian Exp $ |
35 */ 36 37/* 38 * Pseudo-teletype Driver 39 * (Actually two drivers, requiring two entries in 'cdevsw') 40 */ 41#include "pty.h" /* XXX */ 42 --- 8 unchanged lines hidden (view full) --- 51#include <sys/kernel.h> 52#include <sys/vnode.h> 53#include <sys/signalvar.h> 54 55#ifdef DEVFS 56#include <sys/devfsext.h> 57#endif /*DEVFS*/ 58 | 35 */ 36 37/* 38 * Pseudo-teletype Driver 39 * (Actually two drivers, requiring two entries in 'cdevsw') 40 */ 41#include "pty.h" /* XXX */ 42 --- 8 unchanged lines hidden (view full) --- 51#include <sys/kernel.h> 52#include <sys/vnode.h> 53#include <sys/signalvar.h> 54 55#ifdef DEVFS 56#include <sys/devfsext.h> 57#endif /*DEVFS*/ 58 |
59void ptyattach __P((int n)); 60void ptsstart __P((struct tty *tp)); 61void ptcwakeup __P((struct tty *tp, int flag)); | 59static void ptyattach __P((int n)); 60static void ptsstart __P((struct tty *tp)); 61static void ptcwakeup __P((struct tty *tp, int flag)); |
62 63static d_open_t ptsopen; 64static d_close_t ptsclose; 65static d_read_t ptsread; 66static d_write_t ptswrite; 67static d_ioctl_t ptyioctl; 68static d_stop_t ptsstop; 69static d_devtotty_t ptydevtotty; --- 23 unchanged lines hidden (view full) --- 93#endif 94 95#define BUFSIZ 100 /* Chunk size iomoved to/from user */ 96 97/* 98 * pts == /dev/tty[pqrsPQRS][0123456789abcdefghijklmnopqrstuv] 99 * ptc == /dev/pty[pqrsPQRS][0123456789abcdefghijklmnopqrstuv] 100 */ | 62 63static d_open_t ptsopen; 64static d_close_t ptsclose; 65static d_read_t ptsread; 66static d_write_t ptswrite; 67static d_ioctl_t ptyioctl; 68static d_stop_t ptsstop; 69static d_devtotty_t ptydevtotty; --- 23 unchanged lines hidden (view full) --- 93#endif 94 95#define BUFSIZ 100 /* Chunk size iomoved to/from user */ 96 97/* 98 * pts == /dev/tty[pqrsPQRS][0123456789abcdefghijklmnopqrstuv] 99 * ptc == /dev/pty[pqrsPQRS][0123456789abcdefghijklmnopqrstuv] 100 */ |
101struct tty pt_tty[NPTY]; /* XXX */ 102struct pt_ioctl { | 101static struct tty pt_tty[NPTY]; /* XXX */ 102static struct pt_ioctl { |
103 int pt_flags; 104 struct selinfo pt_selr, pt_selw; 105 u_char pt_send; 106 u_char pt_ucntl; 107} pt_ioctl[NPTY]; /* XXX */ | 103 int pt_flags; 104 struct selinfo pt_selr, pt_selw; 105 u_char pt_send; 106 u_char pt_ucntl; 107} pt_ioctl[NPTY]; /* XXX */ |
108int npty = NPTY; /* for pstat -t */ | 108static int npty = NPTY; /* for pstat -t */ |
109 110#define PF_PKT 0x08 /* packet mode */ 111#define PF_STOPPED 0x10 /* user told stopped */ 112#define PF_REMOTE 0x20 /* remote and flow controlled input */ 113#define PF_NOSTOP 0x40 114#define PF_UCNTL 0x80 /* user control mode */ 115 116/* 117 * Establish n (or default if n is 1) ptys in the system. 118 * 119 * XXX cdevsw & pstat require the array `pty[]' to be an array 120 */ | 109 110#define PF_PKT 0x08 /* packet mode */ 111#define PF_STOPPED 0x10 /* user told stopped */ 112#define PF_REMOTE 0x20 /* remote and flow controlled input */ 113#define PF_NOSTOP 0x40 114#define PF_UCNTL 0x80 /* user control mode */ 115 116/* 117 * Establish n (or default if n is 1) ptys in the system. 118 * 119 * XXX cdevsw & pstat require the array `pty[]' to be an array 120 */ |
121void | 121static void |
122ptyattach(n) 123 int n; 124{ 125#ifdef notyet 126 char *mem; 127 register u_long ntb; 128#define DEFAULT_NPTY 32 129 --- 133 unchanged lines hidden (view full) --- 263 return (EIO); 264 return ((*linesw[tp->t_line].l_write)(tp, uio, flag)); 265} 266 267/* 268 * Start output on pseudo-tty. 269 * Wake up process selecting or sleeping for input from controlling tty. 270 */ | 122ptyattach(n) 123 int n; 124{ 125#ifdef notyet 126 char *mem; 127 register u_long ntb; 128#define DEFAULT_NPTY 32 129 --- 133 unchanged lines hidden (view full) --- 263 return (EIO); 264 return ((*linesw[tp->t_line].l_write)(tp, uio, flag)); 265} 266 267/* 268 * Start output on pseudo-tty. 269 * Wake up process selecting or sleeping for input from controlling tty. 270 */ |
271void | 271static void |
272ptsstart(tp) 273 struct tty *tp; 274{ 275 register struct pt_ioctl *pti = &pt_ioctl[minor(tp->t_dev)]; 276 277 if (tp->t_state & TS_TTSTOP) 278 return; 279 if (pti->pt_flags & PF_STOPPED) { 280 pti->pt_flags &= ~PF_STOPPED; 281 pti->pt_send = TIOCPKT_START; 282 } 283 ptcwakeup(tp, FREAD); 284} 285 | 272ptsstart(tp) 273 struct tty *tp; 274{ 275 register struct pt_ioctl *pti = &pt_ioctl[minor(tp->t_dev)]; 276 277 if (tp->t_state & TS_TTSTOP) 278 return; 279 if (pti->pt_flags & PF_STOPPED) { 280 pti->pt_flags &= ~PF_STOPPED; 281 pti->pt_send = TIOCPKT_START; 282 } 283 ptcwakeup(tp, FREAD); 284} 285 |
286void | 286static void |
287ptcwakeup(tp, flag) 288 struct tty *tp; 289 int flag; 290{ 291 struct pt_ioctl *pti = &pt_ioctl[minor(tp->t_dev)]; 292 293 if (flag & FREAD) { 294 selwakeup(&pti->pt_selr); --- 470 unchanged lines hidden (view full) --- 765 return (error); 766} 767 768static ptc_devsw_installed = 0; 769#ifdef DEVFS 770#define MAXUNITS (8 * 32) 771static void *devfs_token_pts[MAXUNITS]; 772static void *devfs_token_ptc[MAXUNITS]; | 287ptcwakeup(tp, flag) 288 struct tty *tp; 289 int flag; 290{ 291 struct pt_ioctl *pti = &pt_ioctl[minor(tp->t_dev)]; 292 293 if (flag & FREAD) { 294 selwakeup(&pti->pt_selr); --- 470 unchanged lines hidden (view full) --- 765 return (error); 766} 767 768static ptc_devsw_installed = 0; 769#ifdef DEVFS 770#define MAXUNITS (8 * 32) 771static void *devfs_token_pts[MAXUNITS]; 772static void *devfs_token_ptc[MAXUNITS]; |
773const char jnames[] = "pqrsPQRS"; 774const char knames[] = "0123456789abcdefghijklmnopqrstuv"; | 773static const char jnames[] = "pqrsPQRS"; 774static const char knames[] = "0123456789abcdefghijklmnopqrstuv"; |
775#endif 776 777static void 778ptc_drvinit(void *unused) 779{ 780#ifdef DEVFS 781 int i,j,k; 782 char name[16]; --- 36 unchanged lines hidden --- | 775#endif 776 777static void 778ptc_drvinit(void *unused) 779{ 780#ifdef DEVFS 781 int i,j,k; 782 char name[16]; --- 36 unchanged lines hidden --- |