|
|
1.1 root 1: /*
2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7: * Reserved. This file contains Original Code and/or Modifications of
8: * Original Code as defined in and that are subject to the Apple Public
9: * Source License Version 1.1 (the "License"). You may not use this file
10: * except in compliance with the License. Please obtain a copy of the
11: * License at http://www.apple.com/publicsource and read it before using
12: * this file.
13: *
14: * The Original Code and all software distributed under the License are
15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
19: * License for the specific language governing rights and limitations
20: * under the License.
21: *
22: * @APPLE_LICENSE_HEADER_END@
23: */
24:
25: /* Copyright (c) 1997 Apple Computer, Inc. All Rights Reserved */
26: /*-
27: * Copyright (c) 1982, 1986, 1991, 1993
28: * The Regents of the University of California. All rights reserved.
29: * (c) UNIX System Laboratories, Inc.
30: * All or some portions of this file are derived from material licensed
31: * to the University of California by American Telephone and Telegraph
32: * Co. or Unix System Laboratories, Inc. and are reproduced herein with
33: * the permission of UNIX System Laboratories, Inc.
34: *
35: * Redistribution and use in source and binary forms, with or without
36: * modification, are permitted provided that the following conditions
37: * are met:
38: * 1. Redistributions of source code must retain the above copyright
39: * notice, this list of conditions and the following disclaimer.
40: * 2. Redistributions in binary form must reproduce the above copyright
41: * notice, this list of conditions and the following disclaimer in the
42: * documentation and/or other materials provided with the distribution.
43: * 3. All advertising materials mentioning features or use of this software
44: * must display the following acknowledgement:
45: * This product includes software developed by the University of
46: * California, Berkeley and its contributors.
47: * 4. Neither the name of the University nor the names of its contributors
48: * may be used to endorse or promote products derived from this software
49: * without specific prior written permission.
50: *
51: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
52: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
53: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
54: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
55: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
56: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
57: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
58: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
59: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
60: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
61: * SUCH DAMAGE.
62: *
63: * @(#)tty_conf.c 8.4 (Berkeley) 1/21/94
64: */
65:
66: #include <sys/param.h>
67: #include <sys/systm.h>
68: #include <sys/tty.h>
69: #include <sys/conf.h>
70:
71: #ifndef MAXLDISC
72: #define MAXLDISC 8
73: #endif
74:
75: #ifndef NeXT
76: static l_open_t l_noopen;
77: static l_close_t l_noclose;
78: static l_ioctl_t l_nullioctl;
79: static l_rint_t l_norint;
80: static l_start_t l_nostart;
81: #else /* NeXT */
82: #define l_noopen ((int (*) __P((dev_t, struct tty *)))enodev)
83: #define l_noclose ((int (*) __P((struct tty *, int flags)))enodev)
84: #define l_noread ((int (*) __P((struct tty *, struct uio *, int)))enodev)
85: #define l_nowrite l_noread
86: #define l_norint ((int (*) __P((int c, struct tty *)))enodev)
87: #define l_nostart ((int (*) __P((struct tty *)))enodev)
88: static int
89: l_nullioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, struct proc *p);
90: #endif /* !NeXT */
91:
92: /*
93: * XXX it probably doesn't matter what the entries other than the l_open
94: * entry are here. The l_nullioctl and ttymodem entries still look fishy.
95: * Reconsider the removal of nullmodem anyway. It was too much like
96: * ttymodem, but a completely null version might be useful.
97: */
98: #define NODISC(n) \
99: { l_noopen, l_noclose, l_noread, l_nowrite, \
100: l_nullioctl, l_norint, l_nostart, ttymodem }
101:
102: struct linesw linesw[MAXLDISC] =
103: {
104: /* 0- termios */
105: { ttyopen, ttylclose, ttread, ttwrite,
106: l_nullioctl, ttyinput, ttstart, ttymodem },
107: NODISC(1), /* 1- defunct */
108: /* 2- NTTYDISC */
109: #ifdef COMPAT_43
110: { ttyopen, ttylclose, ttread, ttwrite,
111: l_nullioctl, ttyinput, ttstart, ttymodem },
112: #else
113: NODISC(2),
114: #endif
115: NODISC(3), /* TABLDISC */
116: NODISC(4), /* SLIPDISC */
117: NODISC(5), /* PPPDISC */
118: NODISC(6), /* loadable */
119: NODISC(7), /* loadable */
120: };
121:
122: int nlinesw = sizeof (linesw) / sizeof (linesw[0]);
123:
124: static struct linesw nodisc = NODISC(0);
125:
126: #define LOADABLE_LDISC 6
127: /*
128: * ldisc_register: Register a line discipline.
129: *
130: * discipline: Index for discipline to load, or LDISC_LOAD for us to choose.
131: * linesw_p: Pointer to linesw_p.
132: *
133: * Returns: Index used or -1 on failure.
134: */
135: int
136: ldisc_register(discipline, linesw_p)
137: int discipline;
138: struct linesw *linesw_p;
139: {
140: int slot = -1;
141:
142: if (discipline == LDISC_LOAD) {
143: int i;
144: for (i = LOADABLE_LDISC; i < MAXLDISC; i++)
145: if (bcmp(linesw + i, &nodisc, sizeof(nodisc)) == 0) {
146: slot = i;
147: }
148: }
149: else if (discipline >= 0 && discipline < MAXLDISC) {
150: slot = discipline;
151: }
152:
153: if (slot != -1 && linesw_p)
154: linesw[slot] = *linesw_p;
155:
156: return slot;
157: }
158:
159: /*
160: * ldisc_deregister: Deregister a line discipline obtained with
161: * ldisc_register. Can only deregister "loadable" ones now.
162: *
163: * discipline: Index for discipline to unload.
164: */
165: void
166: ldisc_deregister(discipline)
167: int discipline;
168: {
169: if (discipline >= LOADABLE_LDISC && discipline < MAXLDISC) {
170: linesw[discipline] = nodisc;
171: }
172: }
173:
174: #ifndef NeXT
175: static int
176: l_noopen(dev, tp)
177: dev_t dev;
178: struct tty *tp;
179: {
180:
181: return (ENODEV);
182: }
183:
184: static int
185: l_noclose(tp, flag)
186: struct tty *tp;
187: int flag;
188: {
189:
190: return (ENODEV);
191: }
192:
193: int
194: l_noread(tp, uio, flag)
195: struct tty *tp;
196: struct uio *uio;
197: int flag;
198: {
199:
200: return (ENODEV);
201: }
202:
203: int
204: l_nowrite(tp, uio, flag)
205: struct tty *tp;
206: struct uio *uio;
207: int flag;
208: {
209:
210: return (ENODEV);
211: }
212:
213: static int
214: l_norint(c, tp)
215: int c;
216: struct tty *tp;
217: {
218:
219: return (ENODEV);
220: }
221:
222: static int
223: l_nostart(tp)
224: struct tty *tp;
225: {
226:
227: return (ENODEV);
228: }
229: #endif /* !NeXT */
230:
231: /*
232: * Do nothing specific version of line
233: * discipline specific ioctl command.
234: */
235: static int
236: l_nullioctl(tp, cmd, data, flags, p)
237: struct tty *tp;
238: u_long cmd;
239: caddr_t data;
240: int flags;
241: struct proc *p;
242: {
243:
244: return (-1);
245: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.