1 /* $OpenBSD: tty_conf.c,v 1.12 2008/01/05 17:33:28 mbalmer Exp $ */ 2 /* $NetBSD: tty_conf.c,v 1.18 1996/05/19 17:17:55 jonathan Exp $ */ 3 4 /*- 5 * Copyright (c) 1982, 1986, 1991, 1993 6 * The Regents of the University of California. All rights reserved. 7 * (c) UNIX System Laboratories, Inc. 8 * All or some portions of this file are derived from material licensed 9 * to the University of California by American Telephone and Telegraph 10 * Co. or Unix System Laboratories, Inc. and are reproduced herein with 11 * the permission of UNIX System Laboratories, Inc. 12 * 13 * Redistribution and use in source and binary forms, with or without 14 * modification, are permitted provided that the following conditions 15 * are met: 16 * 1. Redistributions of source code must retain the above copyright 17 * notice, this list of conditions and the following disclaimer. 18 * 2. Redistributions in binary form must reproduce the above copyright 19 * notice, this list of conditions and the following disclaimer in the 20 * documentation and/or other materials provided with the distribution. 21 * 3. Neither the name of the University nor the names of its contributors 22 * may be used to endorse or promote products derived from this software 23 * without specific prior written permission. 24 * 25 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 26 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 28 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 31 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 32 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 34 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 35 * SUCH DAMAGE. 36 * 37 * @(#)tty_conf.c 8.4 (Berkeley) 1/21/94 38 */ 39 40 #include <sys/param.h> 41 #include <sys/systm.h> 42 #include <sys/ioctl.h> 43 #include <sys/proc.h> 44 #include <sys/tty.h> 45 #include <sys/conf.h> 46 47 #define ttynodisc ((int (*)(dev_t, struct tty *))enodev) 48 #define ttyerrclose ((int (*)(struct tty *, int flags))enodev) 49 #define ttyerrio ((int (*)(struct tty *, struct uio *, int))enodev) 50 #define ttyerrinput ((int (*)(int c, struct tty *))enodev) 51 #define ttyerrstart ((int (*)(struct tty *))enodev) 52 53 int nullioctl(struct tty *, u_long, caddr_t, int, struct proc *); 54 55 #include "sl.h" 56 #if NSL > 0 57 int slopen(dev_t dev, struct tty *tp); 58 int slclose(struct tty *tp, int flags); 59 int sltioctl(struct tty *tp, u_long cmd, caddr_t data, 60 int flag, struct proc *p); 61 int slinput(int c, struct tty *tp); 62 int slstart(struct tty *tp); 63 #endif 64 65 #include "ppp.h" 66 #if NPPP > 0 67 int pppopen(dev_t dev, struct tty *tp); 68 int pppclose(struct tty *tp, int flags); 69 int ppptioctl(struct tty *tp, u_long cmd, caddr_t data, 70 int flag, struct proc *p); 71 int pppinput(int c, struct tty *tp); 72 int pppstart(struct tty *tp); 73 int pppread(struct tty *tp, struct uio *uio, int flag); 74 int pppwrite(struct tty *tp, struct uio *uio, int flag); 75 #endif 76 77 #include "strip.h" 78 #if NSTRIP > 0 79 int stripopen(dev_t dev, struct tty *tp); 80 int stripclose(struct tty *tp, int flags); 81 int striptioctl(struct tty *tp, u_long cmd, caddr_t data, 82 int flag, struct proc *p); 83 int stripinput(int c, struct tty *tp); 84 int stripstart(struct tty *tp); 85 #endif 86 87 #include "nmea.h" 88 #if NNMEA > 0 89 int nmeaopen(dev_t, struct tty *); 90 int nmeaclose(struct tty *, int); 91 int nmeainput(int, struct tty *); 92 #endif 93 94 #include "msts.h" 95 #if NMSTS > 0 96 int mstsopen(dev_t, struct tty *); 97 int mstsclose(struct tty *, int); 98 int mstsinput(int, struct tty *); 99 #endif 100 101 struct linesw linesw[] = 102 { 103 { ttyopen, ttylclose, ttread, ttwrite, nullioctl, 104 ttyinput, ttstart, ttymodem }, /* 0- termios */ 105 106 { ttynodisc, ttyerrclose, ttyerrio, ttyerrio, nullioctl, 107 ttyerrinput, ttyerrstart, nullmodem }, /* 1- defunct */ 108 109 #if defined(COMPAT_43) || defined(COMPAT_FREEBSD) || defined(COMPAT_BSDOS) 110 { ttyopen, ttylclose, ttread, ttwrite, nullioctl, 111 ttyinput, ttstart, ttymodem }, /* 2- old NTTYDISC */ 112 #else 113 { ttynodisc, ttyerrclose, ttyerrio, ttyerrio, nullioctl, 114 ttyerrinput, ttyerrstart, nullmodem }, /* 2- defunct */ 115 #endif 116 117 /* 3- TABLDISC (defunct) */ 118 { ttynodisc, ttyerrclose, ttyerrio, ttyerrio, nullioctl, 119 ttyerrinput, ttyerrstart, nullmodem }, 120 121 #if NSL > 0 122 { slopen, slclose, ttyerrio, ttyerrio, sltioctl, 123 slinput, slstart, nullmodem }, /* 4- SLIPDISC */ 124 #else 125 { ttynodisc, ttyerrclose, ttyerrio, ttyerrio, nullioctl, 126 ttyerrinput, ttyerrstart, nullmodem }, 127 #endif 128 129 #if NPPP > 0 130 { pppopen, pppclose, pppread, pppwrite, ppptioctl, 131 pppinput, pppstart, ttymodem }, /* 5- PPPDISC */ 132 #else 133 { ttynodisc, ttyerrclose, ttyerrio, ttyerrio, nullioctl, 134 ttyerrinput, ttyerrstart, nullmodem }, 135 #endif 136 137 #if NSTRIP > 0 138 { stripopen, stripclose, ttyerrio, ttyerrio, striptioctl, 139 stripinput, stripstart, nullmodem }, /* 6- STRIPDISC */ 140 #else 141 { ttynodisc, ttyerrclose, ttyerrio, ttyerrio, nullioctl, 142 ttyerrinput, ttyerrstart, nullmodem }, 143 #endif 144 145 #if NNMEA > 0 146 { nmeaopen, nmeaclose, ttread, ttwrite, nullioctl, 147 nmeainput, ttstart, ttymodem }, /* 7- NMEADISC */ 148 #else 149 { ttynodisc, ttyerrclose, ttyerrio, ttyerrio, nullioctl, 150 ttyerrinput, ttyerrstart, nullmodem }, 151 #endif 152 153 #if NMSTS > 0 154 { mstsopen, mstsclose, ttread, ttwrite, nullioctl, 155 mstsinput, ttstart, ttymodem }, /* 8- MSTSDISC */ 156 #else 157 { ttynodisc, ttyerrclose, ttyerrio, ttyerrio, nullioctl, 158 ttyerrinput, ttyerrstart, nullmodem }, 159 #endif 160 }; 161 162 int nlinesw = sizeof (linesw) / sizeof (linesw[0]); 163 164 /* 165 * Do nothing specific version of line 166 * discipline specific ioctl command. 167 */ 168 /*ARGSUSED*/ 169 int 170 nullioctl(struct tty *tp, u_long cmd, char *data, int flags, struct proc *p) 171 { 172 173 #ifdef lint 174 tp = tp; data = data; flags = flags; p = p; 175 #endif 176 return (-1); 177 } 178