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