Build guid hob for the global memory to store the registered guid and Handler list.\r
If GuidHob exists, HandlerInfo will be directly got from Guid hob data.\r
\r
- @param[in, out] InfoPointer The pointer to pei handler info structure.\r
+ @param[in, out] InfoPointer The pointer to pei handler information structure.\r
\r
@retval RETURN_SUCCESS Build Guid hob for the global memory space to store guid and function tables.\r
@retval RETURN_OUT_OF_RESOURCES No enough memory to allocated.\r
EFI_PEI_HOB_POINTERS Hob;\r
\r
//\r
- // First try to get handler info from guid hob specified by CallerId.\r
+ // First try to get handler information from guid hob specified by CallerId.\r
//\r
Hob.Raw = GetNextHob (EFI_HOB_TYPE_GUID_EXTENSION, GetHobList ());\r
while (Hob.Raw != NULL) {\r
for (Index = 0; Index < HandlerInfo->NumberOfExtractHandler; Index ++) {\r
if (CompareGuid (HandlerInfo->ExtractHandlerGuidTable + Index, &(((EFI_GUID_DEFINED_SECTION *) InputSection)->SectionDefinitionGuid))) {\r
//\r
- // Call the match handler to get info for the input section data.\r
+ // Call the match handler to get information for the input section data.\r
//\r
return HandlerInfo->ExtractGetInfoHandlerTable [Index] (\r
InputSection,\r
//\r
return RETURN_UNSUPPORTED;\r
}\r
+\r
+/**\r
+ Retrieves handlers of type EXTRACT_GUIDED_SECTION_GET_INFO_HANDLER and \r
+ EXTRACT_GUIDED_SECTION_DECODE_HANDLER for a specific GUID section type.\r
+ \r
+ Retrieves the handlers associated with SectionGuid and returns them in \r
+ GetInfoHandler and DecodeHandler.\r
+\r
+ If the GUID value specified by SectionGuid has not been registered, then \r
+ return RETURN_NOT_FOUND.\r
+ \r
+ If SectionGuid is NULL, then ASSERT().\r
+\r
+ @param[in] SectionGuid A pointer to the GUID associated with the handlersof the GUIDed \r
+ section type being retrieved.\r
+ @param[out] GetInfoHandler Pointer to a function that examines a GUIDed section and returns \r
+ the size of the decoded buffer and the size of an optional scratch \r
+ buffer required to actually decode the data in a GUIDed section. \r
+ This is an optional parameter that may be NULL. If it is NULL, then \r
+ the previously registered handler is not returned.\r
+ @param[out] DecodeHandler Pointer to a function that decodes a GUIDed section into a caller\r
+ allocated output buffer. This is an optional parameter that may be NULL.\r
+ If it is NULL, then the previously registered handler is not returned.\r
+\r
+ @retval RETURN_SUCCESS The handlers were retrieved.\r
+ @retval RETURN_NOT_FOUND No handlers have been registered with the specified GUID.\r
+\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+ExtractGuidedSectionGetHandlers (\r
+ IN CONST GUID *SectionGuid,\r
+ OUT EXTRACT_GUIDED_SECTION_GET_INFO_HANDLER *GetInfoHandler, OPTIONAL\r
+ OUT EXTRACT_GUIDED_SECTION_DECODE_HANDLER *DecodeHandler OPTIONAL\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ UINT32 Index;\r
+ PEI_EXTRACT_GUIDED_SECTION_HANDLER_INFO *HandlerInfo;\r
+\r
+ //\r
+ // Check input parameter\r
+ //\r
+ ASSERT (SectionGuid != NULL);\r
+\r
+ //\r
+ // Get the registered handler information\r
+ //\r
+ Status = PeiGetExtractGuidedSectionHandlerInfo (&HandlerInfo);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ //\r
+ // Search the match registered GetInfo handler for the input guided section.\r
+ //\r
+ ASSERT (HandlerInfo != NULL);\r
+ for (Index = 0; Index < HandlerInfo->NumberOfExtractHandler; Index ++) {\r
+ if (CompareGuid (HandlerInfo->ExtractHandlerGuidTable + Index, SectionGuid)) {\r
+\r
+ //\r
+ // If the guided handler has been registered before, then return the registered handlers.\r
+ //\r
+ if (GetInfoHandler != NULL) {\r
+ *GetInfoHandler = HandlerInfo->ExtractGetInfoHandlerTable[Index];\r
+ }\r
+ if (DecodeHandler != NULL) {\r
+ *DecodeHandler = HandlerInfo->ExtractDecodeHandlerTable[Index];\r
+ }\r
+ return RETURN_SUCCESS;\r
+ }\r
+ }\r
+ return RETURN_NOT_FOUND;\r
+}\r