From: Bill Joy Date: Tue, 13 Mar 1990 07:48:24 +0000 (-0800) Subject: date and time created 90/03/12 15:48:24 by bill X-Git-Tag: BSD-4_3_Reno-Snapshot-Development~4146 X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/commitdiff_plain/5996b4a56938c4b5bfc114afbf03f4a8d17e331e date and time created 90/03/12 15:48:24 by bill SCCS-vsn: sys/i386/i386/sys_machdep.c 1.1 --- diff --git a/usr/src/sys/i386/i386/sys_machdep.c b/usr/src/sys/i386/i386/sys_machdep.c new file mode 100644 index 0000000000..6dce57c276 --- /dev/null +++ b/usr/src/sys/i386/i386/sys_machdep.c @@ -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