]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Csm/LegacyBiosDxe/Thunk.c
IntelFrameworkModulePkg: Clean up source files
[mirror_edk2.git] / IntelFrameworkModulePkg / Csm / LegacyBiosDxe / Thunk.c
index 3d9a8b96490ca54794954ed31f4f51c4dc0d10a9..d59686eac996231a5adcae2f540427f673ecc635 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Call into 16-bit BIOS code, Use AsmThunk16 function of BaseLib.\r
 \r
-Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
 \r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions\r
@@ -57,7 +57,8 @@ LegacyBiosInt86 (
   IN  EFI_IA32_REGISTER_SET         *Regs\r
   )\r
 {\r
-  UINT32  *VectorBase;\r
+  UINT16                Segment;\r
+  UINT16                Offset;\r
 \r
   Regs->X.Flags.Reserved1 = 1;\r
   Regs->X.Flags.Reserved2 = 0;\r
@@ -72,12 +73,15 @@ LegacyBiosInt86 (
   // 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
+  ACCESS_PAGE0_CODE (\r
+    Segment               = (UINT16)(((UINT32 *)0)[BiosInt] >> 16);\r
+    Offset                = (UINT16)((UINT32 *)0)[BiosInt];\r
+  );\r
+\r
   return InternalLegacyBiosFarCall (\r
            This,\r
-           (UINT16) ((VectorBase)[BiosInt] >> 16),\r
-           (UINT16) (VectorBase)[BiosInt],\r
+           Segment,\r
+           Offset,\r
            Regs,\r
            &Regs->X.Flags,\r
            sizeof (Regs->X.Flags)\r
@@ -127,7 +131,7 @@ LegacyBiosFarCall86 (
 }\r
 \r
 /**\r
-  Provide NULL interrupt handler which is used to check \r
+  Provide NULL interrupt handler which is used to check\r
   if there is more than one HW interrupt registers with the CPU AP.\r
 \r
   @param  InterruptType - The type of interrupt that occured\r
@@ -214,7 +218,7 @@ InternalLegacyBiosFarCall (
   // Disable DXE Timer while executing in real mode\r
   //\r
   Private->Timer->SetTimerPeriod (Private->Timer, 0);\r
\r
+\r
   //\r
   // Save and disable interrupt of debug timer\r
   //\r
@@ -227,14 +231,14 @@ InternalLegacyBiosFarCall (
 \r
   //\r
   // Check to see if there is more than one HW interrupt registers with the CPU AP.\r
-  // If there is, then ASSERT() since that is not compatible with the CSM because \r
-  // interupts other than the Timer interrupt that was disabled above can not be \r
+  // If there is, then ASSERT() since that is not compatible with the CSM because\r
+  // interupts other than the Timer interrupt that was disabled above can not be\r
   // handled properly from real mode.\r
   //\r
   DEBUG_CODE (\r
     UINTN  Vector;\r
     UINTN  Count;\r
-    \r
+\r
     for (Vector = 0x20, Count = 0; Vector < 0x100; Vector++) {\r
       Status = Private->Cpu->RegisterInterruptHandler (Private->Cpu, Vector, LegacyBiosNullInterruptHandler);\r
       if (Status == EFI_ALREADY_STARTED) {\r
@@ -251,14 +255,14 @@ InternalLegacyBiosFarCall (
   );\r
 \r
   //\r
-  // If the Timer AP has enabled the 8254 timer IRQ and the current 8254 timer \r
-  // period is less than the CSM required rate of 54.9254, then force the 8254 \r
+  // If the Timer AP has enabled the 8254 timer IRQ and the current 8254 timer\r
+  // period is less than the CSM required rate of 54.9254, then force the 8254\r
   // PIT counter to 0, which is the CSM required rate of 54.9254 ms\r
   //\r
   if (Private->TimerUses8254 && TimerPeriod < 549254) {\r
     SetPitCount (0);\r
   }\r
-  \r
+\r
   if (Stack != NULL && StackSize != 0) {\r
     //\r
     // Copy Stack to low memory stack\r
@@ -282,23 +286,6 @@ InternalLegacyBiosFarCall (
 \r
   AsmThunk16 (&mThunkContext);\r
 \r
-  //\r
-  // OPROM may allocate EBDA range by itself and change EBDA base and EBDA size.\r
-  // Get the current EBDA base address, and compared with pre-allocate minimum\r
-  // EBDA base address, if the current EBDA base address is smaller, it indicates\r
-  // PcdEbdaReservedMemorySize should be adjusted to larger for more OPROMs.\r
-  //\r
-  DEBUG_CODE (\r
-    {\r
-      UINTN                 EbdaBaseAddress;\r
-      UINTN                 ReservedEbdaBaseAddress;\r
-\r
-      EbdaBaseAddress = (*(UINT16 *) (UINTN) 0x40E) << 4;\r
-      ReservedEbdaBaseAddress = CONVENTIONAL_MEMORY_TOP - PcdGet32 (PcdEbdaReservedMemorySize);\r
-      ASSERT (ReservedEbdaBaseAddress <= EbdaBaseAddress);\r
-    }\r
-  );\r
-\r
   if (Stack != NULL && StackSize != 0) {\r
     //\r
     // Copy low memory stack to Stack\r
@@ -323,7 +310,27 @@ InternalLegacyBiosFarCall (
   // End critical section\r
   //\r
   gBS->RestoreTPL (OriginalTpl);\r
-  \r
+\r
+  //\r
+  // OPROM may allocate EBDA range by itself and change EBDA base and EBDA size.\r
+  // Get the current EBDA base address, and compared with pre-allocate minimum\r
+  // EBDA base address, if the current EBDA base address is smaller, it indicates\r
+  // PcdEbdaReservedMemorySize should be adjusted to larger for more OPROMs.\r
+  //\r
+  DEBUG_CODE (\r
+    {\r
+      UINTN                 EbdaBaseAddress;\r
+      UINTN                 ReservedEbdaBaseAddress;\r
+\r
+      ACCESS_PAGE0_CODE (\r
+        EbdaBaseAddress = (*(UINT16 *) (UINTN) 0x40E) << 4;\r
+        ReservedEbdaBaseAddress = CONVENTIONAL_MEMORY_TOP\r
+                                  - PcdGet32 (PcdEbdaReservedMemorySize);\r
+        ASSERT (ReservedEbdaBaseAddress <= EbdaBaseAddress);\r
+      );\r
+    }\r
+  );\r
+\r
   //\r
   // Restore interrupt of debug timer\r
   //\r
@@ -378,27 +385,27 @@ LegacyBiosInitializeThunk (
   TimerVector = 0;\r
   Status = Private->Legacy8259->GetVector (Private->Legacy8259, Efi8259Irq0, &TimerVector);\r
   ASSERT_EFI_ERROR (Status);\r
-  \r
+\r
   //\r
   // Check to see if the Timer AP has hooked the IRQ0 from the 8254 PIT\r
-  //  \r
+  //\r
   Status = Private->Cpu->RegisterInterruptHandler (\r
-                           Private->Cpu, \r
-                           TimerVector, \r
+                           Private->Cpu,\r
+                           TimerVector,\r
                            LegacyBiosNullInterruptHandler\r
                            );\r
   if (Status == EFI_SUCCESS) {\r
     //\r
-    // If the Timer AP has not enabled the 8254 timer IRQ, then force the 8254 PIT \r
+    // If the Timer AP has not enabled the 8254 timer IRQ, then force the 8254 PIT\r
     // counter to 0, which is the CSM required rate of 54.9254 ms\r
     //\r
     Private->Cpu->RegisterInterruptHandler (\r
-                    Private->Cpu, \r
-                    TimerVector, \r
+                    Private->Cpu,\r
+                    TimerVector,\r
                     NULL\r
                     );\r
     SetPitCount (0);\r
-    \r
+\r
     //\r
     // Save status that the Timer AP is not using the 8254 PIT\r
     //\r
@@ -414,6 +421,6 @@ LegacyBiosInitializeThunk (
     //\r
     ASSERT (FALSE);\r
   }\r
-  \r
+\r
   return EFI_SUCCESS;\r
 }\r