]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/EsrtDxe/EsrtDxe.c
MdeModulePkg/RegularExpressionDxe: Make oniguruma a submodule in edk2.
[mirror_edk2.git] / MdeModulePkg / Universal / EsrtDxe / EsrtDxe.c
index 742abde4a6a125c7ab044687a91e97ed97107d7b..a386a9770583e57194b09fa986c31c53618734b3 100644 (file)
@@ -1,14 +1,8 @@
 /** @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
@@ -20,7 +14,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 ESRT_PRIVATE_DATA mPrivate;\r
 \r
-ESRT_MANAGEMENT_PROTOCOL  mEsrtManagementProtocolTemplate = { \r
+ESRT_MANAGEMENT_PROTOCOL  mEsrtManagementProtocolTemplate = {\r
                             EsrtDxeGetEsrtEntry,\r
                             EsrtDxeUpdateEsrtEntry,\r
                             EsrtDxeRegisterEsrtEntry,\r
@@ -30,11 +24,11 @@ ESRT_MANAGEMENT_PROTOCOL  mEsrtManagementProtocolTemplate = {
                             };\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
@@ -94,7 +88,7 @@ EsrtDxeGetEsrtEntry(
   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
@@ -107,7 +101,7 @@ EsrtDxeUpdateEsrtEntry(
   )\r
 {\r
   EFI_STATUS                Status;\r
-  \r
+\r
   if (Entry == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
@@ -139,11 +133,11 @@ EsrtDxeUpdateEsrtEntry(
 }\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
@@ -153,7 +147,7 @@ EsrtDxeUnRegisterEsrtEntry(
   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
@@ -217,7 +211,7 @@ EsrtDxeRegisterEsrtEntry(
 /**\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
@@ -228,7 +222,7 @@ EFI_STATUS
 EFIAPI\r
 EsrtDxeSyncFmp(\r
   VOID\r
-  ) \r
+  )\r
 {\r
   EFI_STATUS                                Status;\r
   UINTN                                     Index1;\r
@@ -238,8 +232,8 @@ EsrtDxeSyncFmp(
   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
@@ -270,11 +264,11 @@ EsrtDxeSyncFmp(
                   &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
@@ -295,7 +289,7 @@ EsrtDxeSyncFmp(
 \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
@@ -380,14 +374,14 @@ EsrtDxeSyncFmp(
 \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
@@ -402,7 +396,7 @@ EsrtDxeSyncFmp(
         //\r
         if (Index1 == EntryNumNew){\r
           SetEsrtEntryFromFmpInfo(&EsrtRepositoryNew[EntryNumNew], TempFmpImageInfo, FmpImageInfoDescriptorVerBuf[Index2]);\r
-          EntryNumNew++; \r
+          EntryNumNew++;\r
           if (EntryNumNew >= PcdGet32(PcdMaxFmpEsrtCacheNum)) {\r
             break;\r
           }\r
@@ -471,10 +465,10 @@ END:
 }\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
@@ -514,14 +508,14 @@ EsrtReadyToBootEventNotify (
   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
@@ -583,12 +577,17 @@ EsrtReadyToBootEventNotify (
     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
@@ -611,14 +610,24 @@ EXIT:
   }\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