]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Csm/LegacyBiosDxe/Thunk.c
IntelFrameworkModulePkg/LegacyBios: Use macro to enable/disable page 0
[mirror_edk2.git] / IntelFrameworkModulePkg / Csm / LegacyBiosDxe / Thunk.c
index d249479c56ef6d172bf16c8b8553bb56d9e056d1..d330f4870baa62608e3c6035968d16cc6df61cf1 100644 (file)
@@ -73,10 +73,10 @@ 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
-  DisableNullDetection ();\r
-  Segment               = (UINT16)(((UINT32 *)0)[BiosInt] >> 16);\r
-  Offset                = (UINT16)((UINT32 *)0)[BiosInt];\r
-  EnableNullDetection ();\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
@@ -286,29 +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
-      //\r
-      // Skip this part of debug code if NULL pointer detection is enabled\r
-      //\r
-      if ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & BIT0) == 0) {\r
-        EbdaBaseAddress = (*(UINT16 *) (UINTN) 0x40E) << 4;\r
-        ReservedEbdaBaseAddress = CONVENTIONAL_MEMORY_TOP\r
-                                  - PcdGet32 (PcdEbdaReservedMemorySize);\r
-        ASSERT (ReservedEbdaBaseAddress <= EbdaBaseAddress);\r
-      }\r
-    }\r
-  );\r
-\r
   if (Stack != NULL && StackSize != 0) {\r
     //\r
     // Copy low memory stack to Stack\r
@@ -334,6 +311,26 @@ InternalLegacyBiosFarCall (
   //\r
   gBS->RestoreTPL (OriginalTpl);\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