1 /* $OpenBSD: tty_conf.c,v 1.18 2014/03/11 19:45:28 guenther 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 *, struct proc *))enodev) 48 #define ttyerrclose ((int (*)(struct tty *, int flags, struct proc *))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, struct proc *); 58 int slclose(struct tty *tp, int flags, struct proc *); 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, struct proc *); 68 int pppclose(struct tty *tp, int flags, struct proc *); 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 "nmea.h" 78 #if NNMEA > 0 79 int nmeaopen(dev_t, struct tty *, struct proc *); 80 int nmeaclose(struct tty *, int, struct proc *); 81 int nmeainput(int, struct tty *); 82 #endif 83 84 #include "msts.h" 85 #if NMSTS > 0 86 int mstsopen(dev_t, struct tty *, struct proc *); 87 int mstsclose(struct tty *, int, struct proc *); 88 int mstsinput(int, struct tty *); 89 #endif 90 91 #include "endrun.h" 92 #if NENDRUN > 0 93 int endrunopen(dev_t, struct tty *, struct proc *); 94 int endrunclose(struct tty *, int, struct proc *); 95 int endruninput(int, struct tty *); 96 #endif 97 98 struct linesw linesw[] = 99 { 100 { ttyopen, ttylclose, ttread, ttwrite, nullioctl, 101 ttyinput, ttstart, ttymodem }, /* 0- termios */ 102 103 { ttynodisc, ttyerrclose, ttyerrio, ttyerrio, nullioctl, 104 ttyerrinput, ttyerrstart, nullmodem }, /* 1- defunct */ 105 106 /* 2- old NTTYDISC (defunct) */ 107 { ttynodisc, ttyerrclose, ttyerrio, ttyerrio, nullioctl, 108 ttyerrinput, ttyerrstart, nullmodem }, 109 110 /* 3- TABLDISC (defunct) */ 111 { ttynodisc, ttyerrclose, ttyerrio, ttyerrio, nullioctl, 112 ttyerrinput, ttyerrstart, nullmodem }, 113 114 #if NSL > 0 115 { slopen, slclose, ttyerrio, ttyerrio, sltioctl, 116 slinput, slstart, nullmodem }, /* 4- SLIPDISC */ 117 #else 118 { ttynodisc, ttyerrclose, ttyerrio, ttyerrio, nullioctl, 119 ttyerrinput, ttyerrstart, nullmodem }, 120 #endif 121 122 #if NPPP > 0 123 { pppopen, pppclose, pppread, pppwrite, ppptioctl, 124 pppinput, pppstart, ttymodem }, /* 5- PPPDISC */ 125 #else 126 { ttynodisc, ttyerrclose, ttyerrio, ttyerrio, nullioctl, 127 ttyerrinput, ttyerrstart, nullmodem }, 128 #endif 129 130 /* 6- STRIPDISC (defunct) */ 131 { ttynodisc, ttyerrclose, ttyerrio, ttyerrio, nullioctl, 132 ttyerrinput, ttyerrstart, nullmodem }, 133 134 #if NNMEA > 0 135 { nmeaopen, nmeaclose, ttread, ttwrite, nullioctl, 136 nmeainput, ttstart, ttymodem }, /* 7- NMEADISC */ 137 #else 138 { ttynodisc, ttyerrclose, ttyerrio, ttyerrio, nullioctl, 139 ttyerrinput, ttyerrstart, nullmodem }, 140 #endif 141 142 #if NMSTS > 0 143 { mstsopen, mstsclose, ttread, ttwrite, nullioctl, 144 mstsinput, ttstart, ttymodem }, /* 8- MSTSDISC */ 145 #else 146 { ttynodisc, ttyerrclose, ttyerrio, ttyerrio, nullioctl, 147 ttyerrinput, ttyerrstart, nullmodem }, 148 #endif 149 150 #if NENDRUN > 0 151 { endrunopen, endrunclose, ttread, ttwrite, nullioctl, 152 endruninput, ttstart, ttymodem }, /* 9- ENDRUNDISC */ 153 #else 154 { ttynodisc, ttyerrclose, ttyerrio, ttyerrio, nullioctl, 155 ttyerrinput, ttyerrstart, nullmodem }, 156 #endif 157 }; 158 159 int nlinesw = sizeof (linesw) / sizeof (linesw[0]); 160 161 /* 162 * Do nothing specific version of line 163 * discipline specific ioctl command. 164 */ 165 int 166 nullioctl(struct tty *tp, u_long cmd, char *data, int flags, struct proc *p) 167 { 168 return (-1); 169 } 170