/** @file\r
Var Check Hii generation from FV.\r
\r
-Copyright (c) 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
-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
+Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
#define EFI_VFR_ATTRACT_GUID \\r
{ 0xd0bc7cb4, 0x6a47, 0x495f, { 0xaa, 0x11, 0x71, 0x7, 0x46, 0xda, 0x6, 0xa2 } }\r
\r
-EFI_GUID gVfrArrayAttractGuid = EFI_VFR_ATTRACT_GUID;\r
+EFI_GUID gVfrArrayAttractGuid = EFI_VFR_ATTRACT_GUID;\r
\r
#define ALL_FF_GUID \\r
{ 0xFFFFFFFF, 0xFFFF, 0xFFFF, { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF } }\r
\r
-EFI_GUID mAllFfGuid = ALL_FF_GUID;\r
+EFI_GUID mAllFfGuid = ALL_FF_GUID;\r
\r
-#define VAR_CHECK_VFR_DRIVER_INFO_SIGNATURE SIGNATURE_32 ('V', 'D', 'R', 'I')\r
+#define VAR_CHECK_VFR_DRIVER_INFO_SIGNATURE SIGNATURE_32 ('V', 'D', 'R', 'I')\r
\r
typedef struct {\r
- UINTN Signature;\r
- LIST_ENTRY Link;\r
- EFI_GUID *DriverGuid;\r
+ UINTN Signature;\r
+ LIST_ENTRY Link;\r
+ EFI_GUID *DriverGuid;\r
} VAR_CHECK_VFR_DRIVER_INFO;\r
\r
-LIST_ENTRY mVfrDriverList = INITIALIZE_LIST_HEAD_VARIABLE (mVfrDriverList);\r
+LIST_ENTRY mVfrDriverList = INITIALIZE_LIST_HEAD_VARIABLE (mVfrDriverList);\r
\r
#define VAR_CHECK_VFR_DRIVER_INFO_FROM_LINK(a) CR (a, VAR_CHECK_VFR_DRIVER_INFO, Link, VAR_CHECK_VFR_DRIVER_INFO_SIGNATURE)\r
\r
-#define MAX_MATCH_GUID_NUM 100\r
+#define MAX_MATCH_GUID_NUM 100\r
\r
/**\r
Get the address by Guid.\r
**/\r
EFI_STATUS\r
GetAddressByGuid (\r
- IN VOID *Ffs,\r
- IN EFI_GUID *Guid,\r
- IN UINTN Length,\r
- OUT UINTN **Offset,\r
- OUT UINT8 *NumOfMatchingGuid\r
+ IN VOID *Ffs,\r
+ IN EFI_GUID *Guid,\r
+ IN UINTN Length,\r
+ OUT UINTN **Offset,\r
+ OUT UINT8 *NumOfMatchingGuid\r
)\r
{\r
- UINTN LoopControl;\r
- BOOLEAN Found;\r
+ UINTN LoopControl;\r
+ BOOLEAN Found;\r
\r
- if((Ffs == NULL) || (Guid == NULL) || (Length == 0)){\r
+ if ((Ffs == NULL) || (Guid == NULL) || (Length == 0)) {\r
return EFI_NOT_FOUND;\r
}\r
\r
\r
Found = FALSE;\r
for (LoopControl = 0; LoopControl < Length; LoopControl++) {\r
- if (CompareGuid (Guid, (EFI_GUID *) ((UINT8 *) Ffs + LoopControl))) {\r
+ if (CompareGuid (Guid, (EFI_GUID *)((UINT8 *)Ffs + LoopControl))) {\r
Found = TRUE;\r
//\r
// If NumOfMatchGuid or Offset are NULL, means user only want\r
*Offset = InternalVarCheckAllocateZeroPool (sizeof (UINTN) * MAX_MATCH_GUID_NUM);\r
ASSERT (*Offset != NULL);\r
}\r
+\r
*(*Offset + *NumOfMatchingGuid) = LoopControl + sizeof (EFI_GUID);\r
(*NumOfMatchingGuid)++;\r
} else {\r
**/\r
EFI_STATUS\r
SearchVfrBinInFfs (\r
- IN VOID *Ffs,\r
- IN VOID *EfiAddr,\r
- IN UINTN Length,\r
- OUT UINTN **Offset,\r
- OUT UINT8 *NumOfMatchingOffset\r
+ IN VOID *Ffs,\r
+ IN VOID *EfiAddr,\r
+ IN UINTN Length,\r
+ OUT UINTN **Offset,\r
+ OUT UINT8 *NumOfMatchingOffset\r
)\r
{\r
- UINTN Index;\r
- EFI_STATUS Status;\r
- UINTN VirOffValue;\r
+ UINTN Index;\r
+ EFI_STATUS Status;\r
+ UINTN VirOffValue;\r
\r
if ((Ffs == NULL) || (Offset == NULL)) {\r
return EFI_NOT_FOUND;\r
}\r
+\r
Status = GetAddressByGuid (\r
Ffs,\r
&gVfrArrayAttractGuid,\r
//\r
// Got the virOffset after the GUID\r
//\r
- VirOffValue = *(UINTN *) ((UINTN) Ffs + *(*Offset + Index));\r
+ VirOffValue = *(UINTN *)((UINTN)Ffs + *(*Offset + Index));\r
//\r
// Transfer the offset to the VA address. One modules may own multiple VfrBin address.\r
//\r
- *(*Offset + Index) = (UINTN) EfiAddr + VirOffValue;\r
+ *(*Offset + Index) = (UINTN)EfiAddr + VirOffValue;\r
}\r
\r
return Status;\r
IN EFI_GUID *DriverGuid\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_FV_FILETYPE FoundType;\r
- EFI_FV_FILE_ATTRIBUTES FileAttributes;\r
- UINT32 AuthenticationStatus;\r
- UINTN Size;\r
- VOID *Buffer;\r
- UINTN SectionSize;\r
- VOID *SectionBuffer;\r
- UINTN VfrBinIndex;\r
- UINT8 NumberofMatchingVfrBin;\r
- UINTN *VfrBinBaseAddress;\r
+ EFI_STATUS Status;\r
+ EFI_FV_FILETYPE FoundType;\r
+ EFI_FV_FILE_ATTRIBUTES FileAttributes;\r
+ UINT32 AuthenticationStatus;\r
+ UINTN Size;\r
+ VOID *Buffer;\r
+ UINTN SectionSize;\r
+ VOID *SectionBuffer;\r
+ UINTN VfrBinIndex;\r
+ UINT8 NumberofMatchingVfrBin;\r
+ UINTN *VfrBinBaseAddress;\r
\r
Status = Fv2->ReadFile (\r
Fv2,\r
&Size,\r
&AuthenticationStatus\r
);\r
- if (!EFI_ERROR (Status)) {\r
- Status = SearchVfrBinInFfs (Buffer, 0, Size, &VfrBinBaseAddress, &NumberofMatchingVfrBin);\r
- if (!EFI_ERROR (Status)) {\r
- SectionBuffer = NULL;\r
- Status = Fv2->ReadSection (\r
- Fv2,\r
- DriverGuid,\r
- EFI_SECTION_PE32,\r
- 0, // Instance\r
- &SectionBuffer,\r
- &SectionSize,\r
- &AuthenticationStatus\r
- );\r
- if (!EFI_ERROR (Status)) {\r
- DEBUG ((EFI_D_INFO, "FfsNameGuid - %g\n", DriverGuid));\r
- DEBUG ((EFI_D_INFO, "NumberofMatchingVfrBin - 0x%02x\n", NumberofMatchingVfrBin));\r
-\r
- for (VfrBinIndex = 0; VfrBinIndex < NumberofMatchingVfrBin; VfrBinIndex++) {\r
-#ifdef DUMP_HII_DATA\r
- DEBUG_CODE (\r
- DumpHiiPackage ((UINT8 *) (UINTN) SectionBuffer + VfrBinBaseAddress[VfrBinIndex] + sizeof (UINT32));\r
- );\r
-#endif\r
- VarCheckParseHiiPackage ((UINT8 *) (UINTN) SectionBuffer + VfrBinBaseAddress[VfrBinIndex] + sizeof (UINT32), TRUE);\r
- }\r
-\r
- FreePool (SectionBuffer);\r
+ if (!EFI_ERROR (Status)) {\r
+ Status = SearchVfrBinInFfs (Buffer, 0, Size, &VfrBinBaseAddress, &NumberofMatchingVfrBin);\r
+ if (!EFI_ERROR (Status)) {\r
+ SectionBuffer = NULL;\r
+ Status = Fv2->ReadSection (\r
+ Fv2,\r
+ DriverGuid,\r
+ EFI_SECTION_PE32,\r
+ 0, // Instance\r
+ &SectionBuffer,\r
+ &SectionSize,\r
+ &AuthenticationStatus\r
+ );\r
+ if (!EFI_ERROR (Status)) {\r
+ DEBUG ((DEBUG_INFO, "FfsNameGuid - %g\n", DriverGuid));\r
+ DEBUG ((DEBUG_INFO, "NumberofMatchingVfrBin - 0x%02x\n", NumberofMatchingVfrBin));\r
+\r
+ for (VfrBinIndex = 0; VfrBinIndex < NumberofMatchingVfrBin; VfrBinIndex++) {\r
+ #ifdef DUMP_HII_DATA\r
+ DEBUG_CODE (\r
+ DumpHiiPackage ((UINT8 *)(UINTN)SectionBuffer + VfrBinBaseAddress[VfrBinIndex] + sizeof (UINT32));\r
+ );\r
+ #endif\r
+ VarCheckParseHiiPackage ((UINT8 *)(UINTN)SectionBuffer + VfrBinBaseAddress[VfrBinIndex] + sizeof (UINT32), TRUE);\r
}\r
\r
- InternalVarCheckFreePool (VfrBinBaseAddress);\r
+ FreePool (SectionBuffer);\r
}\r
\r
- FreePool (Buffer);\r
+ InternalVarCheckFreePool (VfrBinBaseAddress);\r
}\r
\r
- return TRUE;\r
+ FreePool (Buffer);\r
+ }\r
+\r
+ return TRUE;\r
}\r
\r
/**\r
**/\r
VOID\r
ParseFv (\r
- IN BOOLEAN ScanAll\r
+ IN BOOLEAN ScanAll\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_HANDLE *HandleBuffer;\r
- UINTN HandleCount;\r
- UINTN Index;\r
- EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv2;\r
- VOID *Key;\r
- EFI_FV_FILETYPE FileType;\r
- EFI_GUID NameGuid;\r
- EFI_FV_FILE_ATTRIBUTES FileAttributes;\r
- UINTN Size;\r
- UINTN FfsIndex;\r
- VAR_CHECK_VFR_DRIVER_INFO *VfrDriverInfo;\r
- LIST_ENTRY *VfrDriverLink;\r
+ EFI_STATUS Status;\r
+ EFI_HANDLE *HandleBuffer;\r
+ UINTN HandleCount;\r
+ UINTN Index;\r
+ EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv2;\r
+ VOID *Key;\r
+ EFI_FV_FILETYPE FileType;\r
+ EFI_GUID NameGuid;\r
+ EFI_FV_FILE_ATTRIBUTES FileAttributes;\r
+ UINTN Size;\r
+ UINTN FfsIndex;\r
+ VAR_CHECK_VFR_DRIVER_INFO *VfrDriverInfo;\r
+ LIST_ENTRY *VfrDriverLink;\r
\r
HandleBuffer = NULL;\r
- Status = gBS->LocateHandleBuffer (\r
- ByProtocol,\r
- &gEfiFirmwareVolume2ProtocolGuid,\r
- NULL,\r
- &HandleCount,\r
- &HandleBuffer\r
- );\r
+ Status = gBS->LocateHandleBuffer (\r
+ ByProtocol,\r
+ &gEfiFirmwareVolume2ProtocolGuid,\r
+ NULL,\r
+ &HandleCount,\r
+ &HandleBuffer\r
+ );\r
if (EFI_ERROR (Status)) {\r
return;\r
}\r
// Search all FVs\r
//\r
for (Index = 0; Index < HandleCount; Index++) {\r
- DEBUG ((EFI_D_INFO, "FvIndex - %x\n", Index));\r
+ DEBUG ((DEBUG_INFO, "FvIndex - %x\n", Index));\r
Status = gBS->HandleProtocol (\r
HandleBuffer[Index],\r
&gEfiFirmwareVolume2ProtocolGuid,\r
- (VOID **) &Fv2\r
+ (VOID **)&Fv2\r
);\r
ASSERT_EFI_ERROR (Status);\r
\r
- DEBUG_CODE (\r
- EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *Fvb2;\r
- EFI_PHYSICAL_ADDRESS FvAddress;\r
- UINT64 FvSize;\r
-\r
- Status = gBS->HandleProtocol (\r
- HandleBuffer[Index],\r
- &gEfiFirmwareVolumeBlock2ProtocolGuid,\r
- (VOID **) &Fvb2\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
- Status = Fvb2->GetPhysicalAddress (Fvb2, &FvAddress);\r
- if (!EFI_ERROR (Status)) {\r
- DEBUG ((EFI_D_INFO, "FvAddress - 0x%08x\n", FvAddress));\r
- FvSize = ((EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) FvAddress)->FvLength;\r
- DEBUG ((EFI_D_INFO, "FvSize - 0x%08x\n", FvSize));\r
- }\r
- );\r
+ DEBUG_CODE_BEGIN ();\r
+ EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *Fvb2;\r
+ EFI_PHYSICAL_ADDRESS FvAddress;\r
+ UINT64 FvSize;\r
+\r
+ Status = gBS->HandleProtocol (\r
+ HandleBuffer[Index],\r
+ &gEfiFirmwareVolumeBlock2ProtocolGuid,\r
+ (VOID **)&Fvb2\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ Status = Fvb2->GetPhysicalAddress (Fvb2, &FvAddress);\r
+ if (!EFI_ERROR (Status)) {\r
+ DEBUG ((DEBUG_INFO, "FvAddress - 0x%08x\n", FvAddress));\r
+ FvSize = ((EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)FvAddress)->FvLength;\r
+ DEBUG ((DEBUG_INFO, "FvSize - 0x%08x\n", FvSize));\r
+ }\r
+\r
+ DEBUG_CODE_END ();\r
\r
if (ScanAll) {\r
//\r
\r
for (FfsIndex = 0; ; FfsIndex++) {\r
FileType = EFI_FV_FILETYPE_ALL;\r
- Status = Fv2->GetNextFile (\r
- Fv2,\r
- Key,\r
- &FileType,\r
- &NameGuid,\r
- &FileAttributes,\r
- &Size\r
- );\r
+ Status = Fv2->GetNextFile (\r
+ Fv2,\r
+ Key,\r
+ &FileType,\r
+ &NameGuid,\r
+ &FileAttributes,\r
+ &Size\r
+ );\r
if (EFI_ERROR (Status)) {\r
break;\r
}\r
**/\r
VOID\r
CreateVfrDriverList (\r
- IN EFI_GUID *DriverGuidArray\r
+ IN EFI_GUID *DriverGuidArray\r
)\r
{\r
- UINTN Index;\r
- VAR_CHECK_VFR_DRIVER_INFO *VfrDriverInfo;\r
-\r
- for (Index = 0; !CompareGuid (&DriverGuidArray[Index], &gZeroGuid); Index++) {\r
- DEBUG ((EFI_D_INFO, "CreateVfrDriverList: %g\n", &DriverGuidArray[Index]));\r
- VfrDriverInfo = InternalVarCheckAllocateZeroPool (sizeof (*VfrDriverInfo));\r
- ASSERT (VfrDriverInfo != NULL);\r
- VfrDriverInfo->Signature = VAR_CHECK_VFR_DRIVER_INFO_SIGNATURE;\r
- VfrDriverInfo->DriverGuid = &DriverGuidArray[Index];\r
- InsertTailList (&mVfrDriverList, &VfrDriverInfo->Link);\r
+ UINTN Index;\r
+ VAR_CHECK_VFR_DRIVER_INFO *VfrDriverInfo;\r
+\r
+ for (Index = 0; !IsZeroGuid (&DriverGuidArray[Index]); Index++) {\r
+ DEBUG ((DEBUG_INFO, "CreateVfrDriverList: %g\n", &DriverGuidArray[Index]));\r
+ VfrDriverInfo = InternalVarCheckAllocateZeroPool (sizeof (*VfrDriverInfo));\r
+ ASSERT (VfrDriverInfo != NULL);\r
+ VfrDriverInfo->Signature = VAR_CHECK_VFR_DRIVER_INFO_SIGNATURE;\r
+ VfrDriverInfo->DriverGuid = &DriverGuidArray[Index];\r
+ InsertTailList (&mVfrDriverList, &VfrDriverInfo->Link);\r
}\r
}\r
\r
VOID\r
)\r
{\r
- VAR_CHECK_VFR_DRIVER_INFO *VfrDriverInfo;\r
- LIST_ENTRY *VfrDriverLink;\r
+ VAR_CHECK_VFR_DRIVER_INFO *VfrDriverInfo;\r
+ LIST_ENTRY *VfrDriverLink;\r
\r
while (mVfrDriverList.ForwardLink != &mVfrDriverList) {\r
VfrDriverLink = mVfrDriverList.ForwardLink;\r
VOID\r
)\r
{\r
- EFI_GUID *DriverGuidArray;\r
- BOOLEAN ScanAll;\r
+ EFI_GUID *DriverGuidArray;\r
+ BOOLEAN ScanAll;\r
\r
- DEBUG ((EFI_D_INFO, "VarCheckHiiGenDxeFromFv\n"));\r
+ DEBUG ((DEBUG_INFO, "VarCheckHiiGenDxeFromFv\n"));\r
\r
//\r
// Get vfr driver guid array from PCD.\r
//\r
- DriverGuidArray = (EFI_GUID *) PcdGetPtr (PcdVarCheckVfrDriverGuidArray);\r
+ DriverGuidArray = (EFI_GUID *)PcdGetPtr (PcdVarCheckVfrDriverGuidArray);\r
\r
- if (CompareGuid (&DriverGuidArray[0], &gZeroGuid)) {\r
+ if (IsZeroGuid (&DriverGuidArray[0])) {\r
//\r
// No VFR driver will be parsed from FVs.\r
//\r