1 /* 2 * Copyright (c) 1982, 1986 Regents of the University of California. 3 * All rights reserved. 4 * 5 * %sccs.include.redist.c% 6 * 7 * @(#)sys_machdep.c 7.7 (Berkeley) 05/07/91 8 */ 9 10 #include "sys/param.h" 11 #include "sys/systm.h" 12 #include "sys/ioctl.h" 13 #include "sys/file.h" 14 #include "sys/time.h" 15 #include "sys/proc.h" 16 #include "sys/uio.h" 17 #include "sys/kernel.h" 18 #include "sys/mtio.h" 19 #include "sys/buf.h" 20 #include "sys/trace.h" 21 22 #ifdef TRACE 23 int nvualarm; 24 25 vtrace(p, uap, retval) 26 struct proc *p; 27 register struct args { 28 int request; 29 int value; 30 } *uap; 31 int *retval; 32 { 33 int vdoualarm(); 34 35 switch (uap->request) { 36 37 case VTR_DISABLE: /* disable a trace point */ 38 case VTR_ENABLE: /* enable a trace point */ 39 if (uap->value < 0 || uap->value >= TR_NFLAGS) 40 return (EINVAL); 41 *retval = traceflags[uap->value]; 42 traceflags[uap->value] = uap->request; 43 break; 44 45 case VTR_VALUE: /* return a trace point setting */ 46 if (uap->value < 0 || uap->value >= TR_NFLAGS) 47 return (EINVAL); 48 *retval = traceflags[uap->value]; 49 break; 50 51 case VTR_UALARM: /* set a real-time ualarm, less than 1 min */ 52 if (uap->value <= 0 || uap->value > 60 * hz || nvualarm > 5) 53 return (EINVAL); 54 nvualarm++; 55 timeout(vdoualarm, (caddr_t)p->p_pid, uap->value); 56 break; 57 58 case VTR_STAMP: 59 trace(TR_STAMP, uap->value, p->p_pid); 60 break; 61 } 62 return (0); 63 } 64 65 vdoualarm(arg) 66 int arg; 67 { 68 register struct proc *p; 69 70 p = pfind(arg); 71 if (p) 72 psignal(p, 16); 73 nvualarm--; 74 } 75 #endif 76 77 #include "../include/cpu.h" 78 79 /* XXX should be in an include file somewhere */ 80 #define CC_PURGE 1 81 #define CC_FLUSH 2 82 #define CC_IPURGE 4 83 #define CC_EXTPURGE 0x80000000 84 /* XXX end should be */ 85 86 /*ARGSUSED1*/ 87 cachectl(req, addr, len) 88 int req; 89 caddr_t addr; 90 int len; 91 { 92 int error = 0; 93 94 switch (req) { 95 case CC_EXTPURGE|CC_PURGE: 96 case CC_EXTPURGE|CC_FLUSH: 97 #if defined(HP370) 98 if (ectype == EC_PHYS) 99 PCIA(); 100 /* fall into... */ 101 #endif 102 case CC_PURGE: 103 case CC_FLUSH: 104 DCIU(); 105 break; 106 case CC_EXTPURGE|CC_IPURGE: 107 #if defined(HP370) 108 if (ectype == EC_PHYS) 109 PCIA(); 110 else 111 #endif 112 DCIU(); 113 /* fall into... */ 114 case CC_IPURGE: 115 ICIA(); 116 break; 117 default: 118 error = EINVAL; 119 break; 120 } 121 return(error); 122 } 123