]> git.proxmox.com Git - mirror_edk2.git/blobdiff - DuetPkg/BiosVideoThunkDxe/LegacyBiosThunk.c
Fix bug of wrong stack16 stack for thunk call. This may cause Duet failed to enter...
[mirror_edk2.git] / DuetPkg / BiosVideoThunkDxe / LegacyBiosThunk.c
index b8603426c666d1c89bce33467ca6e2940a8aed0a..08ed35c1f4aadfe93050c5bc424daad7fb1f1f64 100644 (file)
@@ -146,17 +146,17 @@ LegacyBiosInt86 (
   BOOLEAN               Ret;\r
   UINT16                *Stack16;\r
   \r
-  Regs->X.Flags.Reserved1 = 1;\r
-  Regs->X.Flags.Reserved2 = 0;\r
-  Regs->X.Flags.Reserved3 = 0;\r
-  Regs->X.Flags.Reserved4 = 0;\r
-  Regs->X.Flags.IOPL      = 3;\r
-  Regs->X.Flags.NT        = 0;\r
-  Regs->X.Flags.IF        = 1;\r
-  Regs->X.Flags.TF        = 0;\r
-  Regs->X.Flags.CF        = 0;\r
-\r
   ZeroMem (&ThunkRegSet, sizeof (ThunkRegSet));\r
+  ThunkRegSet.E.EFLAGS.Bits.Reserved_0 = 1;\r
+  ThunkRegSet.E.EFLAGS.Bits.Reserved_1 = 0;\r
+  ThunkRegSet.E.EFLAGS.Bits.Reserved_2 = 0;\r
+  ThunkRegSet.E.EFLAGS.Bits.Reserved_3 = 0;\r
+  ThunkRegSet.E.EFLAGS.Bits.IOPL       = 3;\r
+  ThunkRegSet.E.EFLAGS.Bits.NT         = 0;\r
+  ThunkRegSet.E.EFLAGS.Bits.IF         = 1;\r
+  ThunkRegSet.E.EFLAGS.Bits.TF         = 0;\r
+  ThunkRegSet.E.EFLAGS.Bits.CF         = 0;\r
+  \r
   ThunkRegSet.E.EDI  = Regs->E.EDI;\r
   ThunkRegSet.E.ESI  = Regs->E.ESI;\r
   ThunkRegSet.E.EBP  = Regs->E.EBP;\r
@@ -167,8 +167,6 @@ LegacyBiosInt86 (
   ThunkRegSet.E.DS   = Regs->E.DS;\r
   ThunkRegSet.E.ES   = Regs->E.ES;\r
 \r
-  CopyMem (&(ThunkRegSet.E.EFLAGS), &(Regs->E.EFlags), sizeof (UINT32));\r
\r
   //\r
   // The call to Legacy16 is a critical section to EFI\r
   //\r
@@ -184,16 +182,15 @@ LegacyBiosInt86 (
   ASSERT_EFI_ERROR (Status);\r
   \r
   Stack16 = (UINT16 *)((UINT8 *) BiosDev->ThunkContext->RealModeBuffer + BiosDev->ThunkContext->RealModeBufferSize - sizeof (UINT16));\r
-  Stack16 -= sizeof (ThunkRegSet.E.EFLAGS) / sizeof (UINT16);\r
-  CopyMem (Stack16, &ThunkRegSet.E.EFLAGS, sizeof (ThunkRegSet.E.EFLAGS));\r
 \r
   ThunkRegSet.E.SS   = (UINT16) (((UINTN) Stack16 >> 16) << 12);\r
   ThunkRegSet.E.ESP  = (UINT16) (UINTN) Stack16;\r
+\r
   ThunkRegSet.E.Eip  = (UINT16)((UINT32 *)NULL)[BiosInt];\r
   ThunkRegSet.E.CS   = (UINT16)(((UINT32 *)NULL)[BiosInt] >> 16);\r
   BiosDev->ThunkContext->RealModeState = &ThunkRegSet;\r
   AsmThunk16 (BiosDev->ThunkContext);\r
-\r
+  \r
   //\r
   // Restore protected mode interrupt state\r
   //\r