V86EFlags &= (EFLAGS_ALIGN_CHECK | EFLAGS_INTERRUPT_MASK);
/* Check for VME support */
- ASSERT(KeI386VirtualIntExtensions == FALSE);
+ if (KeI386VirtualIntExtensions)
+ {
+ /* Set IF based on VIF */
+ V86EFlags &= ~EFLAGS_INTERRUPT_MASK;
+ if (TrapEFlags & EFLAGS_VIF)
+ {
+ V86EFlags |= EFLAGS_INTERRUPT_MASK;
+ }
+ }
/* Mask in the relevant V86 EFlags into the trap flags */
V86EFlags |= (TrapEFlags & ~EFLAGS_INTERRUPT_MASK);
/* And mask out the VIF, nested task and TF flag from the trap flags */
- TrapFrame->EFlags = TrapEFlags &~ (EFLAGS_VIF | EFLAGS_NESTED_TASK | EFLAGS_TF);
+ TrapFrame->EFlags = TrapEFlags & ~(EFLAGS_VIF | EFLAGS_NESTED_TASK | EFLAGS_TF);
/* Add the IOPL flag to the local trap flags */
V86EFlags |= EFLAGS_IOPL;
}
/* Mask out EFlags */
- EFlags &= ~(EFLAGS_IOPL + EFLAGS_VIF + EFLAGS_NESTED_TASK + EFLAGS_VIP);
+ EFlags &= ~(EFLAGS_VIP | EFLAGS_VIF | EFLAGS_NESTED_TASK | EFLAGS_IOPL);
V86EFlags = EFlags;
/* Check for VME support */
- ASSERT(KeI386VirtualIntExtensions == FALSE);
+ if (KeI386VirtualIntExtensions)
+ {
+ if (EFlags & EFLAGS_INTERRUPT_MASK)
+ {
+ EFlags |= EFLAGS_VIF;
+ }
+ }
/* Add V86 and Interrupt flag */
EFlags |= EFLAGS_V86_MASK | EFLAGS_INTERRUPT_MASK;