|
|
1.1 root 1: /* sys_machdep.c 6.1 83/07/29 */
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.