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