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