]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Csm/LegacyBiosDxe/Thunk.c
Fix issue that calling GetS3MemoryInfo() with wrong order.
[mirror_edk2.git] / IntelFrameworkModulePkg / Csm / LegacyBiosDxe / Thunk.c
index 9a62499f05d56da25d6b26c287dfd376b940e1f8..3d9a8b96490ca54794954ed31f4f51c4dc0d10a9 100644 (file)
@@ -57,6 +57,8 @@ LegacyBiosInt86 (
   IN  EFI_IA32_REGISTER_SET         *Regs\r
   )\r
 {\r
+  UINT32  *VectorBase;\r
+\r
   Regs->X.Flags.Reserved1 = 1;\r
   Regs->X.Flags.Reserved2 = 0;\r
   Regs->X.Flags.Reserved3 = 0;\r
@@ -66,11 +68,16 @@ LegacyBiosInt86 (
   Regs->X.Flags.IF        = 0;\r
   Regs->X.Flags.TF        = 0;\r
   Regs->X.Flags.CF        = 0;\r
-\r
+  //\r
+  // The base address of legacy interrupt vector table is 0.\r
+  // We use this base address to get the legacy interrupt handler.\r
+  //\r
+  VectorBase              = 0;\r
+  \r
   return InternalLegacyBiosFarCall (\r
            This,\r
-           (UINT16) (((UINT32 *)NULL)[BiosInt] >> 16),\r
-           (UINT16) ((UINT32 *)NULL)[BiosInt],\r
+           (UINT16) ((VectorBase)[BiosInt] >> 16),\r
+           (UINT16) (VectorBase)[BiosInt],\r
            Regs,\r
            &Regs->X.Flags,\r
            sizeof (Regs->X.Flags)\r
@@ -308,14 +315,14 @@ InternalLegacyBiosFarCall (
   mThunkContext.RealModeState = NULL;\r
 \r
   //\r
-  // End critical section\r
+  // Enable and restore rate of DXE Timer\r
   //\r
-  gBS->RestoreTPL (OriginalTpl);\r
+  Private->Timer->SetTimerPeriod (Private->Timer, TimerPeriod);\r
 \r
   //\r
-  // Enable and restore rate of DXE Timer\r
+  // End critical section\r
   //\r
-  Private->Timer->SetTimerPeriod (Private->Timer, TimerPeriod);\r
+  gBS->RestoreTPL (OriginalTpl);\r
   \r
   //\r
   // Restore interrupt of debug timer\r