text: /*	$NetBSD: sys_machdep.c,v 1.9 1996/05/05 06:18:58 briggs Exp $	*/
  
  /*
   * Copyright (c) 1990 The Regents of the University of California.
   * All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   * 3. All advertising materials mentioning features or use of this software
   *    must display the following acknowledgement:
   *	This product includes software developed by the University of
   *	California, Berkeley and its contributors.
   * 4. Neither the name of the University nor the names of its contributors
   *    may be used to endorse or promote products derived from this software
   *    without specific prior written permission.
   *
   * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
  */
  /*-
   * Copyright (C) 1993	Allen K. Briggs, Chris P. Caputo,
   *			Michael L. Finch, Bradley A. Grantham, and
   *			Lawrence A. Kesteloot
   * All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   * 3. All advertising materials mentioning features or use of this software
   *    must display the following acknowledgement:
   *	This product includes software developed by the Alice Group.
   * 4. The names of the Alice Group or any of its members may not be used
   *    to endorse or promote products derived from this software without
   *    specific prior written permission.
   *
   * THIS SOFTWARE IS PROVIDED BY THE ALICE GROUP ``AS IS'' AND ANY EXPRESS OR
   * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   * IN NO EVENT SHALL THE ALICE GROUP BE LIABLE FOR ANY DIRECT, INDIRECT,
   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   */
  /*
   *	@(#)sys_machdep.c	7.7 (Berkeley) 5/7/91
   */
  
  #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 <sys/mount.h>
  
  #include <sys/syscallargs.h>
  
  #ifdef TRACE
  int	nvualarm;
  
  vtrace(p, v, retval)
  	struct proc *p;
  	void *v;
  	register_t *retval;
  {
  	register struct vtrace_args /* {
  		syscallarg(int) request;
  		syscallarg(int) value;
  	} */ *uap = v;
  	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 <machine/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 */
  
  int	cachectl __P((int, caddr_t, int));
  void	DCIU __P((void));
  void	ICIA __P((void));
  
  /*ARGSUSED1*/
  int
  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:
  		DCIU();
  		break;
  	case CC_EXTPURGE|CC_IPURGE:
  		DCIU();
  		/* fall into... */
  	case CC_IPURGE:
  		ICIA();
  		break;
  	default:
  		error = EINVAL;
  		break;
  	}
  	return(error);
  }
  
  int sys_sysarch(p, v, retval)
  	struct proc *p;
  	void *v;
  	register_t *retval;
  {
  #if 0
  	struct sysarch_args /* {
  		syscallarg(int) op; 
  		syscallarg(char *) parms;
  	} */ *uap = v;
  #endif
  
  	return ENOSYS;
  }
  