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