From 035e9c211efcad6a3ac687bd045c35ead3b1cea5 Mon Sep 17 00:00:00 2001 From: mycroft Date: Fri, 12 Apr 1996 05:57:43 +0000 Subject: [PATCH] Use the flag mask in a somewhat more sane fashion. --- sys/arch/i386/i386/vm86.c | 30 ++++++++++++++++-------------- sys/arch/i386/include/vm86.h | 12 +++++++----- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/sys/arch/i386/i386/vm86.c b/sys/arch/i386/i386/vm86.c index 390559143960..a2f494f399b9 100644 --- a/sys/arch/i386/i386/vm86.c +++ b/sys/arch/i386/i386/vm86.c @@ -1,4 +1,4 @@ -/* $NetBSD: vm86.c,v 1.8 1996/04/11 10:07:17 mycroft Exp $ */ +/* $NetBSD: vm86.c,v 1.9 1996/04/12 05:57:43 mycroft Exp $ */ /*- * Copyright (c) 1996 The NetBSD Foundation, Inc. @@ -382,10 +382,11 @@ i386_vm86(p, args, retval) struct trapframe *tf = p->p_md.md_regs; struct pcb *pcb = &p->p_addr->u_pcb; struct vm86_kern vm86s; - int err; + int error; - if (err = copyin(args, &vm86s, sizeof(vm86s))) - return err; + error = copyin(args, &vm86s, sizeof(vm86s)); + if (error) + return (error); pcb->vm86_userp = (void *)args; @@ -397,18 +398,19 @@ i386_vm86(p, args, retval) case VCPU_086: case VCPU_186: case VCPU_286: - pcb->vm86_flagmask = 0; - break; - case VCPU_386: - pcb->vm86_flagmask = PSL_NT|PSL_IOPL; - break; - case VCPU_486: - pcb->vm86_flagmask = PSL_AC|PSL_NT|PSL_IOPL; - break; - case VCPU_586: - default: pcb->vm86_flagmask = PSL_ID|PSL_AC|PSL_NT|PSL_IOPL; break; + case VCPU_386: + pcb->vm86_flagmask = PSL_ID|PSL_AC; + break; + case VCPU_486: + pcb->vm86_flagmask = PSL_ID; + break; + case VCPU_586: + pcb->vm86_flagmask = 0; + break; + default: + return (EINVAL); } #define DOVREG(reg) tf->tf_vm86_##reg = (u_short) vm86s.regs.vmsc.sc_##reg diff --git a/sys/arch/i386/include/vm86.h b/sys/arch/i386/include/vm86.h index 83537ac49c0b..4345af0329a9 100644 --- a/sys/arch/i386/include/vm86.h +++ b/sys/arch/i386/include/vm86.h @@ -1,4 +1,4 @@ -/* $NetBSD: vm86.h,v 1.4 1996/04/11 10:07:25 mycroft Exp $ */ +/* $NetBSD: vm86.h,v 1.5 1996/04/12 05:57:45 mycroft Exp $ */ #define VM86_USE_VIF @@ -123,7 +123,8 @@ set_vflags(p, flags) struct trapframe *tf = p->p_md.md_regs; struct pcb *pcb = &p->p_addr->u_pcb; - SETFLAGS(pcb->vm86_eflags, flags, pcb->vm86_flagmask | ~VM86_GETDIRECT); + flags &= ~pcb->vm86_flagmask; + SETFLAGS(pcb->vm86_eflags, flags, ~VM86_GETDIRECT); SETFLAGS(tf->tf_eflags, flags, VM86_SETDIRECT); #ifndef VM86_USE_VIF if ((pcb->vm86_eflags & (PSL_I|PSL_VIP)) == (PSL_I|PSL_VIP)) @@ -141,7 +142,7 @@ get_vflags(p) struct pcb *pcb = &p->p_addr->u_pcb; int flags = 0; - SETFLAGS(flags, pcb->vm86_eflags, pcb->vm86_flagmask | ~VM86_GETDIRECT); + SETFLAGS(flags, pcb->vm86_eflags, ~VM86_GETDIRECT); SETFLAGS(flags, tf->tf_eflags, VM86_GETDIRECT); return (flags); } @@ -154,7 +155,8 @@ set_vflags_short(p, flags) struct trapframe *tf = p->p_md.md_regs; struct pcb *pcb = &p->p_addr->u_pcb; - SETFLAGS(pcb->vm86_eflags, flags, (pcb->vm86_flagmask | ~VM86_GETDIRECT) & 0xffff); + flags &= ~pcb->vm86_flagmask; + SETFLAGS(pcb->vm86_eflags, flags, ~VM86_GETDIRECT & 0xffff); SETFLAGS(tf->tf_eflags, flags, VM86_SETDIRECT & 0xffff); #ifndef VM86_USE_VIF if ((pcb->vm86_eflags & (PSL_I|PSL_VIP)) == (PSL_I|PSL_VIP)) @@ -170,7 +172,7 @@ get_vflags_short(p) struct pcb *pcb = &p->p_addr->u_pcb; int flags = 0; - SETFLAGS(flags, pcb->vm86_eflags, (pcb->vm86_flagmask | ~VM86_GETDIRECT) & 0xffff); + SETFLAGS(flags, pcb->vm86_eflags, ~VM86_GETDIRECT & 0xffff); SETFLAGS(flags, tf->tf_eflags, VM86_GETDIRECT & 0xffff); return (flags); }