X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=MdePkg%2FLibrary%2FPeiExtractGuidedSectionLib%2FPeiExtractGuidedSectionLib.c;fp=MdePkg%2FLibrary%2FPeiExtractGuidedSectionLib%2FPeiExtractGuidedSectionLib.c;h=c538f157a242ff16b99ea5aae7aacaeecda97720;hb=2f88bd3a1296c522317f1c21377876de63de5be7;hp=5d12016bc7720c82de9256b5c3b20f623b6ea45d;hpb=1436aea4d5707e672672a11bda72be2c63c936c3;p=mirror_edk2.git diff --git a/MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.c b/MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.c index 5d12016bc7..c538f157a2 100644 --- a/MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.c +++ b/MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.c @@ -14,14 +14,14 @@ #include #include -#define PEI_EXTRACT_HANDLER_INFO_SIGNATURE SIGNATURE_32 ('P', 'E', 'H', 'I') +#define PEI_EXTRACT_HANDLER_INFO_SIGNATURE SIGNATURE_32 ('P', 'E', 'H', 'I') typedef struct { - UINT32 Signature; - UINT32 NumberOfExtractHandler; - GUID *ExtractHandlerGuidTable; - EXTRACT_GUIDED_SECTION_DECODE_HANDLER *ExtractDecodeHandlerTable; - EXTRACT_GUIDED_SECTION_GET_INFO_HANDLER *ExtractGetInfoHandlerTable; + UINT32 Signature; + UINT32 NumberOfExtractHandler; + GUID *ExtractHandlerGuidTable; + EXTRACT_GUIDED_SECTION_DECODE_HANDLER *ExtractDecodeHandlerTable; + EXTRACT_GUIDED_SECTION_GET_INFO_HANDLER *ExtractGetInfoHandlerTable; } PEI_EXTRACT_GUIDED_SECTION_HANDLER_INFO; /** @@ -35,11 +35,11 @@ typedef struct { **/ RETURN_STATUS PeiGetExtractGuidedSectionHandlerInfo ( - IN OUT PEI_EXTRACT_GUIDED_SECTION_HANDLER_INFO **InfoPointer + IN OUT PEI_EXTRACT_GUIDED_SECTION_HANDLER_INFO **InfoPointer ) { - PEI_EXTRACT_GUIDED_SECTION_HANDLER_INFO *HandlerInfo; - EFI_PEI_HOB_POINTERS Hob; + PEI_EXTRACT_GUIDED_SECTION_HANDLER_INFO *HandlerInfo; + EFI_PEI_HOB_POINTERS Hob; // // First try to get handler information from guid hob specified by CallerId. @@ -47,23 +47,24 @@ PeiGetExtractGuidedSectionHandlerInfo ( Hob.Raw = GetNextHob (EFI_HOB_TYPE_GUID_EXTENSION, GetHobList ()); while (Hob.Raw != NULL) { if (CompareGuid (&(Hob.Guid->Name), &gEfiCallerIdGuid)) { - HandlerInfo = (PEI_EXTRACT_GUIDED_SECTION_HANDLER_INFO *) GET_GUID_HOB_DATA (Hob.Guid); + HandlerInfo = (PEI_EXTRACT_GUIDED_SECTION_HANDLER_INFO *)GET_GUID_HOB_DATA (Hob.Guid); if (HandlerInfo->Signature == PEI_EXTRACT_HANDLER_INFO_SIGNATURE) { // // Update Table Pointer when hob start address is changed. // - if (HandlerInfo->ExtractHandlerGuidTable != (GUID *) (HandlerInfo + 1)) { - HandlerInfo->ExtractHandlerGuidTable = (GUID *) (HandlerInfo + 1); - HandlerInfo->ExtractDecodeHandlerTable = (EXTRACT_GUIDED_SECTION_DECODE_HANDLER *) ( - (UINT8 *)HandlerInfo->ExtractHandlerGuidTable + - PcdGet32 (PcdMaximumGuidedExtractHandler) * sizeof (GUID) - ); - HandlerInfo->ExtractGetInfoHandlerTable = (EXTRACT_GUIDED_SECTION_GET_INFO_HANDLER *) ( - (UINT8 *)HandlerInfo->ExtractDecodeHandlerTable + - PcdGet32 (PcdMaximumGuidedExtractHandler) * - sizeof (EXTRACT_GUIDED_SECTION_DECODE_HANDLER) - ); + if (HandlerInfo->ExtractHandlerGuidTable != (GUID *)(HandlerInfo + 1)) { + HandlerInfo->ExtractHandlerGuidTable = (GUID *)(HandlerInfo + 1); + HandlerInfo->ExtractDecodeHandlerTable = (EXTRACT_GUIDED_SECTION_DECODE_HANDLER *)( + (UINT8 *)HandlerInfo->ExtractHandlerGuidTable + + PcdGet32 (PcdMaximumGuidedExtractHandler) * sizeof (GUID) + ); + HandlerInfo->ExtractGetInfoHandlerTable = (EXTRACT_GUIDED_SECTION_GET_INFO_HANDLER *)( + (UINT8 *)HandlerInfo->ExtractDecodeHandlerTable + + PcdGet32 (PcdMaximumGuidedExtractHandler) * + sizeof (EXTRACT_GUIDED_SECTION_DECODE_HANDLER) + ); } + // // Return HandlerInfo pointer. // @@ -71,6 +72,7 @@ PeiGetExtractGuidedSectionHandlerInfo ( return EFI_SUCCESS; } } + Hob.Raw = GET_NEXT_HOB (Hob); Hob.Raw = GetNextHob (EFI_HOB_TYPE_GUID_EXTENSION, Hob.Raw); } @@ -79,11 +81,11 @@ PeiGetExtractGuidedSectionHandlerInfo ( // If Guid Hob is not found, Build CallerId Guid hob to store Handler Info // HandlerInfo = BuildGuidHob ( - &gEfiCallerIdGuid, - sizeof (PEI_EXTRACT_GUIDED_SECTION_HANDLER_INFO) + - PcdGet32 (PcdMaximumGuidedExtractHandler) * - (sizeof (GUID) + sizeof (EXTRACT_GUIDED_SECTION_DECODE_HANDLER) + sizeof (EXTRACT_GUIDED_SECTION_GET_INFO_HANDLER)) - ); + &gEfiCallerIdGuid, + sizeof (PEI_EXTRACT_GUIDED_SECTION_HANDLER_INFO) + + PcdGet32 (PcdMaximumGuidedExtractHandler) * + (sizeof (GUID) + sizeof (EXTRACT_GUIDED_SECTION_DECODE_HANDLER) + sizeof (EXTRACT_GUIDED_SECTION_GET_INFO_HANDLER)) + ); if (HandlerInfo == NULL) { // // No enough resource to build guid hob. @@ -91,21 +93,22 @@ PeiGetExtractGuidedSectionHandlerInfo ( *InfoPointer = NULL; return EFI_OUT_OF_RESOURCES; } + // // Init HandlerInfo structure // - HandlerInfo->Signature = PEI_EXTRACT_HANDLER_INFO_SIGNATURE; - HandlerInfo->NumberOfExtractHandler = 0; - HandlerInfo->ExtractHandlerGuidTable = (GUID *) (HandlerInfo + 1); - HandlerInfo->ExtractDecodeHandlerTable = (EXTRACT_GUIDED_SECTION_DECODE_HANDLER *) ( - (UINT8 *)HandlerInfo->ExtractHandlerGuidTable + - PcdGet32 (PcdMaximumGuidedExtractHandler) * sizeof (GUID) - ); - HandlerInfo->ExtractGetInfoHandlerTable = (EXTRACT_GUIDED_SECTION_GET_INFO_HANDLER *) ( - (UINT8 *)HandlerInfo->ExtractDecodeHandlerTable + - PcdGet32 (PcdMaximumGuidedExtractHandler) * - sizeof (EXTRACT_GUIDED_SECTION_DECODE_HANDLER) - ); + HandlerInfo->Signature = PEI_EXTRACT_HANDLER_INFO_SIGNATURE; + HandlerInfo->NumberOfExtractHandler = 0; + HandlerInfo->ExtractHandlerGuidTable = (GUID *)(HandlerInfo + 1); + HandlerInfo->ExtractDecodeHandlerTable = (EXTRACT_GUIDED_SECTION_DECODE_HANDLER *)( + (UINT8 *)HandlerInfo->ExtractHandlerGuidTable + + PcdGet32 (PcdMaximumGuidedExtractHandler) * sizeof (GUID) + ); + HandlerInfo->ExtractGetInfoHandlerTable = (EXTRACT_GUIDED_SECTION_GET_INFO_HANDLER *)( + (UINT8 *)HandlerInfo->ExtractDecodeHandlerTable + + PcdGet32 (PcdMaximumGuidedExtractHandler) * + sizeof (EXTRACT_GUIDED_SECTION_DECODE_HANDLER) + ); // // return the created HandlerInfo. // @@ -133,8 +136,8 @@ ExtractGuidedSectionGetGuidList ( OUT GUID **ExtractHandlerGuidTable ) { - EFI_STATUS Status; - PEI_EXTRACT_GUIDED_SECTION_HANDLER_INFO *HandlerInfo; + EFI_STATUS Status; + PEI_EXTRACT_GUIDED_SECTION_HANDLER_INFO *HandlerInfo; ASSERT (ExtractHandlerGuidTable != NULL); @@ -187,9 +190,9 @@ ExtractGuidedSectionRegisterHandlers ( IN EXTRACT_GUIDED_SECTION_DECODE_HANDLER DecodeHandler ) { - EFI_STATUS Status; - UINT32 Index; - PEI_EXTRACT_GUIDED_SECTION_HANDLER_INFO *HandlerInfo; + EFI_STATUS Status; + UINT32 Index; + PEI_EXTRACT_GUIDED_SECTION_HANDLER_INFO *HandlerInfo; // // Check input parameter @@ -198,8 +201,6 @@ ExtractGuidedSectionRegisterHandlers ( ASSERT (GetInfoHandler != NULL); ASSERT (DecodeHandler != NULL); - - // // Get the registered handler information // @@ -212,13 +213,13 @@ ExtractGuidedSectionRegisterHandlers ( // Search the match registered GetInfo handler for the input guided section. // ASSERT (HandlerInfo != NULL); - for (Index = 0; Index < HandlerInfo->NumberOfExtractHandler; Index ++) { + for (Index = 0; Index < HandlerInfo->NumberOfExtractHandler; Index++) { if (CompareGuid (HandlerInfo->ExtractHandlerGuidTable + Index, SectionGuid)) { // // If the guided handler has been registered before, only update its handler. // - HandlerInfo->ExtractDecodeHandlerTable [Index] = DecodeHandler; - HandlerInfo->ExtractGetInfoHandlerTable [Index] = GetInfoHandler; + HandlerInfo->ExtractDecodeHandlerTable[Index] = DecodeHandler; + HandlerInfo->ExtractGetInfoHandlerTable[Index] = GetInfoHandler; return RETURN_SUCCESS; } } @@ -234,16 +235,16 @@ ExtractGuidedSectionRegisterHandlers ( // Register new Handler and guid value. // CopyGuid (HandlerInfo->ExtractHandlerGuidTable + HandlerInfo->NumberOfExtractHandler, SectionGuid); - HandlerInfo->ExtractDecodeHandlerTable [HandlerInfo->NumberOfExtractHandler] = DecodeHandler; - HandlerInfo->ExtractGetInfoHandlerTable [HandlerInfo->NumberOfExtractHandler++] = GetInfoHandler; + HandlerInfo->ExtractDecodeHandlerTable[HandlerInfo->NumberOfExtractHandler] = DecodeHandler; + HandlerInfo->ExtractGetInfoHandlerTable[HandlerInfo->NumberOfExtractHandler++] = GetInfoHandler; // // Build the Guided Section GUID HOB to record the GUID itself. // Then the content of the GUIDed HOB will be the same as the GUID value itself. // BuildGuidDataHob ( - (EFI_GUID *) SectionGuid, - (VOID *) SectionGuid, + (EFI_GUID *)SectionGuid, + (VOID *)SectionGuid, sizeof (GUID) ); @@ -293,10 +294,10 @@ ExtractGuidedSectionGetInfo ( OUT UINT16 *SectionAttribute ) { - UINT32 Index; - EFI_STATUS Status; - PEI_EXTRACT_GUIDED_SECTION_HANDLER_INFO *HandlerInfo; - EFI_GUID *SectionDefinitionGuid; + UINT32 Index; + EFI_STATUS Status; + PEI_EXTRACT_GUIDED_SECTION_HANDLER_INFO *HandlerInfo; + EFI_GUID *SectionDefinitionGuid; // // Check input parameter @@ -315,26 +316,26 @@ ExtractGuidedSectionGetInfo ( } if (IS_SECTION2 (InputSection)) { - SectionDefinitionGuid = &(((EFI_GUID_DEFINED_SECTION2 *) InputSection)->SectionDefinitionGuid); + SectionDefinitionGuid = &(((EFI_GUID_DEFINED_SECTION2 *)InputSection)->SectionDefinitionGuid); } else { - SectionDefinitionGuid = &(((EFI_GUID_DEFINED_SECTION *) InputSection)->SectionDefinitionGuid); + SectionDefinitionGuid = &(((EFI_GUID_DEFINED_SECTION *)InputSection)->SectionDefinitionGuid); } // // Search the match registered GetInfo handler for the input guided section. // ASSERT (HandlerInfo != NULL); - for (Index = 0; Index < HandlerInfo->NumberOfExtractHandler; Index ++) { + for (Index = 0; Index < HandlerInfo->NumberOfExtractHandler; Index++) { if (CompareGuid (HandlerInfo->ExtractHandlerGuidTable + Index, SectionDefinitionGuid)) { // // Call the match handler to get information for the input section data. // - return HandlerInfo->ExtractGetInfoHandlerTable [Index] ( - InputSection, - OutputBufferSize, - ScratchBufferSize, - SectionAttribute - ); + return HandlerInfo->ExtractGetInfoHandlerTable[Index]( + InputSection, + OutputBufferSize, + ScratchBufferSize, + SectionAttribute + ); } } @@ -388,10 +389,10 @@ ExtractGuidedSectionDecode ( OUT UINT32 *AuthenticationStatus ) { - UINT32 Index; - EFI_STATUS Status; - PEI_EXTRACT_GUIDED_SECTION_HANDLER_INFO *HandlerInfo; - EFI_GUID *SectionDefinitionGuid; + UINT32 Index; + EFI_STATUS Status; + PEI_EXTRACT_GUIDED_SECTION_HANDLER_INFO *HandlerInfo; + EFI_GUID *SectionDefinitionGuid; // // Check input parameter @@ -409,26 +410,26 @@ ExtractGuidedSectionDecode ( } if (IS_SECTION2 (InputSection)) { - SectionDefinitionGuid = &(((EFI_GUID_DEFINED_SECTION2 *) InputSection)->SectionDefinitionGuid); + SectionDefinitionGuid = &(((EFI_GUID_DEFINED_SECTION2 *)InputSection)->SectionDefinitionGuid); } else { - SectionDefinitionGuid = &(((EFI_GUID_DEFINED_SECTION *) InputSection)->SectionDefinitionGuid); + SectionDefinitionGuid = &(((EFI_GUID_DEFINED_SECTION *)InputSection)->SectionDefinitionGuid); } // // Search the match registered Extract handler for the input guided section. // ASSERT (HandlerInfo != NULL); - for (Index = 0; Index < HandlerInfo->NumberOfExtractHandler; Index ++) { + for (Index = 0; Index < HandlerInfo->NumberOfExtractHandler; Index++) { if (CompareGuid (HandlerInfo->ExtractHandlerGuidTable + Index, SectionDefinitionGuid)) { // // Call the match handler to extract raw data for the input guided section. // - return HandlerInfo->ExtractDecodeHandlerTable [Index] ( - InputSection, - OutputBuffer, - ScratchBuffer, - AuthenticationStatus - ); + return HandlerInfo->ExtractDecodeHandlerTable[Index]( + InputSection, + OutputBuffer, + ScratchBuffer, + AuthenticationStatus + ); } } @@ -494,20 +495,22 @@ ExtractGuidedSectionGetHandlers ( // Search the match registered GetInfo handler for the input guided section. // ASSERT (HandlerInfo != NULL); - for (Index = 0; Index < HandlerInfo->NumberOfExtractHandler; Index ++) { + for (Index = 0; Index < HandlerInfo->NumberOfExtractHandler; Index++) { if (CompareGuid (HandlerInfo->ExtractHandlerGuidTable + Index, SectionGuid)) { - // // If the guided handler has been registered before, then return the registered handlers. // if (GetInfoHandler != NULL) { *GetInfoHandler = HandlerInfo->ExtractGetInfoHandlerTable[Index]; } + if (DecodeHandler != NULL) { *DecodeHandler = HandlerInfo->ExtractDecodeHandlerTable[Index]; } + return RETURN_SUCCESS; } } + return RETURN_NOT_FOUND; }