|
|
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 "../machine/dkio.h"
16: #include "../machine/pte.h"
17:
18: #ifdef TRACE
19: int nvualarm;
20:
21: vtrace()
22: {
23: register struct a {
24: int request;
25: int value;
26: } *uap;
27: int vdoualarm();
28:
29: uap = (struct a *)u.u_ap;
30: switch (uap->request) {
31:
32: case VTR_DISABLE: /* disable a trace point */
33: case VTR_ENABLE: /* enable a trace point */
34: if (uap->value < 0 || uap->value >= TR_NFLAGS)
35: u.u_error = EINVAL;
36: else {
37: u.u_r.r_val1 = traceflags[uap->value];
38: traceflags[uap->value] = uap->request;
39: }
40: break;
41:
42: case VTR_VALUE: /* return a trace point setting */
43: if (uap->value < 0 || uap->value >= TR_NFLAGS)
44: u.u_error = EINVAL;
45: else
46: u.u_r.r_val1 = traceflags[uap->value];
47: break;
48:
49: case VTR_UALARM: /* set a real-time ualarm, less than 1 min */
50: if (uap->value <= 0 || uap->value > 60 * hz ||
51: nvualarm > 5)
52: u.u_error = EINVAL;
53: else {
54: nvualarm++;
55: timeout(vdoualarm, (caddr_t)u.u_procp->p_pid,
56: uap->value);
57: }
58: break;
59:
60: case VTR_STAMP:
61: trace(TR_STAMP, uap->value, u.u_procp->p_pid);
62: break;
63: }
64: }
65:
66: vdoualarm(arg)
67: int arg;
68: {
69: register struct proc *p;
70:
71: p = pfind(arg);
72: if (p)
73: psignal(p, 16);
74: nvualarm--;
75: }
76: #endif
77:
78: #ifdef COMPAT
79: /*
80: * Note: these tables are sorted by
81: * ioctl "code" (in ascending order).
82: */
83: int dctls[] = { DKIOCHDR, 0 };
84: int fctls[] = { FIOCLEX, FIONCLEX, FIOASYNC, FIONBIO, FIONREAD, 0 };
85: int mctls[] = { MTIOCTOP, MTIOCGET, 0 };
86: int tctls[] = {
87: TIOCGETD, TIOCSETD, TIOCHPCL, TIOCMODG, TIOCMODS,
88: TIOCGETP, TIOCSETP, TIOCSETN, TIOCEXCL, TIOCNXCL,
89: TIOCFLUSH,TIOCSETC, TIOCGETC, TIOCREMOTE,TIOCMGET,
90: TIOCMBIC, TIOCMBIS, TIOCMSET, TIOCSTART,TIOCSTOP,
91: TIOCPKT, TIOCNOTTY,TIOCSTI, TIOCOUTQ, TIOCGLTC,
92: TIOCSLTC, TIOCSPGRP,TIOCGPGRP,TIOCCDTR, TIOCSDTR,
93: TIOCCBRK, TIOCSBRK, TIOCLGET, TIOCLSET, TIOCLBIC,
94: TIOCLBIS, 0
95: };
96:
97: /*
98: * Map an old style ioctl command to new.
99: */
100: mapioctl(cmd)
101: int cmd;
102: {
103: register int *map, c;
104:
105: switch ((cmd >> 8) & 0xff) {
106:
107: case 'd':
108: map = dctls;
109: break;
110:
111: case 'f':
112: map = fctls;
113: break;
114:
115: case 'm':
116: map = mctls;
117: break;
118:
119: case 't':
120: map = tctls;
121: break;
122:
123: default:
124: return (0);
125: }
126: while ((c = *map) && (c&0xff) < (cmd&0xff))
127: map++;
128: if (c && (c&0xff) == (cmd&0xff))
129: return (c);
130: return (0);
131: }
132: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.