BSD 4_3_Tahoe release
[unix-history] / usr / src / sys / vax / sys_machdep.c
CommitLineData
da7c5cc6 1/*
0880b18e 2 * Copyright (c) 1982, 1986 Regents of the University of California.
da7c5cc6
KM
3 * All rights reserved. The Berkeley software License Agreement
4 * specifies the terms and conditions for redistribution.
5 *
95f51977 6 * @(#)sys_machdep.c 7.1 (Berkeley) 6/5/86
da7c5cc6 7 */
03ce3413 8
1884f3f6
JB
9#include "param.h"
10#include "systm.h"
11#include "dir.h"
12#include "user.h"
13#include "ioctl.h"
14#include "file.h"
15#include "proc.h"
16#include "uio.h"
17#include "kernel.h"
18#include "mtio.h"
19#include "buf.h"
20#include "trace.h"
03ce3413 21
1884f3f6
JB
22#include "dkio.h"
23#include "pte.h"
03ce3413
SL
24#include "../vaxuba/ubareg.h"
25#include "../vaxuba/ubavar.h"
26
27resuba()
28{
29
30 if (suser())
31 if (u.u_arg[0] < numuba)
32 ubareset(u.u_arg[0]);
33}
34
35#ifdef TRACE
36int nvualarm;
37
38vtrace()
39{
40 register struct a {
41 int request;
42 int value;
43 } *uap;
44 int vdoualarm();
45
46 uap = (struct a *)u.u_ap;
47 switch (uap->request) {
48
49 case VTR_DISABLE: /* disable a trace point */
50 case VTR_ENABLE: /* enable a trace point */
51 if (uap->value < 0 || uap->value >= TR_NFLAGS)
52 u.u_error = EINVAL;
53 else {
54 u.u_r.r_val1 = traceflags[uap->value];
55 traceflags[uap->value] = uap->request;
56 }
57 break;
58
59 case VTR_VALUE: /* return a trace point setting */
60 if (uap->value < 0 || uap->value >= TR_NFLAGS)
61 u.u_error = EINVAL;
62 else
63 u.u_r.r_val1 = traceflags[uap->value];
64 break;
65
66 case VTR_UALARM: /* set a real-time ualarm, less than 1 min */
67 if (uap->value <= 0 || uap->value > 60 * hz ||
68 nvualarm > 5)
69 u.u_error = EINVAL;
70 else {
71 nvualarm++;
72 timeout(vdoualarm, (caddr_t)u.u_procp->p_pid,
73 uap->value);
74 }
75 break;
76
77 case VTR_STAMP:
78 trace(TR_STAMP, uap->value, u.u_procp->p_pid);
79 break;
80 }
81}
82
83vdoualarm(arg)
84 int arg;
85{
86 register struct proc *p;
87
88 p = pfind(arg);
89 if (p)
90 psignal(p, 16);
91 nvualarm--;
92}
93#endif
94
fdc91891 95#ifdef COMPAT
03ce3413
SL
96/*
97 * Note: these tables are sorted by
98 * ioctl "code" (in ascending order).
99 */
100int dctls[] = { DKIOCHDR, 0 };
101int fctls[] = { FIOCLEX, FIONCLEX, FIOASYNC, FIONBIO, FIONREAD, 0 };
102int mctls[] = { MTIOCTOP, MTIOCGET, 0 };
103int tctls[] = {
104 TIOCGETD, TIOCSETD, TIOCHPCL, TIOCMODG, TIOCMODS,
105 TIOCGETP, TIOCSETP, TIOCSETN, TIOCEXCL, TIOCNXCL,
106 TIOCFLUSH,TIOCSETC, TIOCGETC, TIOCREMOTE,TIOCMGET,
107 TIOCMBIC, TIOCMBIS, TIOCMSET, TIOCSTART,TIOCSTOP,
46ad87b6
SL
108 TIOCPKT, TIOCNOTTY,TIOCSTI, TIOCOUTQ, TIOCGLTC,
109 TIOCSLTC, TIOCSPGRP,TIOCGPGRP,TIOCCDTR, TIOCSDTR,
110 TIOCCBRK, TIOCSBRK, TIOCLGET, TIOCLSET, TIOCLBIC,
111 TIOCLBIS, 0
03ce3413
SL
112};
113
114/*
115 * Map an old style ioctl command to new.
116 */
117mapioctl(cmd)
118 int cmd;
119{
120 register int *map, c;
121
122 switch ((cmd >> 8) & 0xff) {
123
124 case 'd':
125 map = dctls;
126 break;
127
128 case 'f':
129 map = fctls;
130 break;
131
132 case 'm':
133 map = mctls;
134 break;
135
136 case 't':
137 map = tctls;
138 break;
139
140 default:
141 return (0);
142 }
143 while ((c = *map) && (c&0xff) < (cmd&0xff))
144 map++;
145 if (c && (c&0xff) == (cmd&0xff))
146 return (c);
147 return (0);
148}
149#endif