diff options
Diffstat (limited to 'sys/arch/i386/include/vm86.h')
-rw-r--r-- | sys/arch/i386/include/vm86.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/sys/arch/i386/include/vm86.h b/sys/arch/i386/include/vm86.h new file mode 100644 index 00000000000..1f21db3dbdc --- /dev/null +++ b/sys/arch/i386/include/vm86.h @@ -0,0 +1,79 @@ +/* $NetBSD: vm86.h,v 1.1 1996/01/08 13:51:45 mycroft Exp $ */ + +/* + * Copyright (c) 1995 John T. Kohl + * 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. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR `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 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. + * + */ + +#define SETFLAGS(targ, new, newmask) (targ) = ((targ) & ~(newmask)) | ((new) & (newmask)) +#define VM86_EFLAGS(p) ((p)->p_addr->u_pcb.vm86_eflags) +#define VM86_FLAGMASK(p) ((p)->p_addr->u_pcb.vm86_flagmask) + +#define VM86_TYPE(x) ((x) & 0xff) +#define VM86_ARG(x) (((x) & 0xff00) >> 8) +#define VM86_MAKEVAL(type,arg) ((type) | (((arg) & 0xff) << 8)) +#define VM86_STI 0 +#define VM86_INTx 1 +#define VM86_SIGNAL 2 +#define VM86_UNKNOWN 3 + +struct vm86_regs { + struct sigcontext vmsc; +}; + +struct vm86_kern { /* kernel uses this stuff */ + struct vm86_regs regs; + unsigned long ss_cpu_type; +}; +#define cpu_type substr.ss_cpu_type + +/* + * Kernel keeps copy of user-mode address of this, but doesn't copy it in. + */ +struct vm86_struct { + struct vm86_kern substr; + unsigned long screen_bitmap; /* not used/supported (yet) */ + unsigned long flags; /* not used/supported (yet) */ + unsigned char int_byuser[32]; /* 256 bits each: pass control to user */ + unsigned char int21_byuser[32]; /* otherwise, handle directly */ +}; + +#define BIOSSEG 0x0f000 + +#define VCPU_086 0 +#define VCPU_186 1 +#define VCPU_286 2 +#define VCPU_386 3 +#define VCPU_486 4 +#define VCPU_586 5 + +#ifdef _KERNEL +int i386_vm86 __P((struct proc *, char *, register_t *)); +void vm86_gpfault __P((struct proc *, int)); +#else +int i386_vm86 __P((struct vm86_struct *vmcp)); +#endif |