diff options
author | jlemon <jlemon@FreeBSD.org> | 1998-07-28 03:39:04 +0000 |
---|---|---|
committer | jlemon <jlemon@FreeBSD.org> | 1998-07-28 03:39:04 +0000 |
commit | 6a5deaf27dc99bbc68aad20defad4d691aa98611 (patch) | |
tree | e4b20c89fd21b8d857dcfefc94453064f416a089 /lib/libc/i386 | |
parent | f4995111a02a5c2ea60f63bc0ffa499b9567aca6 (diff) | |
download | FreeBSD-src-6a5deaf27dc99bbc68aad20defad4d691aa98611.zip FreeBSD-src-6a5deaf27dc99bbc68aad20defad4d691aa98611.tar.gz |
oops, forgot to do ``cvs add'' first.
Diffstat (limited to 'lib/libc/i386')
-rw-r--r-- | lib/libc/i386/sys/i386_get_ioperm.2 | 84 | ||||
-rw-r--r-- | lib/libc/i386/sys/i386_get_ioperm.c | 58 | ||||
-rw-r--r-- | lib/libc/i386/sys/i386_set_ioperm.c | 52 | ||||
-rw-r--r-- | lib/libc/i386/sys/i386_vm86.2 | 95 | ||||
-rw-r--r-- | lib/libc/i386/sys/i386_vm86.c | 49 |
5 files changed, 338 insertions, 0 deletions
diff --git a/lib/libc/i386/sys/i386_get_ioperm.2 b/lib/libc/i386/sys/i386_get_ioperm.2 new file mode 100644 index 0000000..4fc7593 --- /dev/null +++ b/lib/libc/i386/sys/i386_get_ioperm.2 @@ -0,0 +1,84 @@ +.\" Copyright (c) 1998 Jonathan Lemon +.\" 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. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. +.\" +.\" $Id$ +.\" +.Dd July 27, 1998 +.Os +.Dt I386_GET_IOPERM 2 +.Sh NAME +.Nm i386_get_ioperm , +.Nm i386_set_ioperm +.Nd manage per-process access to the i386 I/O port space +.Sh SYNOPSIS +.Fd #include <machine/sysarch.h> +.Ft int +.Fn i386_get_ioperm "u_int start" "u_int *length" "int *enable" +.Ft int +.Fn i386_set_ioperm "u_int start" "u_int length" "int enable" +.Sh DESCRIPTION +.Fn i386_get_ioperm +will return the permission for the process' I/O port space in the +.Fa *enable +argument. The port range starts at +.Fa start +and the number of contiguous entries will be returned in +.Fa *length . +.Pp +.Fn i386_set_ioperm +will set access to a range of I/O ports described by the +.Fa start +and +.Fa length +arguments to the state specified by the +.Fa enable +argument. +.Sh RETURN VALUES +Upon successful completion, +.Fn i386_get_ioperm +and +.Fn i386_set_ioperm +return the value of 0. +Otherwise, a value of -1 is returned and the global +variable +.Va errno +is set to indicate the error. +.Sh ERRORS +.Fn i386_get_ioperm +and +.Fn i386_set_ioperm +will fail if: +.Bl -tag -width [EINVAL] +.It Bq Er EINVAL +An invalid range was specified by the +.Fa start +or +.Fa length +arguments. +.It Bq Er EPERM +The caller of i386_set_ioperm was not the superuser. +.El +.Sh AUTHORS +This man page was written by +.An Jonathan Lemon . diff --git a/lib/libc/i386/sys/i386_get_ioperm.c b/lib/libc/i386/sys/i386_get_ioperm.c new file mode 100644 index 0000000..75793b4 --- /dev/null +++ b/lib/libc/i386/sys/i386_get_ioperm.c @@ -0,0 +1,58 @@ +/*- + * Copyright (c) 1998 Jonathan Lemon + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + * + * $Id$ + */ + +#if defined(LIBC_RCS) && !defined(lint) +static const char rcsid[] = "$Id$"; +#endif /* LIBC_RCS and not lint */ + +#include <sys/types.h> +#include <machine/sysarch.h> + +struct parms { + u_int start; + u_int length; + int enable; +}; + +int +i386_get_ioperm(u_int start, u_int *length, int *enable) +{ + struct parms p; + int error; + + p.start = start; + p.length = *length; + p.enable = *enable; + + error = sysarch(I386_GET_IOPERM, (char *)&p); + + *length = p.length; + *enable = p.enable; + + return (error); +} diff --git a/lib/libc/i386/sys/i386_set_ioperm.c b/lib/libc/i386/sys/i386_set_ioperm.c new file mode 100644 index 0000000..9b5bcd0 --- /dev/null +++ b/lib/libc/i386/sys/i386_set_ioperm.c @@ -0,0 +1,52 @@ +/*- + * Copyright (c) 1998 Jonathan Lemon + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + * + * $Id$ + */ + +#if defined(LIBC_RCS) && !defined(lint) +static const char rcsid[] = "$Id$"; +#endif /* LIBC_RCS and not lint */ + +#include <sys/types.h> +#include <machine/sysarch.h> + +struct parms { + u_int start; + u_int length; + int enable; +}; + +int +i386_set_ioperm(u_int start, u_int length, int enable) +{ + struct parms p; + + p.start = start; + p.length = length; + p.enable = enable; + + return (sysarch(I386_SET_IOPERM, (char *)&p)); +} diff --git a/lib/libc/i386/sys/i386_vm86.2 b/lib/libc/i386/sys/i386_vm86.2 new file mode 100644 index 0000000..5ba6daf --- /dev/null +++ b/lib/libc/i386/sys/i386_vm86.2 @@ -0,0 +1,95 @@ +.\" Copyright (c) 1998 Jonathan Lemon +.\" 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. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. +.\" +.\" $Id$ +.\" +.Dd July 27, 1998 +.Os +.Dt I386_VM86 2 +.Sh NAME +.Nm i386_vm86 +.Nd control vm86-related functions +.Sh SYNOPSIS +.Fd #include <machine/sysarch.h> +.Fd #include <machine/vm86.h> +.Ft int +.Fn i386_vm86 "int function" "void *data" +.Sh DESCRIPTION +.Fn i386_vm86 +is used to call various vm86 related functions. +.Fa function +can be one of the following values: +.Bl -tag -offset indent -width VM86_SET_VME +.It Dv VM86_INIT +This will initialize the kernel's vm86 parameter area for the +process, and permit the process to make vm86 calls. +.Fa data +points to the following structure: +.Bd -literal +struct vm86_init_args { + int debug; + int cpu_type; + u_char int_map[32]; +}; +.Ed +.Pp +.Fa debug +is used to turn on debugging code. +.Fa cpu_type +controls the type of CPU being emulated, and is currently unimplemented. +.Fa int_map +is a bitmap which determines whether vm86 interrupts should be handled +in vm86 mode, or reflected back to the process. If the +.Em Nth +bit is set, the interrupt will be reflected to the process, otherwise +it will be dispatched by the vm86 interrupt table. +.\" .It Dv VM86_SET_VME +.\" .It Dv VM86_GET_VME +.\" .It Dv VM86_INTCALL +.El +.Pp +vm86 mode is entered by calling +.Xr sigreturn 2 +with the correct machine context for vm86, and with the +.Em PSL_VM +bit set. Control returns to the process upon delivery of a signal. +.Sh RETURN VALUES +Upon successful completion, +.Fn i386_vm86 +will return the value of 0. +Otherwise, a value of -1 is returned and the global +variable +.Va errno +is set to indicate the error. +.Sh ERRORS +.Fn i386_vm86 +will fail if: +.Bl -tag -width [ENOMEM] +.It Bq Er EINVAL +The kernel does not have vm86 support, or an invalid function was specified. +.It Bq Er ENOMEM +There is not enough memory to initialize the kernel data structures. +.Sh AUTHORS +This man page was written by +.An Jonathan Lemon . diff --git a/lib/libc/i386/sys/i386_vm86.c b/lib/libc/i386/sys/i386_vm86.c new file mode 100644 index 0000000..e5fdad6 --- /dev/null +++ b/lib/libc/i386/sys/i386_vm86.c @@ -0,0 +1,49 @@ +/*- + * Copyright (c) 1998 Jonathan Lemon + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + * + * $Id$ + */ + +#if defined(LIBC_RCS) && !defined(lint) +static const char rcsid[] = "$Id$"; +#endif /* LIBC_RCS and not lint */ + +#include <machine/sysarch.h> + +struct parms { + int sub_op; + void *sub_args; +}; + +int +i386_vm86(int fcn, void *data) +{ + struct parms p; + + p.sub_op = fcn; + p.sub_args = data; + + return (sysarch(I386_VM86, (void *)&p)); +} |