]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFspWrapperPkg/Library/PeiFspHobProcessLibSample/FspHobProcessLibSample.c
IntelFspWrapperPkg: Refine casting expression result to bigger size
[mirror_edk2.git] / IntelFspWrapperPkg / Library / PeiFspHobProcessLibSample / FspHobProcessLibSample.c
index eac043598927d6088e79d95baa1e033f7a06ff84..5e55ab1cfc405b8302240d16901dff7a8a7ab671 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Sample to provide FSP hob process related function.\r
 \r
-  Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2014 - 2015, 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
@@ -25,6 +25,7 @@
 \r
 #include <Guid/GuidHobFspEas.h>\r
 #include <Guid/MemoryTypeInformation.h>\r
+#include <Guid/PcdDataBaseHobGuid.h>\r
 #include <Ppi/Capsule.h>\r
 \r
 //\r
@@ -45,14 +46,13 @@ GetMemorySizeInMemoryTypeInformation (
   IN EFI_PEI_SERVICES **PeiServices\r
   )\r
 {\r
-  EFI_STATUS                  Status;\r
   EFI_PEI_HOB_POINTERS        Hob;\r
   EFI_MEMORY_TYPE_INFORMATION *MemoryData;\r
   UINT8                       Index;\r
   UINTN                       TempPageNum;\r
 \r
   MemoryData = NULL;\r
-  Status     = (*PeiServices)->GetHobList ((CONST EFI_PEI_SERVICES**)PeiServices, (VOID **) &Hob.Raw);\r
+  (*PeiServices)->GetHobList ((CONST EFI_PEI_SERVICES**)PeiServices, (VOID **) &Hob.Raw);\r
   while (!END_OF_HOB_LIST (Hob)) {\r
     if (Hob.Header->HobType == EFI_HOB_TYPE_GUID_EXTENSION &&\r
       CompareGuid (&Hob.Guid->Name, &gEfiMemoryTypeInformationGuid)) {\r
@@ -132,7 +132,7 @@ GetPeiMemSize (
 }\r
 \r
 /**\r
-  BIOS process FspBobList.\r
+  BIOS process FspBobList for Memory Resource Descriptor.\r
 \r
   @param[in] FspHobList  Pointer to the HOB data structure produced by FSP.\r
 \r
@@ -140,7 +140,7 @@ GetPeiMemSize (
 **/\r
 EFI_STATUS\r
 EFIAPI\r
-FspHobProcess (\r
+FspHobProcessForMemoryResource (\r
   IN VOID                 *FspHobList\r
   )\r
 {\r
@@ -155,7 +155,7 @@ FspHobProcess (
   BOOLEAN              FoundFspMemHob;\r
   EFI_STATUS           Status;\r
   EFI_BOOT_MODE        BootMode;\r
-  PEI_CAPSULE_PPI      *Capsule;\r
+  EFI_PEI_CAPSULE_PPI  *Capsule;\r
   VOID                 *CapsuleBuffer;\r
   UINTN                CapsuleBufferLength;\r
   UINT64               RequiredMemSize;\r
@@ -246,7 +246,7 @@ FspHobProcess (
 \r
     S3PeiMemBase = 0;\r
     S3PeiMemSize = 0;\r
-    Status = GetS3MemoryInfo (&S3PeiMemBase, &S3PeiMemSize);\r
+    Status = GetS3MemoryInfo (&S3PeiMemSize, &S3PeiMemBase);\r
     ASSERT_EFI_ERROR (Status);\r
     DEBUG((DEBUG_INFO, "S3 memory %Xh - %Xh bytes\n", S3PeiMemBase, S3PeiMemSize));\r
 \r
@@ -271,7 +271,7 @@ FspHobProcess (
     CapsuleBufferLength = 0;\r
     if (BootMode == BOOT_ON_FLASH_UPDATE) {\r
       Status = PeiServicesLocatePpi (\r
-                 &gPeiCapsulePpiGuid,\r
+                 &gEfiPeiCapsulePpiGuid,\r
                  0,\r
                  NULL,\r
                  (VOID **) &Capsule\r
@@ -331,9 +331,82 @@ FspHobProcess (
     }\r
   }\r
 \r
+  return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+  Process FSP HOB list\r
+\r
+  @param[in] FspHobList  Pointer to the HOB data structure produced by FSP.\r
+\r
+**/\r
+VOID\r
+ProcessFspHobList (\r
+  IN VOID                 *FspHobList\r
+  )\r
+{\r
+  EFI_PEI_HOB_POINTERS  FspHob;\r
+\r
+  FspHob.Raw = FspHobList;\r
+\r
   //\r
-  // NV Storage Hob\r
+  // Add all the HOBs from FSP binary to FSP wrapper\r
   //\r
+  while (!END_OF_HOB_LIST (FspHob)) {\r
+    if (FspHob.Header->HobType == EFI_HOB_TYPE_GUID_EXTENSION) {\r
+      //\r
+      // Skip FSP binary creates PcdDataBaseHobGuid\r
+      //\r
+      if (!CompareGuid(&FspHob.Guid->Name, &gPcdDataBaseHobGuid)) { \r
+        BuildGuidDataHob (\r
+          &FspHob.Guid->Name,\r
+          GET_GUID_HOB_DATA(FspHob),\r
+          GET_GUID_HOB_DATA_SIZE(FspHob)\r
+        );\r
+      }\r
+    }\r
+    FspHob.Raw = GET_NEXT_HOB (FspHob);\r
+  }\r
+}\r
+\r
+/**\r
+  BIOS process FspBobList for other data (not Memory Resource Descriptor).\r
+\r
+  @param[in] FspHobList  Pointer to the HOB data structure produced by FSP.\r
+\r
+  @return If platform process the FSP hob list successfully.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+FspHobProcessForOtherData (\r
+  IN VOID                 *FspHobList\r
+  )\r
+{\r
+  ProcessFspHobList (FspHobList);\r
 \r
   return EFI_SUCCESS;\r
 }\r
+\r
+/**\r
+  BIOS process FspBobList.\r
+\r
+  @param[in] FspHobList  Pointer to the HOB data structure produced by FSP.\r
+\r
+  @return If platform process the FSP hob list successfully.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+FspHobProcess (\r
+  IN VOID                 *FspHobList\r
+  )\r
+{\r
+  EFI_STATUS  Status;\r
+\r
+  Status = FspHobProcessForMemoryResource (FspHobList);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
+  Status = FspHobProcessForOtherData (FspHobList);\r
+\r
+  return Status;\r
+}\r