xref: /original-bsd/sys/i386/i386/sys_machdep.c (revision 492c862f)
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