|
|
1.1 ! root 1: /* sys_machdep.c 6.1 83/07/29 */ ! 2: ! 3: #include "../h/param.h" ! 4: #include "../h/systm.h" ! 5: #include "../h/dir.h" ! 6: #include "../h/user.h" ! 7: #include "../h/ioctl.h" ! 8: #include "../h/file.h" ! 9: #include "../h/proc.h" ! 10: #include "../h/uio.h" ! 11: #include "../h/kernel.h" ! 12: #include "../h/mtio.h" ! 13: #include "../h/buf.h" ! 14: ! 15: #include "../machine/dkio.h" ! 16: #include "../machine/pte.h" ! 17: ! 18: #ifdef TRACE ! 19: int nvualarm; ! 20: ! 21: vtrace() ! 22: { ! 23: register struct a { ! 24: int request; ! 25: int value; ! 26: } *uap; ! 27: int vdoualarm(); ! 28: ! 29: uap = (struct a *)u.u_ap; ! 30: switch (uap->request) { ! 31: ! 32: case VTR_DISABLE: /* disable a trace point */ ! 33: case VTR_ENABLE: /* enable a trace point */ ! 34: if (uap->value < 0 || uap->value >= TR_NFLAGS) ! 35: u.u_error = EINVAL; ! 36: else { ! 37: u.u_r.r_val1 = traceflags[uap->value]; ! 38: traceflags[uap->value] = uap->request; ! 39: } ! 40: break; ! 41: ! 42: case VTR_VALUE: /* return a trace point setting */ ! 43: if (uap->value < 0 || uap->value >= TR_NFLAGS) ! 44: u.u_error = EINVAL; ! 45: else ! 46: u.u_r.r_val1 = traceflags[uap->value]; ! 47: break; ! 48: ! 49: case VTR_UALARM: /* set a real-time ualarm, less than 1 min */ ! 50: if (uap->value <= 0 || uap->value > 60 * hz || ! 51: nvualarm > 5) ! 52: u.u_error = EINVAL; ! 53: else { ! 54: nvualarm++; ! 55: timeout(vdoualarm, (caddr_t)u.u_procp->p_pid, ! 56: uap->value); ! 57: } ! 58: break; ! 59: ! 60: case VTR_STAMP: ! 61: trace(TR_STAMP, uap->value, u.u_procp->p_pid); ! 62: break; ! 63: } ! 64: } ! 65: ! 66: vdoualarm(arg) ! 67: int arg; ! 68: { ! 69: register struct proc *p; ! 70: ! 71: p = pfind(arg); ! 72: if (p) ! 73: psignal(p, 16); ! 74: nvualarm--; ! 75: } ! 76: #endif ! 77: ! 78: #ifdef COMPAT ! 79: /* ! 80: * Note: these tables are sorted by ! 81: * ioctl "code" (in ascending order). ! 82: */ ! 83: int dctls[] = { DKIOCHDR, 0 }; ! 84: int fctls[] = { FIOCLEX, FIONCLEX, FIOASYNC, FIONBIO, FIONREAD, 0 }; ! 85: int mctls[] = { MTIOCTOP, MTIOCGET, 0 }; ! 86: int tctls[] = { ! 87: TIOCGETD, TIOCSETD, TIOCHPCL, TIOCMODG, TIOCMODS, ! 88: TIOCGETP, TIOCSETP, TIOCSETN, TIOCEXCL, TIOCNXCL, ! 89: TIOCFLUSH,TIOCSETC, TIOCGETC, TIOCREMOTE,TIOCMGET, ! 90: TIOCMBIC, TIOCMBIS, TIOCMSET, TIOCSTART,TIOCSTOP, ! 91: TIOCPKT, TIOCNOTTY,TIOCSTI, TIOCOUTQ, TIOCGLTC, ! 92: TIOCSLTC, TIOCSPGRP,TIOCGPGRP,TIOCCDTR, TIOCSDTR, ! 93: TIOCCBRK, TIOCSBRK, TIOCLGET, TIOCLSET, TIOCLBIC, ! 94: TIOCLBIS, 0 ! 95: }; ! 96: ! 97: /* ! 98: * Map an old style ioctl command to new. ! 99: */ ! 100: mapioctl(cmd) ! 101: int cmd; ! 102: { ! 103: register int *map, c; ! 104: ! 105: switch ((cmd >> 8) & 0xff) { ! 106: ! 107: case 'd': ! 108: map = dctls; ! 109: break; ! 110: ! 111: case 'f': ! 112: map = fctls; ! 113: break; ! 114: ! 115: case 'm': ! 116: map = mctls; ! 117: break; ! 118: ! 119: case 't': ! 120: map = tctls; ! 121: break; ! 122: ! 123: default: ! 124: return (0); ! 125: } ! 126: while ((c = *map) && (c&0xff) < (cmd&0xff)) ! 127: map++; ! 128: if (c && (c&0xff) == (cmd&0xff)) ! 129: return (c); ! 130: return (0); ! 131: } ! 132: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.