xref: /original-bsd/sys/hp300/hp300/sys_machdep.c (revision 85e7c9a4)
1*85e7c9a4Smckusick /*
2*85e7c9a4Smckusick  * Copyright (c) 1982, 1986 Regents of the University of California.
3*85e7c9a4Smckusick  * All rights reserved.
4*85e7c9a4Smckusick  *
5*85e7c9a4Smckusick  * %sccs.include.redist.c%
6*85e7c9a4Smckusick  *
7*85e7c9a4Smckusick  *	@(#)sys_machdep.c	7.1 (Berkeley) 05/08/90
8*85e7c9a4Smckusick  */
9*85e7c9a4Smckusick 
10*85e7c9a4Smckusick #include "param.h"
11*85e7c9a4Smckusick #include "systm.h"
12*85e7c9a4Smckusick #include "user.h"
13*85e7c9a4Smckusick #include "ioctl.h"
14*85e7c9a4Smckusick #include "file.h"
15*85e7c9a4Smckusick #include "proc.h"
16*85e7c9a4Smckusick #include "uio.h"
17*85e7c9a4Smckusick #include "kernel.h"
18*85e7c9a4Smckusick #include "mtio.h"
19*85e7c9a4Smckusick #include "buf.h"
20*85e7c9a4Smckusick #include "trace.h"
21*85e7c9a4Smckusick 
22*85e7c9a4Smckusick #include "pte.h"
23*85e7c9a4Smckusick 
24*85e7c9a4Smckusick #ifdef TRACE
25*85e7c9a4Smckusick int	nvualarm;
26*85e7c9a4Smckusick 
27*85e7c9a4Smckusick vtrace()
28*85e7c9a4Smckusick {
29*85e7c9a4Smckusick 	register struct a {
30*85e7c9a4Smckusick 		int	request;
31*85e7c9a4Smckusick 		int	value;
32*85e7c9a4Smckusick 	} *uap;
33*85e7c9a4Smckusick 	int vdoualarm();
34*85e7c9a4Smckusick 
35*85e7c9a4Smckusick 	uap = (struct a *)u.u_ap;
36*85e7c9a4Smckusick 	switch (uap->request) {
37*85e7c9a4Smckusick 
38*85e7c9a4Smckusick 	case VTR_DISABLE:		/* disable a trace point */
39*85e7c9a4Smckusick 	case VTR_ENABLE:		/* enable a trace point */
40*85e7c9a4Smckusick 		if (uap->value < 0 || uap->value >= TR_NFLAGS)
41*85e7c9a4Smckusick 			u.u_error = EINVAL;
42*85e7c9a4Smckusick 		else {
43*85e7c9a4Smckusick 			u.u_r.r_val1 = traceflags[uap->value];
44*85e7c9a4Smckusick 			traceflags[uap->value] = uap->request;
45*85e7c9a4Smckusick 		}
46*85e7c9a4Smckusick 		break;
47*85e7c9a4Smckusick 
48*85e7c9a4Smckusick 	case VTR_VALUE:		/* return a trace point setting */
49*85e7c9a4Smckusick 		if (uap->value < 0 || uap->value >= TR_NFLAGS)
50*85e7c9a4Smckusick 			u.u_error = EINVAL;
51*85e7c9a4Smckusick 		else
52*85e7c9a4Smckusick 			u.u_r.r_val1 = traceflags[uap->value];
53*85e7c9a4Smckusick 		break;
54*85e7c9a4Smckusick 
55*85e7c9a4Smckusick 	case VTR_UALARM:	/* set a real-time ualarm, less than 1 min */
56*85e7c9a4Smckusick 		if (uap->value <= 0 || uap->value > 60 * hz ||
57*85e7c9a4Smckusick 		    nvualarm > 5)
58*85e7c9a4Smckusick 			u.u_error = EINVAL;
59*85e7c9a4Smckusick 		else {
60*85e7c9a4Smckusick 			nvualarm++;
61*85e7c9a4Smckusick 			timeout(vdoualarm, (caddr_t)u.u_procp->p_pid,
62*85e7c9a4Smckusick 			    uap->value);
63*85e7c9a4Smckusick 		}
64*85e7c9a4Smckusick 		break;
65*85e7c9a4Smckusick 
66*85e7c9a4Smckusick 	case VTR_STAMP:
67*85e7c9a4Smckusick 		trace(TR_STAMP, uap->value, u.u_procp->p_pid);
68*85e7c9a4Smckusick 		break;
69*85e7c9a4Smckusick 	}
70*85e7c9a4Smckusick }
71*85e7c9a4Smckusick 
72*85e7c9a4Smckusick vdoualarm(arg)
73*85e7c9a4Smckusick 	int arg;
74*85e7c9a4Smckusick {
75*85e7c9a4Smckusick 	register struct proc *p;
76*85e7c9a4Smckusick 
77*85e7c9a4Smckusick 	p = pfind(arg);
78*85e7c9a4Smckusick 	if (p)
79*85e7c9a4Smckusick 		psignal(p, 16);
80*85e7c9a4Smckusick 	nvualarm--;
81*85e7c9a4Smckusick }
82*85e7c9a4Smckusick #endif
83