]> git.proxmox.com Git - mirror_edk2.git/blobdiff - DuetPkg/BiosVideoThunkDxe/LegacyBiosThunk.c
MdeModulePkg CapsuleApp: Do not parse bits in CapsuleFlags of ESRT
[mirror_edk2.git] / DuetPkg / BiosVideoThunkDxe / LegacyBiosThunk.c
index 08ed35c1f4aadfe93050c5bc424daad7fb1f1f64..6dc453ff0932e10dce8115a1032c9b5db7ad9731 100644 (file)
@@ -1,8 +1,8 @@
 /** @file\r
   Provide legacy thunk interface for accessing Bios Video Rom.\r
   \r
-Copyright (c) 2006 - 2007, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
+Copyright (c) 2006 - 2007, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials                          \r
 are licensed and made available under the terms and conditions of the BSD License         \r
 which accompanies this distribution.  The full text of the license may be found at        \r
 http://opensource.org/licenses/bsd-license.php                                            \r
@@ -30,26 +30,25 @@ InitializeBiosIntCaller (
   UINT32                RealModeBufferSize;\r
   UINT32                ExtraStackSize;\r
   EFI_PHYSICAL_ADDRESS  LegacyRegionBase;\r
-  \r
+  UINT32                LegacyRegionSize;\r
   //\r
   // Get LegacyRegion\r
   //\r
   AsmGetThunk16Properties (&RealModeBufferSize, &ExtraStackSize);\r
-\r
+  LegacyRegionSize = (((RealModeBufferSize + ExtraStackSize) / EFI_PAGE_SIZE) + 1) * EFI_PAGE_SIZE;\r
   LegacyRegionBase = 0x100000;\r
   Status = gBS->AllocatePages (\r
                   AllocateMaxAddress,\r
                   EfiACPIMemoryNVS,\r
-                  EFI_SIZE_TO_PAGES(RealModeBufferSize + ExtraStackSize + 200),\r
+                  EFI_SIZE_TO_PAGES(LegacyRegionSize),\r
                   &LegacyRegionBase\r
                   );\r
   ASSERT_EFI_ERROR (Status);\r
   \r
   ThunkContext->RealModeBuffer     = (VOID*)(UINTN)LegacyRegionBase;\r
-  ThunkContext->RealModeBufferSize = EFI_PAGES_TO_SIZE (RealModeBufferSize);\r
-  ThunkContext->ThunkAttributes    = 3;\r
+  ThunkContext->RealModeBufferSize = LegacyRegionSize;\r
+  ThunkContext->ThunkAttributes    = THUNK_ATTRIBUTE_BIG_REAL_MODE|THUNK_ATTRIBUTE_DISABLE_A20_MASK_INT_15;\r
   AsmPrepareThunk16(ThunkContext);\r
-  \r
 }\r
 \r
 /**\r
@@ -137,14 +136,14 @@ EFIAPI
 LegacyBiosInt86 (\r
   IN  BIOS_VIDEO_DEV                 *BiosDev,\r
   IN  UINT8                           BiosInt,\r
-  IN  EFI_IA32_REGISTER_SET           *Regs\r
+  IN  IA32_REGISTER_SET              *Regs\r
   )\r
 {\r
   UINTN                 Status;\r
-  UINTN                 Eflags;\r
   IA32_REGISTER_SET     ThunkRegSet;\r
   BOOLEAN               Ret;\r
   UINT16                *Stack16;\r
+  BOOLEAN               Enabled;\r
   \r
   ZeroMem (&ThunkRegSet, sizeof (ThunkRegSet));\r
   ThunkRegSet.E.EFLAGS.Bits.Reserved_0 = 1;\r
@@ -170,10 +169,7 @@ LegacyBiosInt86 (
   //\r
   // The call to Legacy16 is a critical section to EFI\r
   //\r
-  Eflags = AsmReadEflags ();\r
-  if ((Eflags | EFI_CPU_EFLAGS_IF) != 0) {\r
-    DisableInterrupts ();\r
-  }\r
+  Enabled = SaveAndDisableInterrupts();\r
 \r
   //\r
   // Set Legacy16 state. 0x08, 0x70 is legacy 8259 vector bases.\r
@@ -200,9 +196,7 @@ LegacyBiosInt86 (
   //\r
   // End critical section\r
   //\r
-  if ((Eflags | EFI_CPU_EFLAGS_IF) != 0) {\r
-    EnableInterrupts ();\r
-  }\r
+  SetInterruptState (Enabled);\r
 \r
   Regs->E.EDI      = ThunkRegSet.E.EDI;      \r
   Regs->E.ESI      = ThunkRegSet.E.ESI;  \r
@@ -216,9 +210,9 @@ LegacyBiosInt86 (
   Regs->E.DS       = ThunkRegSet.E.DS;  \r
   Regs->E.ES       = ThunkRegSet.E.ES;\r
 \r
-  CopyMem (&(Regs->E.EFlags), &(ThunkRegSet.E.EFLAGS), sizeof (UINT32));\r
+  CopyMem (&(Regs->E.EFLAGS), &(ThunkRegSet.E.EFLAGS), sizeof (UINT32));\r
 \r
-  Ret = (BOOLEAN) (Regs->E.EFlags.CF == 1);\r
+  Ret = (BOOLEAN) (Regs->E.EFLAGS.Bits.CF == 1);\r
 \r
   return Ret;\r
 }\r