|
|
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: /*
26: * Copyright (c) 1997 by Apple Computer, Inc., all rights reserved
27: * Copyright (c) 1993 NeXT Computer, Inc.
28: *
29: * UNIX Device switch tables.
30: *
31: */
32:
1.1.1.2 ! root 33: #include <sys/param.h>
! 34: #include <sys/systm.h>
! 35: #include <sys/buf.h>
! 36: #include <sys/ioctl.h>
! 37: #include <sys/tty.h>
! 38: #include <sys/conf.h>
1.1 root 39:
40:
41: extern int nulldev();
42:
43: __private_extern__ int sdopen(), sdclose(), sdread();
44: __private_extern__ int sdwrite(), sdioctl(), sdsize();
45: __private_extern__ void sdstrategy();
46:
47:
48: struct bdevsw bdevsw[] =
49: {
50: /*
51: * For block devices, every other block of 8 slots is
52: * reserved to NeXT. The other slots are available for
53: * the user. This way we can both add new entries without
54: * running into each other. Be sure to fill in NeXT's
55: * 8 reserved slots when you jump over us -- we'll do the
56: * same for you.
57: */
58:
59: /* 0 - 7 are reserved to NeXT */
60:
61: NO_BDEVICE, /* 0*/
62: NO_BDEVICE, /* 1*/
63: NO_BDEVICE, /* 2*/
64: NO_BDEVICE, /* 3*/
65: NO_BDEVICE, /* 4*/
66: NO_BDEVICE, /* 5*/
67: { sdopen, sdclose, sdstrategy, sdioctl, /* 6*/
68: enodev, sdsize, D_DISK },
69: NO_BDEVICE, /* 7*/
70:
71: /* 8 - 15 are reserved to the user */
72: NO_BDEVICE, /* 8*/
73: NO_BDEVICE, /* 9*/
74: NO_BDEVICE, /*10*/
75: NO_BDEVICE, /*11*/
76: NO_BDEVICE, /*12*/
77: NO_BDEVICE, /*13*/
78: NO_BDEVICE, /*14*/
79: NO_BDEVICE, /*15*/
80:
81: /* 16 - 23 are reserved to NeXT */
82: NO_BDEVICE, /*16*/
83: NO_BDEVICE, /*17*/
84: NO_BDEVICE, /*18*/
85: NO_BDEVICE, /*18*/
86: NO_BDEVICE, /*20*/
87: NO_BDEVICE, /*21*/
88: NO_BDEVICE, /*22*/
89: NO_BDEVICE, /*23*/
90: };
91:
92: int nblkdev = sizeof (bdevsw) / sizeof (bdevsw[0]);
93:
94: extern struct tty *km_tty[];
95: extern int cnopen(),cnclose(),cnread(),cnwrite(),cnioctl(),
96: cnselect(),cngetc(), cnputc(dev_t dev, char c);
97: extern int kmopen(),kmclose(),kmread(),kmwrite(),kmioctl(),
98: kmgetc(), kmputc(dev_t dev, char c);
99: extern int sgopen(),sgclose(), sgioctl();
100:
101: #define TEMPDISPLAY 1
102:
103: #if TEMPDISPLAY
104: extern int tdis_open(),tdis_close(),tdis_ioctl();
105: #endif
106:
107:
1.1.1.2 ! root 108: #include <vol.h>
1.1 root 109: #if NVOL > 0
110: extern int volopen(),volclose(),volioctl();
111: #else
112: #define volopen eno_opcl
113: #define volclose eno_opcl
114: #define volioctl eno_ioctl
115: #endif
116:
117: extern int cttyopen(), cttyread(), cttywrite(), cttyioctl(), cttyselect();
118:
119: extern int mmread(),mmwrite();
120: #define mmselect seltrue
121: #define mmmmap eno_mmap
122:
1.1.1.2 ! root 123: #include <pty.h>
1.1 root 124: #if NPTY > 0
125: extern struct tty *pt_tty[];
126: extern int ptsopen(),ptsclose(),ptsread(),ptswrite(),ptsstop(),ptsputc();
127: extern int ptcopen(),ptcclose(),ptcread(),ptcwrite(),ptcselect(),
128: ptyioctl();
129: #else
130: #define ptsopen eno_opcl
131: #define ptsclose eno_opcl
132: #define ptsread eno_rdwrt
133: #define ptswrite eno_rdwrt
134: #define ptsstop nulldev
135: #define ptsputc nulldev
136:
137: #define ptcopen eno_opcl
138: #define ptcclose eno_opcl
139: #define ptcread eno_rdwrt
140: #define ptcwrite eno_rdwrt
141: #define ptcselect eno_select
142: #define ptyioctl eno_ioctl
143: #endif
144:
145: extern int logopen(),logclose(),logread(),logioctl(),logselect();
146: extern int nvopen(), nvclose(), nvread(), nvwrite();
147:
148: extern int seltrue();
149:
150: struct cdevsw cdevsw[] =
151: {
152: /*
153: * For character devices, every other block of 16 slots is
154: * reserved to NeXT. The other slots are available for
155: * the user. This way we can both add new entries without
156: * running into each other. Be sure to fill in NeXT's
157: * 16 reserved slots when you jump over us -- we'll do the
158: * same for you.
159: */
160:
161: /* 0 - 15 are reserved to NeXT */
162:
163: {
164: cnopen, cnclose, cnread, cnwrite, /* 0*/
165: cnioctl, nulldev, nulldev, 0, cnselect,
166: eno_mmap, eno_strat, cngetc, cnputc, D_TTY
167: },
168: NO_CDEVICE, /* 1*/
169: {
170: cttyopen, nulldev, cttyread, cttywrite, /* 2*/
171: cttyioctl, nulldev, nulldev, 0, cttyselect,
172: eno_mmap, eno_strat, eno_getc, eno_putc, D_TTY
173: },
174: {
175: nulldev, nulldev, mmread, mmwrite, /* 3*/
176: eno_ioctl, nulldev, nulldev, 0, mmselect,
177: mmmmap, eno_strat, eno_getc, eno_putc, 0
178: },
179: {
180: ptsopen, ptsclose, ptsread, ptswrite, /* 4*/
181: ptyioctl, ptsstop, nulldev, pt_tty, ttselect,
182: eno_mmap, eno_strat, eno_getc, eno_putc, D_TTY
183: },
184: {
185: ptcopen, ptcclose, ptcread, ptcwrite, /* 5*/
186: ptyioctl, nulldev, nulldev, 0, ptcselect,
187: eno_mmap, eno_strat, eno_getc, eno_putc, D_TTY
188: },
189: {
190: logopen, logclose, logread, eno_rdwrt, /* 6*/
191: logioctl, eno_stop, nulldev, 0, logselect,
192: eno_mmap, eno_strat, eno_getc, eno_putc, 0
193: },
194: NO_CDEVICE, /* 7*/
195: NO_CDEVICE, /* 8*/
196: NO_CDEVICE, /* 9*/
197: NO_CDEVICE, /*10*/
198: NO_CDEVICE, /*11*/
199: {
200: kmopen, kmclose, kmread, kmwrite, /*12*/
201: kmioctl, nulldev, nulldev, km_tty, ttselect,
202: eno_mmap, eno_strat, kmgetc, kmputc, 0
203: },
204: NO_CDEVICE, /*13*/
205: {
206: sdopen, sdclose, sdread, sdwrite, /*14*/
207: sdioctl, eno_stop, nulldev, 0, eno_select,
208: eno_mmap, eno_strat, eno_getc, eno_putc, D_TAPE
209: },
210: NO_CDEVICE, /*15*/
211:
212: /* 16 - 31 are reserved to the user */
213: NO_CDEVICE, /*16*/
214: NO_CDEVICE, /*17*/
215: NO_CDEVICE, /*18*/
216: NO_CDEVICE, /*19*/
217: NO_CDEVICE, /*20*/
218: NO_CDEVICE, /*21*/
219: NO_CDEVICE, /*22*/
220: NO_CDEVICE, /*23*/
221: NO_CDEVICE, /*24*/
222: NO_CDEVICE, /*25*/
223: NO_CDEVICE, /*26*/
224: NO_CDEVICE, /*27*/
225: NO_CDEVICE, /*28*/
226: NO_CDEVICE, /*29*/
227: NO_CDEVICE, /*30*/
228: NO_CDEVICE, /*31*/
229:
230: /* 32 - 47 are reserved to NeXT */
1.1.1.2 ! root 231: NO_CDEVICE, /*32*/
1.1 root 232: {
233: sgopen, sgclose, eno_rdwrt, eno_rdwrt, /*33*/
234: sgioctl, eno_stop, eno_reset, 0, eno_select,
235: eno_mmap, eno_strat, eno_getc, eno_putc, D_TAPE
236: },
237: NO_CDEVICE, /*34*/
238: NO_CDEVICE, /*35*/
239: NO_CDEVICE, /*36*/
240: {
241: nvopen, nvclose, nvread, nvwrite, /*37*/
242: eno_ioctl, nulldev, nulldev, 0, seltrue,
243: eno_mmap, eno_strat, eno_getc, eno_putc, 0
244: },
245: NO_CDEVICE, /*38*/
246: NO_CDEVICE, /*39*/
247: NO_CDEVICE, /*40*/
248: /* 41 used to be for fd */
249: NO_CDEVICE, /*41*/
250: {
251: volopen, volclose, eno_rdwrt, eno_rdwrt, /*42*/
252: volioctl, eno_stop, eno_reset, 0, seltrue,
253: eno_mmap, eno_strat, eno_getc, eno_putc, 0
254: },
255: };
256: int nchrdev = sizeof (cdevsw) / sizeof (cdevsw[0]);
257:
258:
1.1.1.2 ! root 259: #include <sys/vnode.h> /* for VCHR and VBLK */
1.1 root 260: /*
261: * return true if a disk
262: */
263: int
264: isdisk(dev, type)
265: dev_t dev;
266: int type;
267: {
268: switch (major(dev)) {
269: case 1: /* fd: floppy */
270: case 6: /* sd: scsi disk */
271: case 3: /* ide: */
272: if (type == VBLK)
273: return(1);
274: break;
275: case 14: /* sd: scsi disk */
276: case 41: /* fd: floppy */
277: if (type == VCHR)
278: return(1);
279: break;
280: }
281: return(0);
282: }
283:
284: static int chrtoblktab[] = {
285: /* CHR*/ /* BLK*/ /* CHR*/ /* BLK*/
286: /* 0 */ NODEV, /* 1 */ NODEV,
287: /* 2 */ NODEV, /* 3 */ NODEV,
288: /* 4 */ NODEV, /* 5 */ NODEV,
289: /* 6 */ NODEV, /* 7 */ NODEV,
290: /* 8 */ NODEV, /* 9 */ NODEV,
291: /* 10 */ NODEV, /* 11 */ NODEV,
292: /* 12 */ NODEV, /* 13 */ NODEV,
293: /* 14 */ 6, /* 15 */ NODEV,
294: /* 16 */ NODEV, /* 17 */ NODEV,
295: /* 18 */ NODEV, /* 19 */ NODEV,
296: /* 20 */ NODEV, /* 21 */ NODEV,
297: /* 22 */ NODEV, /* 23 */ NODEV,
298: /* 24 */ NODEV, /* 25 */ NODEV,
299: /* 26 */ NODEV, /* 27 */ NODEV,
300: /* 28 */ NODEV, /* 29 */ NODEV,
301: /* 30 */ NODEV, /* 31 */ NODEV,
302: /* 32 */ NODEV, /* 33 */ NODEV,
303: /* 34 */ NODEV, /* 35 */ NODEV,
304: /* 36 */ NODEV, /* 37 */ NODEV,
305: /* 38 */ NODEV, /* 39 */ NODEV,
306: /* 40 */ NODEV, /* 41 */ 1,
307: /* 42 */ NODEV, /* 43 */ NODEV,
308: /* 44 */ NODEV,
309: };
310:
311: /*
312: * convert chr dev to blk dev
313: */
314: dev_t
315: chrtoblk(dev)
316: dev_t dev;
317: {
318: int blkmaj;
319:
320: if (major(dev) >= nchrdev)
321: return(NODEV);
322: blkmaj = chrtoblktab[major(dev)];
323: if (blkmaj == NODEV)
324: return(NODEV);
325: return(makedev(blkmaj, minor(dev)));
326: }
327:
328: /*
329: * Returns true if dev is /dev/mem or /dev/kmem.
330: */
1.1.1.2 ! root 331: int
! 332: iskmemdev(dev)
1.1 root 333: dev_t dev;
334: {
335:
336: return (major(dev) == 3 && minor(dev) < 2);
337: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.