|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1982 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 6.4 (Berkeley) 6/8/85 ! 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: #include "enetfilter.h" ! 114: #if NENETFILTER > 0 ! 115: #include "../vaxif/enet.h" ! 116: int Ectls[] = { /* CMU enet driver compatibility */ ! 117: EIOCSETP, EIOCGETP, EIOCSETF, EIOCENBS, EIOCINHS, ! 118: EIOCSETW, EIOCFLUSH, EIOCALLOCP, EIOCDEALLOCP, EIOCMBIS, ! 119: EIOCMBIC, 0 ! 120: }; ! 121: #endif NENETFILTER ! 122: ! 123: /* ! 124: * Map an old style ioctl command to new. ! 125: */ ! 126: mapioctl(cmd) ! 127: int cmd; ! 128: { ! 129: register int *map, c; ! 130: ! 131: switch ((cmd >> 8) & 0xff) { ! 132: ! 133: case 'd': ! 134: map = dctls; ! 135: break; ! 136: ! 137: case 'f': ! 138: map = fctls; ! 139: break; ! 140: ! 141: case 'm': ! 142: map = mctls; ! 143: break; ! 144: ! 145: case 't': ! 146: map = tctls; ! 147: break; ! 148: ! 149: #if NENETFILTER > 0 ! 150: case 'E': ! 151: map = Ectls; ! 152: break; ! 153: #endif NENETFILTER ! 154: ! 155: default: ! 156: return (0); ! 157: } ! 158: while ((c = *map) && (c&0xff) < (cmd&0xff)) ! 159: map++; ! 160: if (c && (c&0xff) == (cmd&0xff)) ! 161: return (c); ! 162: return (0); ! 163: } ! 164: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.