Syscall frontend for mtrr functions.
This commit is contained in:
parent
38db8748a4
commit
86b144f468
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: sys_machdep.c,v 1.59 2001/06/17 21:01:36 sommerfeld Exp $ */
|
/* $NetBSD: sys_machdep.c,v 1.60 2001/09/10 10:13:04 fvdl Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1998 The NetBSD Foundation, Inc.
|
* Copyright (c) 1998 The NetBSD Foundation, Inc.
|
||||||
|
@ -39,6 +39,7 @@
|
||||||
#include "opt_vm86.h"
|
#include "opt_vm86.h"
|
||||||
#include "opt_user_ldt.h"
|
#include "opt_user_ldt.h"
|
||||||
#include "opt_perfctrs.h"
|
#include "opt_perfctrs.h"
|
||||||
|
#include "opt_mtrr.h"
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/systm.h>
|
#include <sys/systm.h>
|
||||||
|
@ -64,6 +65,7 @@
|
||||||
#include <machine/psl.h>
|
#include <machine/psl.h>
|
||||||
#include <machine/reg.h>
|
#include <machine/reg.h>
|
||||||
#include <machine/sysarch.h>
|
#include <machine/sysarch.h>
|
||||||
|
#include <machine/mtrr.h>
|
||||||
|
|
||||||
#ifdef VM86
|
#ifdef VM86
|
||||||
#include <machine/vm86.h>
|
#include <machine/vm86.h>
|
||||||
|
@ -78,6 +80,8 @@ extern struct vm_map *kernel_map;
|
||||||
int i386_iopl __P((struct proc *, void *, register_t *));
|
int i386_iopl __P((struct proc *, void *, register_t *));
|
||||||
int i386_get_ioperm __P((struct proc *, void *, register_t *));
|
int i386_get_ioperm __P((struct proc *, void *, register_t *));
|
||||||
int i386_set_ioperm __P((struct proc *, void *, register_t *));
|
int i386_set_ioperm __P((struct proc *, void *, register_t *));
|
||||||
|
int i386_get_mtrr __P((struct proc *, void *, register_t *));
|
||||||
|
int i386_set_mtrr __P((struct proc *, void *, register_t *));
|
||||||
|
|
||||||
#ifdef USER_LDT
|
#ifdef USER_LDT
|
||||||
int
|
int
|
||||||
|
@ -356,6 +360,62 @@ i386_set_ioperm(p, args, retval)
|
||||||
return copyin(ua.iomap, pcb->pcb_iomap, sizeof(pcb->pcb_iomap));
|
return copyin(ua.iomap, pcb->pcb_iomap, sizeof(pcb->pcb_iomap));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef MTRR
|
||||||
|
int
|
||||||
|
i386_get_mtrr(struct proc *p, void *args, register_t *retval)
|
||||||
|
{
|
||||||
|
struct i386_get_mtrr_args ua;
|
||||||
|
int error, n;
|
||||||
|
|
||||||
|
if (mtrr_funcs == NULL)
|
||||||
|
return ENOSYS;
|
||||||
|
|
||||||
|
error = copyin(args, &ua, sizeof ua);
|
||||||
|
if (error != 0)
|
||||||
|
return error;
|
||||||
|
|
||||||
|
error = copyin(ua.n, &n, sizeof n);
|
||||||
|
if (error != 0)
|
||||||
|
return error;
|
||||||
|
|
||||||
|
error = mtrr_get(ua.mtrrp, &n, p, MTRR_GETSET_USER);
|
||||||
|
|
||||||
|
copyout(&n, ua.n, sizeof (int));
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
i386_set_mtrr(struct proc *p, void *args, register_t *retval)
|
||||||
|
{
|
||||||
|
int error, n;
|
||||||
|
struct i386_set_mtrr_args ua;
|
||||||
|
|
||||||
|
if (mtrr_funcs == NULL)
|
||||||
|
return ENOSYS;
|
||||||
|
|
||||||
|
error = suser(p->p_ucred, &p->p_acflag);
|
||||||
|
if (error != 0)
|
||||||
|
return error;
|
||||||
|
|
||||||
|
error = copyin(args, &ua, sizeof ua);
|
||||||
|
if (error != 0)
|
||||||
|
return error;
|
||||||
|
|
||||||
|
error = copyin(ua.n, &n, sizeof n);
|
||||||
|
if (error != 0)
|
||||||
|
return error;
|
||||||
|
|
||||||
|
error = mtrr_set(ua.mtrrp, &n, p, MTRR_GETSET_USER);
|
||||||
|
if (n != 0)
|
||||||
|
mtrr_commit();
|
||||||
|
|
||||||
|
copyout(&n, ua.n, sizeof n);
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
sys_sysarch(p, v, retval)
|
sys_sysarch(p, v, retval)
|
||||||
struct proc *p;
|
struct proc *p;
|
||||||
|
@ -396,7 +456,14 @@ sys_sysarch(p, v, retval)
|
||||||
error = i386_vm86(p, SCARG(uap, parms), retval);
|
error = i386_vm86(p, SCARG(uap, parms), retval);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef MTRR
|
||||||
|
case I386_GET_MTRR:
|
||||||
|
error = i386_get_mtrr(p, SCARG(uap, parms), retval);
|
||||||
|
break;
|
||||||
|
case I386_SET_MTRR:
|
||||||
|
error = i386_set_mtrr(p, SCARG(uap, parms), retval);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
#ifdef PERFCTRS
|
#ifdef PERFCTRS
|
||||||
case I386_PMC_INFO:
|
case I386_PMC_INFO:
|
||||||
error = pmc_info(p, SCARG(uap, parms), retval);
|
error = pmc_info(p, SCARG(uap, parms), retval);
|
||||||
|
|
Loading…
Reference in New Issue