I think we can use GET_GUID_HOB_DATA + GET_GUID_HOB_DATA_SIZE to simply the 
logic below.

+        BuildGuidDataHob (
+          &FspHob.Guid->Name,
+          (VOID *)(FspHob.Raw + sizeof (EFI_HOB_GENERIC_HEADER) + sizeof 
(EFI_GUID)),
+          FspHob.Header->HobLength
+        );

FspHob.Header->HobLength for the third parameter DataLength seems not right.


Thanks,
Star
-----Original Message-----
From: edk2-devel [mailto:[email protected]] On Behalf Of jiewen 
yao
Sent: Monday, October 26, 2015 12:35 PM
To: [email protected]
Cc: Kinney, Michael D; Ma, Maurice; Yao, Jiewen; Rangarajan, Ravi P
Subject: [edk2] [patch] Publish FspHob to PEI Hob by default, because most 
platforms use such logic.

PcdDataBaseHobGuid GuidHob is excluded because PCD database in FSP is different 
with the one in PEI.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Yao, Jiewen <[email protected]>
Cc: Ma, Maurice <[email protected]>;
Cc: Rangarajan, Ravi P <[email protected]>
Cc: Kinney, Michael D <[email protected]>
---
 .../FspHobProcessLibSample.c                       | 38 ++++++++++++++++++++++
 .../PeiFspHobProcessLibSample.inf                  |  1 +
 2 files changed, 39 insertions(+)

diff --git 
a/IntelFspWrapperPkg/Library/PeiFspHobProcessLibSample/FspHobProcessLibSample.c 
b/IntelFspWrapperPkg/Library/PeiFspHobProcessLibSample/FspHobProcessLibSample.c
index 099980e..471b0fa 100644
--- 
a/IntelFspWrapperPkg/Library/PeiFspHobProcessLibSample/FspHobProcessLibSample.c
+++ b/IntelFspWrapperPkg/Library/PeiFspHobProcessLibSample/FspHobProcess
+++ LibSample.c
@@ -25,6 +25,7 @@
 
 #include <Guid/GuidHobFspEas.h>
 #include <Guid/MemoryTypeInformation.h>
+#include <Guid/PcdDataBaseHobGuid.h>
 #include <Ppi/Capsule.h>
 
 //
@@ -335,6 +336,41 @@ FspHobProcessForMemoryResource (  }
 
 /**
+  Process FSP HOB list
+
+  @param[in] FspHobList  Pointer to the HOB data structure produced by FSP.
+
+**/
+VOID
+ProcessFspHobList (
+  IN VOID                 *FspHobList
+  )
+{
+  EFI_PEI_HOB_POINTERS  FspHob;
+
+  FspHob.Raw = FspHobList;
+
+  //
+  // Add all the HOBs from FSP binary to FSP wrapper
+  //
+  while (!END_OF_HOB_LIST (FspHob)) {
+    if (FspHob.Header->HobType == EFI_HOB_TYPE_GUID_EXTENSION) {
+      //
+      // Skip FSP binary creates PcdDataBaseHobGuid
+      //
+      if (!CompareGuid(&FspHob.Guid->Name, &gPcdDataBaseHobGuid)) { 
+        BuildGuidDataHob (
+          &FspHob.Guid->Name,
+          (VOID *)(FspHob.Raw + sizeof (EFI_HOB_GENERIC_HEADER) + sizeof 
(EFI_GUID)),
+          FspHob.Header->HobLength
+        );
+      }
+    }
+    FspHob.Raw = GET_NEXT_HOB (FspHob);
+  }
+}
+
+/**
   BIOS process FspBobList for other data (not Memory Resource Descriptor).
 
   @param[in] FspHobList  Pointer to the HOB data structure produced by FSP.
@@ -347,6 +383,8 @@ FspHobProcessForOtherData (
   IN VOID                 *FspHobList
   )
 {
+  ProcessFspHobList (FspHobList);
+
   return EFI_SUCCESS;
 }
 
diff --git 
a/IntelFspWrapperPkg/Library/PeiFspHobProcessLibSample/PeiFspHobProcessLibSample.inf
 
b/IntelFspWrapperPkg/Library/PeiFspHobProcessLibSample/PeiFspHobProcessLibSample.inf
index 12f922c..c7f35f7 100644
--- 
a/IntelFspWrapperPkg/Library/PeiFspHobProcessLibSample/PeiFspHobProcessLibSample.inf
+++ b/IntelFspWrapperPkg/Library/PeiFspHobProcessLibSample/PeiFspHobProc
+++ essLibSample.inf
@@ -70,6 +70,7 @@
 [Guids]
   gFspReservedMemoryResourceHobGuid                       ## CONSUMES ## HOB
   gEfiMemoryTypeInformationGuid                           ## CONSUMES ## GUID
+  gPcdDataBaseHobGuid                                     ## CONSUMES ## HOB
 
 [Ppis]
   gEfiPeiCapsulePpiGuid                                   ## CONSUMES
--
1.9.5.msysgit.0

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to