]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/SecCore/FindPeiCore.c
BaseTools: BaseTools changes for RISC-V platform.
[mirror_edk2.git] / UefiCpuPkg / SecCore / FindPeiCore.c
index 60ccaa9667c7fa57b064aa581ed7b6bb163336a3..ee063a102080a73de7c73de5c4e9083cb89cc603 100644 (file)
@@ -1,37 +1,29 @@
 /** @file\r
   Locate the entry point for the PEI Core\r
 \r
-  Copyright (c) 2008 - 2011, 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
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  Copyright (c) 2008 - 2019, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
 #include <PiPei.h>\r
-#include <Library/BaseLib.h>\r
-#include <Library/PeCoffGetEntryPointLib.h>\r
 \r
 #include "SecMain.h"\r
 \r
 /**\r
   Find core image base.\r
 \r
-  @param   BootFirmwareVolumePtr    Point to the boot firmware volume.\r
-  @param   SecCoreImageBase         The base address of the SEC core image.\r
-  @param   PeiCoreImageBase         The base address of the PEI core image.\r
+  @param   FirmwareVolumePtr        Point to the firmware volume for finding core image.\r
+  @param   FileType                 The FileType for searching, either SecCore or PeiCore.\r
+  @param   CoreImageBase            The base address of the core image.\r
 \r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
 FindImageBase (\r
-  IN  EFI_FIRMWARE_VOLUME_HEADER       *BootFirmwareVolumePtr,\r
-  OUT EFI_PHYSICAL_ADDRESS             *SecCoreImageBase,\r
-  OUT EFI_PHYSICAL_ADDRESS             *PeiCoreImageBase\r
+  IN  EFI_FIRMWARE_VOLUME_HEADER       *FirmwareVolumePtr,\r
+  IN  EFI_FV_FILETYPE                  FileType,\r
+  OUT EFI_PHYSICAL_ADDRESS             *CoreImageBase\r
   )\r
 {\r
   EFI_PHYSICAL_ADDRESS        CurrentAddress;\r
@@ -42,16 +34,15 @@ FindImageBase (
   EFI_COMMON_SECTION_HEADER   *Section;\r
   EFI_PHYSICAL_ADDRESS        EndOfSection;\r
 \r
-  *SecCoreImageBase = 0;\r
-  *PeiCoreImageBase = 0;\r
+  *CoreImageBase = 0;\r
 \r
-  CurrentAddress = (EFI_PHYSICAL_ADDRESS)(UINTN) BootFirmwareVolumePtr;\r
-  EndOfFirmwareVolume = CurrentAddress + BootFirmwareVolumePtr->FvLength;\r
+  CurrentAddress = (EFI_PHYSICAL_ADDRESS)(UINTN) FirmwareVolumePtr;\r
+  EndOfFirmwareVolume = CurrentAddress + FirmwareVolumePtr->FvLength;\r
 \r
   //\r
   // Loop through the FFS files in the Boot Firmware Volume\r
   //\r
-  for (EndOfFile = CurrentAddress + BootFirmwareVolumePtr->HeaderLength; ; ) {\r
+  for (EndOfFile = CurrentAddress + FirmwareVolumePtr->HeaderLength; ; ) {\r
 \r
     CurrentAddress = (EndOfFile + 7) & 0xfffffffffffffff8ULL;\r
     if (CurrentAddress > EndOfFirmwareVolume) {\r
@@ -77,10 +68,9 @@ FindImageBase (
     }\r
 \r
     //\r
-    // Look for SEC Core / PEI Core files\r
+    // Look for particular Core file (either SEC Core or PEI Core)\r
     //\r
-    if (File->Type != EFI_FV_FILETYPE_SECURITY_CORE &&\r
-        File->Type != EFI_FV_FILETYPE_PEI_CORE) {\r
+    if (File->Type != FileType) {\r
       continue;\r
     }\r
 \r
@@ -117,17 +107,11 @@ FindImageBase (
       // Look for executable sections\r
       //\r
       if (Section->Type == EFI_SECTION_PE32 || Section->Type == EFI_SECTION_TE) {\r
-        if (File->Type == EFI_FV_FILETYPE_SECURITY_CORE) {\r
-          if (IS_SECTION2 (Section)) {\r
-            *SecCoreImageBase = (PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) Section + sizeof (EFI_COMMON_SECTION_HEADER2));\r
-          } else {\r
-            *SecCoreImageBase = (PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) Section + sizeof (EFI_COMMON_SECTION_HEADER));\r
-          }\r
-        } else {\r
+        if (File->Type == FileType) {\r
           if (IS_SECTION2 (Section)) {\r
-            *PeiCoreImageBase = (PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) Section + sizeof (EFI_COMMON_SECTION_HEADER2));\r
+            *CoreImageBase = (PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) Section + sizeof (EFI_COMMON_SECTION_HEADER2));\r
           } else {\r
-            *PeiCoreImageBase = (PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) Section + sizeof (EFI_COMMON_SECTION_HEADER));\r
+            *CoreImageBase = (PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) Section + sizeof (EFI_COMMON_SECTION_HEADER));\r
           }\r
         }\r
         break;\r
@@ -135,9 +119,9 @@ FindImageBase (
     }\r
 \r
     //\r
-    // Both SEC Core and PEI Core images found\r
+    // Either SEC Core or PEI Core images found\r
     //\r
-    if (*SecCoreImageBase != 0 && *PeiCoreImageBase != 0) {\r
+    if (*CoreImageBase != 0) {\r
       return EFI_SUCCESS;\r
     }\r
   }\r
@@ -149,14 +133,16 @@ FindImageBase (
   It also find SEC and PEI Core file debug information. It will report them if\r
   remote debug is enabled.\r
 \r
-  @param   BootFirmwareVolumePtr    Point to the boot firmware volume.\r
+  @param   SecCoreFirmwareVolumePtr Point to the firmware volume for finding SecCore.\r
+  @param   PeiCoreFirmwareVolumePtr Point to the firmware volume for finding PeiCore.\r
   @param   PeiCoreEntryPoint        The entry point of the PEI core.\r
 \r
 **/\r
 VOID\r
 EFIAPI\r
 FindAndReportEntryPoints (\r
-  IN  EFI_FIRMWARE_VOLUME_HEADER       *BootFirmwareVolumePtr,\r
+  IN  EFI_FIRMWARE_VOLUME_HEADER       *SecCoreFirmwareVolumePtr,\r
+  IN  EFI_FIRMWARE_VOLUME_HEADER       *PeiCoreFirmwareVolumePtr,\r
   OUT EFI_PEI_CORE_ENTRY_POINT         *PeiCoreEntryPoint\r
   )\r
 {\r
@@ -166,9 +152,9 @@ FindAndReportEntryPoints (
   PE_COFF_LOADER_IMAGE_CONTEXT     ImageContext;\r
 \r
   //\r
-  // Find SEC Core and PEI Core image base\r
+  // Find SEC Core image base\r
   //\r
-  Status = FindImageBase (BootFirmwareVolumePtr, &SecCoreImageBase, &PeiCoreImageBase);\r
+  Status = FindImageBase (SecCoreFirmwareVolumePtr, EFI_FV_FILETYPE_SECURITY_CORE, &SecCoreImageBase);\r
   ASSERT_EFI_ERROR (Status);\r
 \r
   ZeroMem ((VOID *) &ImageContext, sizeof (PE_COFF_LOADER_IMAGE_CONTEXT));\r
@@ -179,6 +165,12 @@ FindAndReportEntryPoints (
   ImageContext.PdbPointer = PeCoffLoaderGetPdbPointer ((VOID*) (UINTN) ImageContext.ImageAddress);\r
   PeCoffLoaderRelocateImageExtraAction (&ImageContext);\r
 \r
+  //\r
+  // Find PEI Core image base\r
+  //\r
+  Status = FindImageBase (PeiCoreFirmwareVolumePtr, EFI_FV_FILETYPE_PEI_CORE, &PeiCoreImageBase);\r
+  ASSERT_EFI_ERROR (Status);\r
+\r
   //\r
   // Report PEI Core debug information when remote debug is enabled\r
   //\r