]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Add FvHobToFvInfoThunk.
authorqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 17 Jun 2008 06:13:38 +0000 (06:13 +0000)
committerqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 17 Jun 2008 06:13:38 +0000 (06:13 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5345 6f19259b-4bc3-4df7-8a09-765794883524

EdkCompatibilityPkg/Compatibility/FvHobToFvInfoThunk/FvHobToFvInfoThunk.c [new file with mode: 0644]
EdkCompatibilityPkg/Compatibility/FvHobToFvInfoThunk/FvHobToFvInfoThunk.inf [new file with mode: 0644]

diff --git a/EdkCompatibilityPkg/Compatibility/FvHobToFvInfoThunk/FvHobToFvInfoThunk.c b/EdkCompatibilityPkg/Compatibility/FvHobToFvInfoThunk/FvHobToFvInfoThunk.c
new file mode 100644 (file)
index 0000000..00e971f
--- /dev/null
@@ -0,0 +1,110 @@
+/** @file\r
+ Module produces EFI_FIRMWARE_VOLUME_INFO_PPI based on each FV HOB if no such PPI exist for the FV.\r
+\r
+ UEFI PI Spec supersedes Intel's Framework Specs. \r
+ EFI_FIRMWARE_VOLUME_INFO_PPI defined in PI spec is required by PI PEI core to dispatch PEIMs or find DXE core\r
+ in the FV.\r
+ This module produces produces EFI_FIRMWARE_VOLUME_INFO_PPI based on each FV HOB if no such PPI exist for the FV.\r
+ This module is used on platform when both of these two conditions are true:\r
+ 1) Framework platform module produces FV HOB but does not build EFI_FIRMWARE_VOLUME_INFO_PPI.\r
+ 2) The platform has PI PEI core that cosumes EFI_FIRMWARE_VOLUME_INFO_PPI to dispatch PEIMs or DXE core\r
+     in FVs other than Boot Fimware Volume.\r
+\r
+Copyright (c) 2008 Intel Corporation. <BR>\r
+All rights reserved. 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
+Module Name:\r
+\r
+**/\r
+\r
+#include <PiPei.h>\r
+#include <Ppi/FirmwareVolumeInfo.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/PeiServicesTablePointerLib.h>\r
+#include <Library/PeiServicesLib.h>\r
+#include <Library/HobLib.h>\r
+#include <Library/PeiPiLib.h>\r
+\r
+\r
+/**\r
+  Check if there is a matching EFI_PEI_FIRMWARE_VOLUME_INFO_PPI for the FV described by FvHob.\r
+\r
+  This function located all existing instance of EFI_PEI_FIRMWARE_VOLUME_INFO_PPI in the platform.\r
+  Then it compare the base address of the FVs found with that of FvHob. If a matching base address is\r
+  found, the function return TRUE. Otherwise, FALSE is returned.\r
+\r
+  If a matching base address of FV is found but the length of FV does not match, then ASSERT ().\r
+\r
+  @param  FvHob      The FV Hob.\r
+\r
+  @retval   TRUE       A instance of EFI_PEI_FIRMWARE_VOLUME_INFO_PPI is already installed.\r
+\r
+**/\r
+BOOLEAN\r
+FvInfoPpiInstalled (\r
+  EFI_HOB_FIRMWARE_VOLUME * FvHob\r
+  )\r
+{\r
+  EFI_STATUS                            Status;\r
+  UINTN                                 Idx;\r
+  EFI_PEI_FIRMWARE_VOLUME_INFO_PPI      *FvInfoPpi;\r
+\r
+  for (Idx = 0; ; Idx++) {\r
+    Status = PeiServicesLocatePpi (\r
+                &gEfiPeiFirmwareVolumeInfoPpiGuid,\r
+                Idx,\r
+                NULL,\r
+                (VOID **) &FvInfoPpi\r
+               );\r
+    if (!EFI_ERROR (Status)) {\r
+      if (FvHob->BaseAddress == (EFI_PHYSICAL_ADDRESS) (UINTN) FvInfoPpi->FvInfo) {\r
+        ASSERT (FvHob->Length == (UINT64) FvInfoPpi->FvInfoSize);\r
+        return TRUE;\r
+      }\r
+    } else {\r
+      break;\r
+    }\r
+  }\r
+\r
+  return FALSE;\r
+}\r
+\r
+/**\r
+  PEIM's standard entry point.\r
+  \r
+  @param FfsHeader    Image's header\r
+  @param PeiServices  Pointer of EFI_PEI_SERVICES\r
+  @return EFI_SUCESS This entry point always return successfully.\r
+  \r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+FvHobtoFvInfoThunkEntry (\r
+  IN EFI_PEI_FILE_HANDLE       FfsHeader,\r
+  IN CONST EFI_PEI_SERVICES    **PeiServices\r
+  )\r
+{\r
+  EFI_PEI_HOB_POINTERS        HobPointer;\r
+  \r
+  for (HobPointer.Raw = GetNextHob (EFI_HOB_TYPE_FV, GetHobList ());\r
+        HobPointer.Raw != NULL;\r
+        HobPointer.Raw = GetNextHob (EFI_HOB_TYPE_FV, GET_NEXT_HOB (HobPointer))) {\r
+    if (!FvInfoPpiInstalled (HobPointer.FirmwareVolume)) {\r
+      PiLibInstallFvInfoPpi (\r
+        &(((EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) HobPointer.FirmwareVolume->BaseAddress)->FileSystemGuid),\r
+        (VOID *) (UINTN) HobPointer.FirmwareVolume->BaseAddress,\r
+        (UINT32) HobPointer.FirmwareVolume->Length,\r
+        NULL,\r
+        NULL\r
+        );\r
+    }\r
+  }\r
+\r
+  return EFI_SUCCESS;\r
+}\r
+\r
diff --git a/EdkCompatibilityPkg/Compatibility/FvHobToFvInfoThunk/FvHobToFvInfoThunk.inf b/EdkCompatibilityPkg/Compatibility/FvHobToFvInfoThunk/FvHobToFvInfoThunk.inf
new file mode 100644 (file)
index 0000000..2ab47ab
--- /dev/null
@@ -0,0 +1,62 @@
+#/** @file\r
+# Module produces EFI_FIRMWARE_VOLUME_INFO_PPI based on each FV HOB if no such PPI exist for the FV.\r
+#\r
+# UEFI PI Spec supersedes Intel's Framework Specs. \r
+# EFI_FIRMWARE_VOLUME_INFO_PPI defined in PI spec is required by PI PEI core to dispatch PEIMs or find DXE cores\r
+# in the FV.\r
+# This module produces produces EFI_FIRMWARE_VOLUME_INFO_PPI based on each FV HOB if no such PPI exist for the FV.\r
+# This module is used on platform when both of these two conditions are true:\r
+# 1) Framework platform module produces FV HOB but does not build EFI_FIRMWARE_VOLUME_INFO_PPI.\r
+# 2) The platform has PI PEI core that cosumes EFI_FIRMWARE_VOLUME_INFO_PPI to dispatch PEIMs in FVs other\r
+#     than Boot Fimware Volume.\r
+#\r
+#\r
+# Copyright (c) 2007, Intel Corporation\r
+#\r
+#  All rights reserved. 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
+#  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
+#\r
+#\r
+#**/\r
+\r
+[Defines]\r
+  INF_VERSION                    = 0x00010005\r
+  BASE_NAME                      = FvHobToFvInfoThunk\r
+  FILE_GUID                      = 9E00A9F6-B88E-4ab5-A825-15970E12731A\r
+  MODULE_TYPE                    = PEIM\r
+  VERSION_STRING                 = 1.0\r
+  EDK_RELEASE_VERSION            = 0x00020000\r
+  EFI_SPECIFICATION_VERSION      = 0x00020000\r
+\r
+  ENTRY_POINT                    = FvHobtoFvInfoThunkEntry\r
+\r
+#\r
+# The following information is for reference only and not required by the build tools.\r
+#\r
+#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC\r
+#\r
+\r
+[Sources.common]\r
+  FvHobtoFvInfoThunk.c\r
+\r
+[Packages]\r
+  MdePkg/MdePkg.dec\r
+  IntelFrameworkPkg/IntelFrameworkPkg.dec\r
+\r
+[LibraryClasses]\r
+  PeimEntryPoint\r
+  PeiServicesLib\r
+  PeiServicesTablePointerLib\r
+  DebugLib\r
+  HobLib\r
+  PeiPiLib\r
+\r
+[Ppis]\r
+  gEfiPeiFirmwareVolumeInfoPpiGuid\r
+\r
+[Depex]\r
+  gEfiPeiMemoryDiscoveredPpiGuid\r