date and time created 90/03/12 15:48:24 by bill
authorBill Joy <bill@ucbvax.Berkeley.EDU>
Tue, 13 Mar 1990 07:48:24 +0000 (23:48 -0800)
committerBill Joy <bill@ucbvax.Berkeley.EDU>
Tue, 13 Mar 1990 07:48:24 +0000 (23:48 -0800)
SCCS-vsn: sys/i386/i386/sys_machdep.c 1.1

usr/src/sys/i386/i386/sys_machdep.c [new file with mode: 0644]

diff --git a/usr/src/sys/i386/i386/sys_machdep.c b/usr/src/sys/i386/i386/sys_machdep.c
new file mode 100644 (file)
index 0000000..6dce57c
--- /dev/null
@@ -0,0 +1,132 @@
+/*     sys_machdep.c   1.1     86/01/05        */
+
+#include "../h/param.h"
+#include "../h/systm.h"
+#include "../h/dir.h"
+#include "../h/user.h"
+#include "../h/ioctl.h"
+#include "../h/file.h"
+#include "../h/proc.h"
+#include "../h/uio.h"
+#include "../h/kernel.h"
+#include "../h/mtio.h"
+#include "../h/buf.h"
+
+#include "../machine/dkio.h"
+#include "../machine/pte.h"
+
+#ifdef TRACE
+int    nvualarm;
+
+vtrace()
+{
+       register struct a {
+               int     request;
+               int     value;
+       } *uap;
+       int vdoualarm();
+
+       uap = (struct a *)u.u_ap;
+       switch (uap->request) {
+
+       case VTR_DISABLE:               /* disable a trace point */
+       case VTR_ENABLE:                /* enable a trace point */
+               if (uap->value < 0 || uap->value >= TR_NFLAGS)
+                       u.u_error = EINVAL;
+               else {
+                       u.u_r.r_val1 = traceflags[uap->value];
+                       traceflags[uap->value] = uap->request;
+               }
+               break;
+
+       case VTR_VALUE:         /* return a trace point setting */
+               if (uap->value < 0 || uap->value >= TR_NFLAGS)
+                       u.u_error = EINVAL;
+               else
+                       u.u_r.r_val1 = traceflags[uap->value];
+               break;
+
+       case VTR_UALARM:        /* set a real-time ualarm, less than 1 min */
+               if (uap->value <= 0 || uap->value > 60 * hz ||
+                   nvualarm > 5)
+                       u.u_error = EINVAL;
+               else {
+                       nvualarm++;
+                       timeout(vdoualarm, (caddr_t)u.u_procp->p_pid,
+                           uap->value);
+               }
+               break;
+
+       case VTR_STAMP:
+               trace(TR_STAMP, uap->value, u.u_procp->p_pid);
+               break;
+       }
+}
+
+vdoualarm(arg)
+       int arg;
+{
+       register struct proc *p;
+
+       p = pfind(arg);
+       if (p)
+               psignal(p, 16);
+       nvualarm--;
+}
+#endif
+
+#ifdef COMPAT
+/*
+ * Note: these tables are sorted by
+ * ioctl "code" (in ascending order).
+ */
+int dctls[] = { DKIOCHDR, 0 };
+int fctls[] = { FIOCLEX, FIONCLEX, FIOASYNC, FIONBIO, FIONREAD, 0 };
+int mctls[] = { MTIOCTOP, MTIOCGET, 0 };
+int tctls[] = {
+       TIOCGETD, TIOCSETD, TIOCHPCL, TIOCMODG, TIOCMODS,
+       TIOCGETP, TIOCSETP, TIOCSETN, TIOCEXCL, TIOCNXCL,
+       TIOCFLUSH,TIOCSETC, TIOCGETC, TIOCREMOTE,TIOCMGET,
+       TIOCMBIC, TIOCMBIS, TIOCMSET, TIOCSTART,TIOCSTOP,
+       TIOCPKT,  TIOCNOTTY,TIOCSTI,  TIOCOUTQ, TIOCGLTC,
+       TIOCSLTC, TIOCSPGRP,TIOCGPGRP,TIOCCDTR, TIOCSDTR,
+       TIOCCBRK, TIOCSBRK, TIOCLGET, TIOCLSET, TIOCLBIC,
+       TIOCLBIS, 0
+};
+
+/*
+ * Map an old style ioctl command to new.
+ */
+mapioctl(cmd)
+       int cmd;
+{
+       register int *map, c;
+
+       switch ((cmd >> 8) & 0xff) {
+
+       case 'd':
+               map = dctls;
+               break;
+
+       case 'f':
+               map = fctls;
+               break;
+
+       case 'm':
+               map = mctls;
+               break;
+
+       case 't':
+               map = tctls;
+               break;
+
+       default:
+               return (0);
+       }
+       while ((c = *map) && (c&0xff) < (cmd&0xff))
+               map++;
+       if (c && (c&0xff) == (cmd&0xff))
+               return (c);
+       return (0);
+}
+#endif