diff options
-rw-r--r-- | sys/arch/i386/conf/Makefile.i386 | 4 | ||||
-rw-r--r-- | sys/arch/i386/conf/files.i386 | 6 | ||||
-rw-r--r-- | sys/arch/i386/i386/autoconf.c | 6 | ||||
-rw-r--r-- | sys/arch/i386/i386/kvm86.c | 347 | ||||
-rw-r--r-- | sys/arch/i386/i386/kvm86call.S | 223 | ||||
-rw-r--r-- | sys/arch/i386/i386/trap.c | 12 | ||||
-rw-r--r-- | sys/arch/i386/include/kvm86.h | 43 |
7 files changed, 5 insertions, 636 deletions
diff --git a/sys/arch/i386/conf/Makefile.i386 b/sys/arch/i386/conf/Makefile.i386 index 0fbe0b53a40..6c4e5659913 100644 --- a/sys/arch/i386/conf/Makefile.i386 +++ b/sys/arch/i386/conf/Makefile.i386 @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile.i386,v 1.136 2019/11/07 20:42:28 guenther Exp $ +# $OpenBSD: Makefile.i386,v 1.137 2019/12/08 12:25:30 mpi Exp $ # For instructions on building kernels consult the config(8) and options(4) # manual pages. @@ -165,7 +165,7 @@ depend obj: locore0.o: ${_machdir}/${_mach}/locore0.S assym.h locore.o mutex.o in_cksum.o mptramp.o: assym.h -kvm86call.o acpi_wakecode.o: assym.h +acpi_wakecode.o: assym.h hardlink-obsd: [[ ! -f /bsd ]] || cmp -s bsd /bsd || ln -f /bsd /obsd diff --git a/sys/arch/i386/conf/files.i386 b/sys/arch/i386/conf/files.i386 index e067c0f6f87..b4cf858e8e6 100644 --- a/sys/arch/i386/conf/files.i386 +++ b/sys/arch/i386/conf/files.i386 @@ -1,4 +1,4 @@ -# $OpenBSD: files.i386,v 1.245 2019/12/06 09:48:01 mpi Exp $ +# $OpenBSD: files.i386,v 1.246 2019/12/08 12:25:30 mpi Exp $ # # new style config file for i386 architecture # @@ -251,10 +251,6 @@ file arch/i386/isa/joy_isapnp.c joy_isapnp # Compatibility modules # -# VM86 in kernel -file arch/i386/i386/kvm86.c kvm86 -file arch/i386/i386/kvm86call.S kvm86 - device bios {} attach bios at mainbus file arch/i386/i386/bios.c bios needs-count diff --git a/sys/arch/i386/i386/autoconf.c b/sys/arch/i386/i386/autoconf.c index e3173d2d19d..31e9b42f68f 100644 --- a/sys/arch/i386/i386/autoconf.c +++ b/sys/arch/i386/i386/autoconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: autoconf.c,v 1.105 2018/02/07 18:42:38 naddy Exp $ */ +/* $OpenBSD: autoconf.c,v 1.106 2019/12/08 12:25:30 mpi Exp $ */ /* $NetBSD: autoconf.c,v 1.20 1996/05/03 19:41:56 christos Exp $ */ /*- @@ -67,7 +67,6 @@ #include <machine/cpu.h> #include <machine/gdt.h> #include <machine/biosvar.h> -#include <machine/kvm86.h> #include <dev/cons.h> @@ -137,9 +136,6 @@ cpu_configure(void) /* Set up proc0's TSS */ i386_proc0_tss_init(); -#ifdef KVM86 - kvm86_init(); -#endif pmap_bootstrap_pae(); #if defined(MULTIPROCESSOR) || \ diff --git a/sys/arch/i386/i386/kvm86.c b/sys/arch/i386/i386/kvm86.c deleted file mode 100644 index 160252c7418..00000000000 --- a/sys/arch/i386/i386/kvm86.c +++ /dev/null @@ -1,347 +0,0 @@ -/* $OpenBSD: kvm86.c,v 1.17 2018/04/11 15:44:08 bluhm Exp $ */ -/* $NetBSD: kvm86.c,v 1.10 2005/12/26 19:23:59 perry Exp $ */ -/* - * Copyright (c) 2002 - * Matthias Drochner. 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. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/proc.h> -#include <sys/user.h> -#include <sys/malloc.h> -#include <sys/mutex.h> - -#include <uvm/uvm_extern.h> - -#include <machine/tss.h> -#include <machine/pte.h> -#include <machine/pmap.h> -#include <machine/kvm86.h> -#include <machine/cpu.h> - -/* assembler functions in kvm86call.s */ -extern int kvm86_call(struct trapframe *); -extern void kvm86_ret(struct trapframe *, int); - -#define PGTABLE_SIZE ((1024 + 64) * 1024 / PAGE_SIZE) - -typedef uint32_t pt_entry_t; - -struct kvm86_data { - pt_entry_t pgtbl[PGTABLE_SIZE]; - - struct segment_descriptor sd; - - struct i386tss tss; - u_long iomap[0x10000/32]; -}; - -void kvm86_map(struct kvm86_data *, paddr_t, uint32_t); -void kvm86_mapbios(struct kvm86_data *); -void kvm86_prepare(struct kvm86_data *vmd); -/* - * global VM for BIOS calls - */ -struct kvm86_data *bioscallvmd; -/* page for trampoline and stack */ -void *bioscallscratchpage; -/* where this page is mapped in the vm86 */ -#define BIOSCALLSCRATCHPAGE_VMVA 0x1000 -/* a virtual page to map in vm86 memory temporarily */ -vaddr_t bioscalltmpva; - -struct mutex kvm86_mp_mutex; - -#define KVM86_IOPL3 /* not strictly necessary, saves a lot of traps */ - -void -kvm86_init(void) -{ - size_t vmdsize; - char *buf; - struct kvm86_data *vmd; - struct i386tss *tss; - paddr_t pa; - int i; - - vmdsize = round_page(sizeof(struct kvm86_data)) + PAGE_SIZE; - - if ((buf = (char *)uvm_km_zalloc(kernel_map, vmdsize)) == NULL) - return; - - /* first page is stack */ - vmd = (struct kvm86_data *)(buf + PAGE_SIZE); - tss = &vmd->tss; - - /* derive TSS from primary cpu */ - memcpy(tss, cpu_info_primary.ci_tss, sizeof(struct i386tss)); - tss->tss_esp0 = (int)vmd; - tss->tss_ss0 = GSEL(GDATA_SEL, SEL_KPL); - for (i = 0; i < sizeof(vmd->iomap) / 4; i++) - vmd->iomap[i] = 0; - tss->tss_ioopt = ((caddr_t)vmd->iomap - (caddr_t)&tss) << 16; - - /* setup TSS descriptor */ - setsegment(&vmd->sd, tss, - sizeof(struct i386tss) + sizeof(vmd->iomap) - 1, - SDT_SYS386TSS, SEL_KPL, 0, 0); - - /* prepare VM for BIOS calls */ - kvm86_mapbios(vmd); - if ((bioscallscratchpage = (void *)uvm_km_alloc(kernel_map, PAGE_SIZE)) - == 0) - return; - - pmap_extract(pmap_kernel(), (vaddr_t)bioscallscratchpage, &pa); - kvm86_map(vmd, pa, BIOSCALLSCRATCHPAGE_VMVA); - bioscallvmd = vmd; - bioscalltmpva = uvm_km_alloc(kernel_map, PAGE_SIZE); - mtx_init(&kvm86_mp_mutex, IPL_IPI); -} - -/* - * XXX pass some stuff to the assembler code - * XXX this should be done cleanly (in call argument to kvm86_call()) - */ - -volatile struct i386tss *vm86tss; -volatile int vm86tssd0, vm86tssd1; -volatile paddr_t vm86newptd; -volatile struct trapframe *vm86frame; -volatile pt_entry_t *vm86pgtableva; - -void -kvm86_prepare(struct kvm86_data *vmd) -{ - vm86newptd = vtophys((vaddr_t)vmd) | PG_V | PG_RW | PG_U | PG_u; - vm86pgtableva = vmd->pgtbl; - vm86frame = (struct trapframe *)vmd - 1; - vm86tss = &vmd->tss; - vm86tssd0 = *(int*)&vmd->sd; - vm86tssd1 = *((int*)&vmd->sd + 1); -} - -void -kvm86_map(struct kvm86_data *vmd, paddr_t pa, uint32_t vmva) -{ - - vmd->pgtbl[vmva >> 12] = pa | PG_V | PG_RW | PG_U | PG_u; -} - -void -kvm86_mapbios(struct kvm86_data *vmd) -{ - paddr_t pa; - - /* map first physical page (vector table, BIOS data) */ - kvm86_map(vmd, 0, 0); - - /* map ISA hole */ - for (pa = 0xa0000; pa < 0x100000; pa += PAGE_SIZE) - kvm86_map(vmd, pa, pa); -} - -void * -kvm86_bios_addpage(uint32_t vmva) -{ - void *mem; - paddr_t pa; - - if (bioscallvmd->pgtbl[vmva >> 12]) /* allocated? */ - return (NULL); - - if ((mem = (void *)uvm_km_alloc(kernel_map, PAGE_SIZE)) == NULL) - return (NULL); - - pmap_extract(pmap_kernel(), (vaddr_t)mem, &pa); - kvm86_map(bioscallvmd, pa, vmva); - - return (mem); -} - -void -kvm86_bios_delpage(uint32_t vmva, void *kva) -{ - - bioscallvmd->pgtbl[vmva >> 12] = 0; - uvm_km_free(kernel_map, (vaddr_t)kva, PAGE_SIZE); -} - -size_t -kvm86_bios_read(u_int32_t vmva, char *buf, size_t len) -{ - size_t todo, now; - paddr_t vmpa; - - todo = len; - while (todo > 0) { - now = min(todo, PAGE_SIZE - (vmva & (PAGE_SIZE - 1))); - - if (!bioscallvmd->pgtbl[vmva >> 12]) - break; - vmpa = bioscallvmd->pgtbl[vmva >> 12] & ~(PAGE_SIZE - 1); - pmap_kenter_pa(bioscalltmpva, vmpa, PROT_READ); - pmap_update(pmap_kernel()); - - memcpy(buf, (void *)(bioscalltmpva + (vmva & (PAGE_SIZE - 1))), - now); - buf += now; - todo -= now; - vmva += now; - } - return (len - todo); -} - -int -kvm86_bioscall(int intno, struct trapframe *tf) -{ - static const unsigned char call[] = { - 0xfa, /* CLI */ - 0xcd, /* INTxx */ - 0, - 0xfb, /* STI */ - 0xf4 /* HLT */ - }; - - memcpy(bioscallscratchpage, call, sizeof(call)); - *((unsigned char *)bioscallscratchpage + 2) = intno; - - tf->tf_eip = BIOSCALLSCRATCHPAGE_VMVA; - tf->tf_cs = 0; - tf->tf_esp = BIOSCALLSCRATCHPAGE_VMVA + PAGE_SIZE - 2; - tf->tf_ss = 0; - tf->tf_eflags = PSL_USERSET | PSL_VM; -#ifdef KVM86_IOPL3 - tf->tf_eflags |= PSL_IOPL; -#endif - tf->tf_ds = tf->tf_es = tf->tf_fs = tf->tf_gs = 0; - - kvm86_prepare(bioscallvmd); /* XXX */ - return (kvm86_call(tf)); -} - -int -kvm86_simplecall(int no, struct kvm86regs *regs) -{ - struct trapframe tf; - int res; - - memset(&tf, 0, sizeof(struct trapframe)); - tf.tf_eax = regs->eax; - tf.tf_ebx = regs->ebx; - tf.tf_ecx = regs->ecx; - tf.tf_edx = regs->edx; - tf.tf_esi = regs->esi; - tf.tf_edi = regs->edi; - tf.tf_vm86_es = regs->es; - - mtx_enter(&kvm86_mp_mutex); - res = kvm86_bioscall(no, &tf); - mtx_leave(&kvm86_mp_mutex); - - regs->eax = tf.tf_eax; - regs->ebx = tf.tf_ebx; - regs->ecx = tf.tf_ecx; - regs->edx = tf.tf_edx; - regs->esi = tf.tf_esi; - regs->edi = tf.tf_edi; - regs->es = tf.tf_vm86_es; - regs->eflags = tf.tf_eflags; - - return (res); -} - -void -kvm86_gpfault(struct trapframe *tf) -{ - unsigned char *kva, insn, trapno; - uint16_t *sp; - - kva = (unsigned char *)((tf->tf_cs << 4) + tf->tf_eip); - insn = *kva; -#ifdef KVM86DEBUG - printf("kvm86_gpfault: cs=%x, eip=%x, insn=%x, eflags=%x\n", - tf->tf_cs, tf->tf_eip, insn, tf->tf_eflags); -#endif - - KASSERT(tf->tf_eflags & PSL_VM); - - switch (insn) { - case 0xf4: /* HLT - normal exit */ - kvm86_ret(tf, 0); - break; - case 0xcd: /* INTxx */ - /* fake a return stack frame and call real mode handler */ - trapno = *(kva + 1); - sp = (uint16_t *)((tf->tf_ss << 4) + tf->tf_esp); - *(--sp) = tf->tf_eflags; - *(--sp) = tf->tf_cs; - *(--sp) = tf->tf_eip + 2; - tf->tf_esp -= 6; - tf->tf_cs = *(uint16_t *)(trapno * 4 + 2); - tf->tf_eip = *(uint16_t *)(trapno * 4); - break; - case 0xcf: /* IRET */ - sp = (uint16_t *)((tf->tf_ss << 4) + tf->tf_esp); - tf->tf_eip = *(sp++); - tf->tf_cs = *(sp++); - tf->tf_eflags = *(sp++); - tf->tf_esp += 6; - tf->tf_eflags |= PSL_VM; /* outside of 16bit flag reg */ - break; -#ifndef KVM86_IOPL3 /* XXX check VME? */ - case 0xfa: /* CLI */ - case 0xfb: /* STI */ - /* XXX ignore for now */ - tf->tf_eip++; - break; - case 0x9c: /* PUSHF */ - sp = (uint16_t *)((tf->tf_ss << 4) + tf->tf_esp); - *(--sp) = tf->tf_eflags; - tf->tf_esp -= 2; - tf->tf_eip++; - break; - case 0x9d: /* POPF */ - sp = (uint16_t *)((tf->tf_ss << 4) + tf->tf_esp); - tf->tf_eflags = *(sp++); - tf->tf_esp += 2; - tf->tf_eip++; - tf->tf_eflags |= PSL_VM; /* outside of 16bit flag reg */ - break; -#endif - default: -#ifdef KVM86DEBUG - printf("kvm86_gpfault: unhandled\n"); -#else - printf("kvm86_gpfault: cs=%x, eip=%x, insn=%x, eflags=%x\n", - tf->tf_cs, tf->tf_eip, insn, tf->tf_eflags); -#endif - /* - * signal error to caller - */ - kvm86_ret(tf, -1); - break; - } -} diff --git a/sys/arch/i386/i386/kvm86call.S b/sys/arch/i386/i386/kvm86call.S deleted file mode 100644 index 74812ff7c48..00000000000 --- a/sys/arch/i386/i386/kvm86call.S +++ /dev/null @@ -1,223 +0,0 @@ -/* $OpenBSD: kvm86call.S,v 1.13 2018/04/11 15:44:08 bluhm Exp $ */ -/* $NetBSD: kvm86call.S,v 1.7 2006/04/11 17:14:07 drochner Exp $ */ - -/*- - * Copyright (c) 1998 Jonathan Lemon - * All rights reserved. - * Copyright (c) 2002 - * Matthias Drochner. 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. - * - * $FreeBSD: src/sys/i386/i386/vm86bios.s,v 1.28 2001/12/11 23:33:40 jhb Exp $ - */ - -#include <machine/asm.h> -#include <machine/param.h> -#include <machine/segments.h> -#include "assym.h" - - .data - .align 4 - -/* flag for trap() */ - .globl kvm86_incall -kvm86_incall: .long 0 - -/* XXX arguments for kvm86call() */ - .globl vm86tss, vm86newptd, vm86frame, vm86pgtableva - .globl vm86tssd0, vm86tssd1 - -/* locals */ -SCRARGFRAME: .long 0 -SCRSTACK: .long 0 -SCRTSS0: .long 0 -SCRTSS1: .long 0 - - .text - -#if defined MULTIPROCESSOR -#include <machine/i82489reg.h> -#endif - -/* int kvm86_call(struct trapframe *) */ -ENTRY(kvm86_call) - pushl %ebp - movl %esp,%ebp /* set up frame ptr */ - pushl %esi - pushl %edi - pushl %ebx - pushl %fs - pushl %gs - - movl 8(%ebp),%eax - movl %eax,SCRARGFRAME /* save argument pointer */ - - movl vm86frame,%edi /* target frame location */ - movl SCRARGFRAME,%esi /* source (set on entry) */ - movl $FRAMESIZE/4,%ecx /* sizeof(struct trapframe)/4 */ - rep - movsl /* copy frame to new stack */ - -#ifdef MULTIPROCESSOR - movl _C_LABEL(local_apic)+LAPIC_ID,%eax - shrl $LAPIC_ID_SHIFT,%eax - xorl %ebx,%ebx -1: - leal 0(,%ebx,4),%ecx - incl %ebx - movl _C_LABEL(cpu_info)(%ecx),%ecx - movl CPU_INFO_APICID(%ecx),%edx - cmpl %eax,%edx - jne 1b - movl %ecx,%edx -#else - movl CPUVAR(SELF),%ecx -#endif - - movl CPU_INFO_CURPCB(%ecx),%eax - pushl %eax /* save curpcb */ - -#ifdef MULTIPROCESSOR - movl CPU_INFO_GDT(%edx),%eax -#else - movl CPU_INFO_GDT(%ecx),%eax -#endif - movl $GSEL(GTSS_SEL, SEL_KPL),%edi - andl $~0x0200,4(%eax,%edi,1) /* reset "task busy" */ - - movl 0(%eax,%edi,1),%edx - movl %edx,SCRTSS0 /* save first word */ - movl 4(%eax,%edi,1),%edx - movl %edx,SCRTSS1 /* save second word */ - - movl vm86tssd0,%edx /* vm86 tssd entry */ - movl %edx,0(%eax,%edi,1) - movl vm86tssd1,%edx /* vm86 tssd entry */ - movl %edx,4(%eax,%edi,1) - ltr %di - - movl %cr3,%eax - pushl %eax /* save address space */ - movl PTDpaddr,%ecx - movl %ecx,%ebx - addl $KERNBASE,%ebx /* va of Idle PDP */ - movl 0(%ebx),%eax - pushl %eax /* old pde */ - pushl %ebx /* keep address for reuse */ - - movl %esp,SCRSTACK /* save current stack location */ - - movl vm86newptd,%eax /* mapping for vm86 page table */ - movl %eax,0(%ebx) /* ... install as PDP entry 0 */ - - movl %ecx,%cr3 /* new page tables */ - movl vm86frame,%esp /* switch to new stack */ - - movl $1,kvm86_incall /* set flag for trap() */ - - /* INTRFASTEXIT */ - popl %gs - popl %fs - popl %es - popl %ds - popl %edi - popl %esi - popl %ebp - popl %ebx - popl %edx - popl %ecx - popl %eax - addl $8,%esp - iret - -/* void kvm86_ret(struct trapframe *, int) */ -ENTRY(kvm86_ret) - pushl %ebp - movl %esp,%ebp /* set up frame ptr */ - - movl 8(%ebp),%esi /* source */ - movl SCRARGFRAME,%edi /* destination */ - movl $FRAMESIZE/4,%ecx /* size */ - rep - movsl /* copy frame to original frame */ - - movl SCRSTACK,%esp /* back to old stack */ - popl %ebx /* saved va of Idle PDP */ - popl %eax - movl %eax,0(%ebx) /* restore old pde */ - popl %eax - movl %eax,%cr3 /* install old page table */ - - movl $0,kvm86_incall /* reset trapflag */ - - -#ifdef MULTIPROCESSOR - movl _C_LABEL(local_apic)+LAPIC_ID,%eax - shrl $LAPIC_ID_SHIFT,%eax - xorl %ebx,%ebx -1: - leal 0(,%ebx,4),%ecx - incl %ebx - movl _C_LABEL(cpu_info)(%ecx),%ecx - movl CPU_INFO_APICID(%ecx),%edx - cmpl %eax,%edx - jne 1b - movl CPU_INFO_GDT(%ecx),%eax -#else - movl CPUVAR(SELF),%ecx - movl CPU_INFO_GDT(%ecx),%eax -#endif - movl $GSEL(GTSS_SEL, SEL_KPL),%edi - movl SCRTSS0, %edx - movl %edx, 0(%eax,%edi,1) /* restore first word */ - movl SCRTSS1, %edx - movl %edx, 4(%eax,%edi,1) /* restore second word */ - ltr %di - - -#ifdef MULTIPROCESSOR - movl _C_LABEL(local_apic)+LAPIC_ID,%eax - shrl $LAPIC_ID_SHIFT,%eax - xorl %ebx,%ebx -1: - leal 0(,%ebx,4),%ecx - incl %ebx - movl _C_LABEL(cpu_info)(%ecx),%ecx - movl CPU_INFO_APICID(%ecx),%edx - cmpl %eax,%edx - jne 1b -#else - movl CPUVAR(SELF),%ecx -#endif - popl %eax /* restore curpcb */ - movl %eax,CPU_INFO_CURPCB(%ecx) - - movl 12(%ebp), %eax /* will be kvm86_call()'s retval */ - - popl %gs - popl %fs - popl %ebx - popl %edi - popl %esi - popl %ebp - ret /* back to kvm86_call()'s caller */ diff --git a/sys/arch/i386/i386/trap.c b/sys/arch/i386/i386/trap.c index f683fbd70a2..30fcba0cc72 100644 --- a/sys/arch/i386/i386/trap.c +++ b/sys/arch/i386/i386/trap.c @@ -1,4 +1,4 @@ -/* $OpenBSD: trap.c,v 1.141 2019/09/06 12:22:01 deraadt Exp $ */ +/* $OpenBSD: trap.c,v 1.142 2019/12/08 12:25:30 mpi Exp $ */ /* $NetBSD: trap.c,v 1.95 1996/05/05 06:50:02 mycroft Exp $ */ /*- @@ -63,10 +63,6 @@ #endif #include <sys/exec.h> -#ifdef KVM86 -#include <machine/kvm86.h> -#define KVM86MODE (kvm86_incall) -#endif #include "isa.h" #include "npx.h" @@ -193,12 +189,6 @@ trap(struct trapframe *frame) /*NOTREACHED*/ case T_PROTFLT: -#ifdef KVM86 - if (KVM86MODE) { - kvm86_gpfault(frame); - return; - } -#endif case T_SEGNPFLT: case T_ALIGNFLT: /* Check for copyin/copyout fault. */ diff --git a/sys/arch/i386/include/kvm86.h b/sys/arch/i386/include/kvm86.h deleted file mode 100644 index 3641d3b2c10..00000000000 --- a/sys/arch/i386/include/kvm86.h +++ /dev/null @@ -1,43 +0,0 @@ -/* $OpenBSD: kvm86.h,v 1.2 2011/03/23 16:54:35 pirofti Exp $ */ -/* - * Copyright (c) 2006 Gordon Willem Klok <gwk@openbsd.org> - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ -#ifndef _MACHINE_KVM86_H_ -#define _MACHINE_KVM86_H_ - -struct kvm86regs { - uint32_t eax; - uint32_t ebx; - uint32_t ecx; - uint32_t edx; - uint32_t esi; - uint32_t edi; - uint32_t eflags; - uint32_t es; -}; - -extern int kvm86_incall; - -void kvm86_init(void); -void kvm86_gpfault(struct trapframe *); - -void *kvm86_bios_addpage(uint32_t); -void kvm86_bios_delpage(uint32_t, void *); -size_t kvm86_bios_read(uint32_t, char *, size_t); - -int kvm86_bioscall(int, struct trapframe *); -int kvm86_simplecall(int, struct kvm86regs *); - -#endif |