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