1/*- 2 * Copyright (c) 1982, 1986, 1991, 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_tty.c 8.2 (Berkeley) 9/23/93 |
34 * $Id: tty_tty.c,v 1.17 1997/09/02 20:05:56 bde Exp $ |
35 */ 36 37/* 38 * Indirect driver for controlling tty. 39 */ 40#include <sys/param.h> |
41#include <sys/systm.h> |
42#include <sys/conf.h> 43#include <sys/proc.h> 44#include <sys/tty.h> 45#include <sys/vnode.h> 46#include <sys/fcntl.h> 47#include <sys/kernel.h> 48#ifdef DEVFS 49#include <sys/devfsext.h> 50#endif /*DEVFS*/ 51 52static d_open_t cttyopen; 53static d_read_t cttyread; 54static d_write_t cttywrite; 55static d_ioctl_t cttyioctl; |
56static d_poll_t cttypoll; |
57 58#define CDEV_MAJOR 1 59/* Don't make static, fdesc_vnops uses this. */ 60struct cdevsw ctty_cdevsw = 61 { cttyopen, nullclose, cttyread, cttywrite, /*1*/ 62 cttyioctl, nullstop, nullreset, nodevtotty,/* tty */ |
63 cttypoll, nommap, NULL, "ctty", NULL, -1 }; |
64 65 66#define cttyvp(p) ((p)->p_flag & P_CONTROLT ? (p)->p_session->s_ttyvp : NULL) 67 68/*ARGSUSED*/ 69static int 70cttyopen(dev, flag, mode, p) 71 dev_t dev; --- 84 unchanged lines hidden (view full) --- 156 } else 157 return (EINVAL); 158 } 159 return (VOP_IOCTL(ttyvp, cmd, addr, flag, NOCRED, p)); 160} 161 162/*ARGSUSED*/ 163static int |
164cttypoll(dev, events, p) |
165 dev_t dev; |
166 int events; |
167 struct proc *p; 168{ 169 struct vnode *ttyvp = cttyvp(p); 170 171 if (ttyvp == NULL) |
172 /* try operation to get EOF/failure */ 173 return (seltrue(dev, events, p)); 174 return (VOP_POLL(ttyvp, events, p->p_ucred, p)); |
175} 176 177static ctty_devsw_installed = 0; 178#ifdef DEVFS 179static void *ctty_devfs_token; 180#endif 181 182static void --- 17 unchanged lines hidden --- |