date and time created 92/06/15 06:38:50 by fujita
authorAkito Fujita <fujita@ucbvax.Berkeley.EDU>
Mon, 15 Jun 1992 21:38:50 +0000 (13:38 -0800)
committerAkito Fujita <fujita@ucbvax.Berkeley.EDU>
Mon, 15 Jun 1992 21:38:50 +0000 (13:38 -0800)
SCCS-vsn: sys/luna68k/luna68k/sys_machdep.c 7.1

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

diff --git a/usr/src/sys/luna68k/luna68k/sys_machdep.c b/usr/src/sys/luna68k/luna68k/sys_machdep.c
new file mode 100644 (file)
index 0000000..8de929c
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 1992 OMRON Corporation.
+ * Copyright (c) 1982, 1986 Regents of the University of California.
+ * All rights reserved.
+ *
+ * %sccs.include.redist.c%
+ *
+ *     OMRON:$Id: sys_machdep.c,v 1.2 92/06/14 06:22:55 moti Exp $
+ *
+ * from: hp300/hp300/sys_machdep.c     7.8 (Berkeley) 6/5/92
+ *
+ *     @(#)sys_machdep.c       7.1 (Berkeley) %G%
+ */
+
+#include "sys/param.h"
+#include "sys/systm.h"
+#include "sys/ioctl.h"
+#include "sys/file.h"
+#include "sys/time.h"
+#include "sys/proc.h"
+#include "sys/uio.h"
+#include "sys/kernel.h"
+#include "sys/mtio.h"
+#include "sys/buf.h"
+#include "sys/trace.h"
+#include "vm/vm.h"
+
+#ifdef TRACE
+int    nvualarm;
+
+vtrace(p, uap, retval)
+       struct proc *p;
+       register struct args {
+               int     request;
+               int     value;
+       } *uap;
+       int *retval;
+{
+       int vdoualarm();
+
+       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)
+                       return (EINVAL);
+               *retval = 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)
+                       return (EINVAL);
+               *retval = 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)
+                       return (EINVAL);
+               nvualarm++;
+               timeout(vdoualarm, (caddr_t)p->p_pid, uap->value);
+               break;
+
+       case VTR_STAMP:
+               trace(TR_STAMP, uap->value, p->p_pid);
+               break;
+       }
+       return (0);
+}
+
+vdoualarm(arg)
+       int arg;
+{
+       register struct proc *p;
+
+       p = pfind(arg);
+       if (p)
+               psignal(p, 16);
+       nvualarm--;
+}
+#endif
+
+#include "../include/cpu.h"
+
+/* XXX should be in an include file somewhere */
+#define CC_PURGE       1
+#define CC_FLUSH       2
+#define CC_IPURGE      4
+#define CC_EXTPURGE    0x80000000
+/* XXX end should be */
+
+/*
+ * Note that what we do here for a 68040 is different than HP-UX.
+ *
+ * In 'pux they either act on a line (len == 16), a page (len == NBPG)
+ * or the whole cache (len == anything else).
+ *
+ * In BSD we attempt to be more optimal when acting on "odd" sizes.
+ * For lengths up to 1024 we do all affected lines, up to 2*NBPG we
+ * do pages, above that we do the entire cache.
+ */
+/*ARGSUSED1*/
+cachectl(req, addr, len)
+       int req;
+       caddr_t addr;
+       int len;
+{
+       int error = 0;
+
+       switch (req) {
+       case CC_EXTPURGE|CC_PURGE:
+       case CC_EXTPURGE|CC_FLUSH:
+       case CC_PURGE:
+       case CC_FLUSH:
+               break;
+       case CC_EXTPURGE|CC_IPURGE:
+       case CC_IPURGE:
+               ICIA();
+               break;
+       default:
+               error = EINVAL;
+               break;
+       }
+       return(error);
+}