Commit | Line | Data |
---|---|---|
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 | ||
27 | resuba() | |
28 | { | |
29 | ||
30 | if (suser()) | |
31 | if (u.u_arg[0] < numuba) | |
32 | ubareset(u.u_arg[0]); | |
33 | } | |
34 | ||
35 | #ifdef TRACE | |
36 | int nvualarm; | |
37 | ||
38 | vtrace() | |
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 | ||
83 | vdoualarm(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 | */ | |
100 | int dctls[] = { DKIOCHDR, 0 }; | |
101 | int fctls[] = { FIOCLEX, FIONCLEX, FIOASYNC, FIONBIO, FIONREAD, 0 }; | |
102 | int mctls[] = { MTIOCTOP, MTIOCGET, 0 }; | |
103 | int 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 | */ | |
117 | mapioctl(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 |