1 /* sys_machdep.c 4.3 83/06/21 */ 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 143