/** @file\r
Esrt management module.\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 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
#include "EsrtImpl.h"\r
\r
ESRT_PRIVATE_DATA mPrivate;\r
\r
-ESRT_MANAGEMENT_PROTOCOL mEsrtManagementProtocolTemplate = { \r
+ESRT_MANAGEMENT_PROTOCOL mEsrtManagementProtocolTemplate = {\r
EsrtDxeGetEsrtEntry,\r
EsrtDxeUpdateEsrtEntry,\r
EsrtDxeRegisterEsrtEntry,\r
};\r
\r
/**\r
- Get ESRT entry from ESRT Cache by FwClass Guid \r
+ Get ESRT entry from ESRT Cache by FwClass Guid\r
+\r
+ @param[in] FwClass FwClass of Esrt entry to get\r
+ @param[in, out] Entry Esrt entry returned\r
\r
- @param[in] FwClass FwClass of Esrt entry to get \r
- @param[in out] Entry Esrt entry returned \r
- \r
@retval EFI_SUCCESS The variable saving this Esrt Entry exists.\r
@retval EF_NOT_FOUND No correct variable found.\r
@retval EFI_WRITE_PROTECTED ESRT Cache repository is locked\r
Update one ESRT entry in ESRT Cache.\r
\r
@param[in] Entry Esrt entry to be updated\r
- \r
+\r
@retval EFI_SUCCESS Successfully update an ESRT entry in cache.\r
@retval EFI_INVALID_PARAMETER Entry does't exist in ESRT Cache\r
@retval EFI_WRITE_PROTECTED ESRT Cache repositoy is locked\r
)\r
{\r
EFI_STATUS Status;\r
- \r
+\r
if (Entry == NULL) {\r
return EFI_INVALID_PARAMETER;\r
}\r
}\r
\r
/**\r
- Non-FMP instance to unregister Esrt Entry from ESRT Cache. \r
+ Non-FMP instance to unregister Esrt Entry from ESRT Cache.\r
+\r
+ @param[in] FwClass FwClass of Esrt entry to Unregister\r
\r
- @param[in] FwClass FwClass of Esrt entry to Unregister \r
- \r
- @retval EFI_SUCCESS Insert all entries Successfully \r
+ @retval EFI_SUCCESS Insert all entries Successfully\r
@retval EFI_NOT_FOUND Entry of FwClass does not exsit\r
\r
**/\r
IN EFI_GUID *FwClass\r
)\r
{\r
- EFI_STATUS Status; \r
+ EFI_STATUS Status;\r
\r
if (FwClass == NULL) {\r
return EFI_INVALID_PARAMETER;\r
/**\r
This function syn up Cached ESRT with data from FMP instances\r
Function should be called after Connect All in order to locate all FMP protocols\r
- installed\r
+ installed.\r
\r
@retval EFI_SUCCESS Successfully sync cache repository from FMP instances\r
@retval EFI_NOT_FOUND No FMP Instance are found\r
EFIAPI\r
EsrtDxeSyncFmp(\r
VOID\r
- ) \r
+ )\r
{\r
EFI_STATUS Status;\r
UINTN Index1;\r
EFI_FIRMWARE_MANAGEMENT_PROTOCOL **FmpBuf;\r
UINTN NumberOfHandles;\r
UINTN *DescriptorSizeBuf;\r
- EFI_FIRMWARE_IMAGE_DESCRIPTOR **FmpImageInfoBuf; \r
- EFI_FIRMWARE_IMAGE_DESCRIPTOR *TempFmpImageInfo; \r
+ EFI_FIRMWARE_IMAGE_DESCRIPTOR **FmpImageInfoBuf;\r
+ EFI_FIRMWARE_IMAGE_DESCRIPTOR *TempFmpImageInfo;\r
UINT8 *FmpImageInfoCountBuf;\r
UINT32 *FmpImageInfoDescriptorVerBuf;\r
UINTN ImageInfoSize;\r
&HandleBuffer\r
);\r
\r
- \r
- if (Status == EFI_NOT_FOUND) { \r
+\r
+ if (Status == EFI_NOT_FOUND) {\r
EntryNumNew = 0;\r
goto UPDATE_REPOSITORY;\r
- } else if (EFI_ERROR(Status)){ \r
+ } else if (EFI_ERROR(Status)){\r
goto END;\r
}\r
\r
\r
FmpImageInfoBuf = AllocateZeroPool(sizeof(EFI_FIRMWARE_IMAGE_DESCRIPTOR *) * NumberOfHandles);\r
if (FmpImageInfoBuf == NULL) {\r
- Status = EFI_OUT_OF_RESOURCES; \r
+ Status = EFI_OUT_OF_RESOURCES;\r
goto END;\r
}\r
\r
\r
//\r
// Create new FMP cache repository based on FmpImageInfoBuf\r
- // \r
+ //\r
for (Index2 = 0; Index2 < NumberOfHandles; Index2++){\r
TempFmpImageInfo = FmpImageInfoBuf[Index2];\r
for (Index3 = 0; Index3 < FmpImageInfoCountBuf[Index2]; Index3++){\r
- if ((TempFmpImageInfo->AttributesSupported & IMAGE_ATTRIBUTE_IN_USE) != 0 \r
+ if ((TempFmpImageInfo->AttributesSupported & IMAGE_ATTRIBUTE_IN_USE) != 0\r
&& (TempFmpImageInfo->AttributesSetting & IMAGE_ATTRIBUTE_IN_USE) != 0){\r
//\r
- // Always put the first smallest version of Image info into ESRT cache \r
+ // Always put the first smallest version of Image info into ESRT cache\r
//\r
for(Index1 = 0; Index1 < EntryNumNew; Index1++) {\r
if (CompareGuid(&EsrtRepositoryNew[Index1].FwClass, &TempFmpImageInfo->ImageTypeId)) {\r
//\r
if (Index1 == EntryNumNew){\r
SetEsrtEntryFromFmpInfo(&EsrtRepositoryNew[EntryNumNew], TempFmpImageInfo, FmpImageInfoDescriptorVerBuf[Index2]);\r
- EntryNumNew++; \r
+ EntryNumNew++;\r
if (EntryNumNew >= PcdGet32(PcdMaxFmpEsrtCacheNum)) {\r
break;\r
}\r
}\r
\r
/**\r
- This function locks up Esrt repository to be readonly. It should be called \r
+ This function locks up Esrt repository to be readonly. It should be called\r
before gEfiEndOfDxeEventGroupGuid event signaled\r
\r
- @retval EFI_SUCCESS Locks up FMP Non-FMP repository successfully \r
+ @retval EFI_SUCCESS Locks up FMP Non-FMP repository successfully\r
\r
**/\r
EFI_STATUS\r
IN EFI_EVENT Event,\r
IN VOID *Context\r
)\r
-{ \r
+{\r
EFI_STATUS Status;\r
EFI_SYSTEM_RESOURCE_TABLE *EsrtTable;\r
EFI_SYSTEM_RESOURCE_ENTRY *FmpEsrtRepository;\r
EFI_SYSTEM_RESOURCE_ENTRY *NonFmpEsrtRepository;\r
UINTN FmpRepositorySize;\r
UINTN NonFmpRepositorySize;\r
- \r
+\r
\r
FmpEsrtRepository = NULL;\r
NonFmpEsrtRepository = NULL;\r
goto EXIT;\r
}\r
\r
- EsrtTable->FwResourceVersion = EFI_SYSTEM_RESOURCE_TABLE_FIRMWARE_RESOURCE_VERSION; \r
- EsrtTable->FwResourceCount = (UINT32)((NonFmpRepositorySize + FmpRepositorySize) / sizeof(EFI_SYSTEM_RESOURCE_ENTRY)); \r
+ EsrtTable->FwResourceVersion = EFI_SYSTEM_RESOURCE_TABLE_FIRMWARE_RESOURCE_VERSION;\r
+ EsrtTable->FwResourceCount = (UINT32)((NonFmpRepositorySize + FmpRepositorySize) / sizeof(EFI_SYSTEM_RESOURCE_ENTRY));\r
EsrtTable->FwResourceCountMax = PcdGet32(PcdMaxNonFmpEsrtCacheNum) + PcdGet32(PcdMaxFmpEsrtCacheNum);\r
\r
- CopyMem(EsrtTable + 1, NonFmpEsrtRepository, NonFmpRepositorySize);\r
- CopyMem((UINT8 *)(EsrtTable + 1) + NonFmpRepositorySize, FmpEsrtRepository, FmpRepositorySize);\r
+ if (NonFmpRepositorySize != 0 && NonFmpEsrtRepository != NULL) {\r
+ CopyMem(EsrtTable + 1, NonFmpEsrtRepository, NonFmpRepositorySize);\r
+ }\r
+\r
+ if (FmpRepositorySize != 0 && FmpEsrtRepository != NULL) {\r
+ CopyMem((UINT8 *)(EsrtTable + 1) + NonFmpRepositorySize, FmpEsrtRepository, FmpRepositorySize);\r
+ }\r
\r
//\r
// Publish Esrt to system config table\r
}\r
}\r
\r
+/**\r
+ The module Entry Point of the Esrt DXE driver that manages cached ESRT repository\r
+ & publishes ESRT table\r
+\r
+ @param[in] ImageHandle The firmware allocated handle for the EFI image.\r
+ @param[in] SystemTable A pointer to the EFI System Table.\r
+\r
+ @retval EFI_SUCCESS The entry point is executed successfully.\r
+ @retval Other Some error occurs when executing this entry point.\r
\r
+**/\r
EFI_STATUS\r
EFIAPI\r
EsrtDxeEntryPoint (\r
IN EFI_HANDLE ImageHandle,\r
IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
-{ \r
+{\r
EFI_STATUS Status;\r
\r
EfiInitializeLock (&mPrivate.FmpLock, TPL_CALLBACK);\r