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