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