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