]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/Forms.c
Bug fixes for FrameworkHiiToUefiHiiThunk;
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / FrameworkHiiToUefiHiiThunk / Forms.c
index 8d15e82841f1ea1fb69784e01d445b71ecbcc698..45ccfdb1717536ffc364f858611731a04893695f 100644 (file)
@@ -17,42 +17,20 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include "UefiIfrDefault.h"\r
 #include "OpcodeCreation.h"\r
 \r
-EFI_STATUS\r
-EFIAPI\r
-HiiExportDatabase (\r
-  IN     EFI_HII_PROTOCOL *This,\r
-  IN     FRAMEWORK_EFI_HII_HANDLE    Handle,\r
-  IN OUT UINTN            *BufferSize,\r
-  OUT    VOID             *Buffer\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  This function allows a program to extract a form or form package that has\r
-  previously been registered with the EFI HII database.\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
---*/\r
-{\r
-  ASSERT (FALSE);\r
-  return EFI_UNSUPPORTED;\r
-}\r
-\r
+//\r
+// This structure is only intended to be used in this file.\r
+//\r
 #pragma pack(push, 1)\r
 typedef struct {\r
   EFI_HII_PACK_HEADER            PackageHeader;\r
   FRAMEWORK_EFI_IFR_FORM_SET     FormSet;\r
   FRAMEWORK_EFI_IFR_END_FORM_SET EndFormSet;\r
-} FRAMEWORK_HII_FORMSET_TEMPLATE;\r
+} FW_HII_FORMSET_TEMPLATE;\r
 #pragma pack(pop)\r
 \r
-FRAMEWORK_HII_FORMSET_TEMPLATE FormSetTemplate = {\r
+FW_HII_FORMSET_TEMPLATE FormSetTemplate = {\r
   {\r
-    sizeof (FRAMEWORK_HII_FORMSET_TEMPLATE),\r
+    sizeof (FW_HII_FORMSET_TEMPLATE),\r
     EFI_HII_IFR\r
   },\r
   {\r
@@ -77,115 +55,141 @@ FRAMEWORK_HII_FORMSET_TEMPLATE FormSetTemplate = {
   }\r
 };\r
 \r
-EFI_STATUS\r
-EFIAPI\r
-HiiGetForms (\r
-  IN     EFI_HII_PROTOCOL   *This,\r
-  IN     FRAMEWORK_EFI_HII_HANDLE      Handle,\r
-  IN     EFI_FORM_ID        FormId,\r
-  IN OUT UINTN              *BufferLengthTemp,\r
-  OUT    UINT8              *Buffer\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
 \r
-  This function allows a program to extract a form or form package that has\r
-  previously been registered with the EFI HII database.\r
+/**\r
 \r
-Arguments:\r
-  This         - A pointer to the EFI_HII_PROTOCOL instance.\r
+  This thunk module only handles UEFI HII packages. The caller of this function \r
+  won¡¯t be able to parse the content. Therefore, it is not supported.\r
+  \r
+  This function will ASSERT and return EFI_UNSUPPORTED.\r
 \r
-  Handle       - Handle on which the form resides. Type FRAMEWORK_EFI_HII_HANDLE  is defined in\r
-                 EFI_HII_PROTOCOL.NewPack() in the Packages section.\r
+  @param This            N.A.\r
+  @param Handle          N.A.\r
+  @param BufferSize      N.A.\r
+  @param Buffer          N.A.\r
 \r
-  FormId       - The ID of the form to return. If the ID is zero, the entire form package is returned.\r
-                 Type EFI_FORM_ID is defined in "Related Definitions" below.\r
+  @retval EFI_UNSUPPORTED\r
 \r
-  BufferLength - On input, the length of the Buffer. On output, the length of the returned buffer, if\r
-                 the length was sufficient and, if it was not, the length that is required to fit the\r
-                 requested form(s).\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiExportDatabase (\r
+  IN     EFI_HII_PROTOCOL *This,\r
+  IN     FRAMEWORK_EFI_HII_HANDLE    Handle,\r
+  IN OUT UINTN            *BufferSize,\r
+  OUT    VOID             *Buffer\r
+  )\r
+{\r
+  ASSERT (FALSE);\r
+  return EFI_UNSUPPORTED;\r
+}\r
 \r
-  Buffer       - The buffer designed to receive the form(s).\r
 \r
-Returns:\r
+/**\r
+  This function allows a program to extract a form or form package that has\r
+  previously been registered with the EFI HII database.\r
 \r
-  EFI_SUCCESS           -  Buffer filled with the requested forms. BufferLength\r
-                           was updated.\r
+  In this thunk module, this function will create a IFR Package with only \r
+  one Formset. Effectively, only the GUID of the Formset is updated and return\r
+  in this IFR package to caller. This is enable the Framework modules which call \r
+  a API named GetStringFromToken. GetStringFromToken retieves a String based on\r
+  a String Token from a Package List known only by the Formset GUID.\r
+  \r
 \r
-  EFI_INVALID_PARAMETER -  The handle is unknown.\r
 \r
-  EFI_NOT_FOUND         -  A form on the requested handle cannot be found with the\r
-                           requested FormId.\r
+  @param This             A pointer to the EFI_HII_PROTOCOL instance.\r
+  @param Handle           Handle on which the form resides. Type FRAMEWORK_EFI_HII_HANDLE  is defined in\r
+                          EFI_HII_PROTOCOL.NewPack() in the Packages section.\r
+  @param FormId           Ignored by this implementation.\r
+  @param BufferLengthTemp On input, the size of input buffer. On output, it\r
+                          is the size of FW_HII_FORMSET_TEMPLATE.\r
+  @param Buffer           The buffer designed to receive the form(s).\r
 \r
-  EFI_BUFFER_TOO_SMALL  - The buffer provided was not large enough to allow the form to be stored.\r
+  @retval  EFI_SUCCESS            Buffer filled with the requested forms. BufferLength\r
+                                  was updated.\r
+  @retval  EFI_INVALID_PARAMETER  The handle is unknown.\r
+  @retval  EFI_NOT_FOUND          A form on the requested handle cannot be found with the\r
+                                  requested FormId.\r
+  @retval  EFI_BUFFER_TOO_SMALL   The buffer provided was not large enough to allow the form to be stored.\r
 \r
---*/\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiGetForms (\r
+  IN     EFI_HII_PROTOCOL   *This,\r
+  IN     FRAMEWORK_EFI_HII_HANDLE      Handle,\r
+  IN     EFI_FORM_ID        FormId,\r
+  IN OUT UINTN              *BufferLengthTemp,\r
+  OUT    UINT8              *Buffer\r
+  )\r
 {\r
-  EFI_HII_THUNK_PRIVATE_DATA                *Private;\r
-  HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY  *MapEntry;\r
-  FRAMEWORK_HII_FORMSET_TEMPLATE            *OutputFormSet;\r
+  HII_THUNK_PRIVATE_DATA                *Private;\r
+  HII_THUNK_CONTEXT  *ThunkContext;\r
+  FW_HII_FORMSET_TEMPLATE            *OutputFormSet;\r
 \r
-  if (*BufferLengthTemp < sizeof(FRAMEWORK_HII_FORMSET_TEMPLATE)) {\r
-    *BufferLengthTemp = sizeof(FRAMEWORK_HII_FORMSET_TEMPLATE);\r
+  if (*BufferLengthTemp < sizeof(FW_HII_FORMSET_TEMPLATE)) {\r
+    *BufferLengthTemp = sizeof(FW_HII_FORMSET_TEMPLATE);\r
     return EFI_BUFFER_TOO_SMALL;\r
   }\r
   \r
-  Private = EFI_HII_THUNK_PRIVATE_DATA_FROM_THIS(This);\r
+  Private = HII_THUNK_PRIVATE_DATA_FROM_THIS(This);\r
 \r
-  MapEntry = FrameworkHiiHandleToMapDatabaseEntry (Private, Handle);\r
+  ThunkContext = FwHiiHandleToThunkContext (Private, Handle);\r
 \r
-  if (MapEntry == NULL) {\r
+  if (ThunkContext == NULL) {\r
     return EFI_NOT_FOUND;\r
   }\r
 \r
-  OutputFormSet = (FRAMEWORK_HII_FORMSET_TEMPLATE *) Buffer;\r
-  \r
-  CopyMem (OutputFormSet, &FormSetTemplate, sizeof (FRAMEWORK_HII_FORMSET_TEMPLATE));\r
-  CopyMem (&OutputFormSet->FormSet.Guid, &MapEntry->TagGuid, sizeof (EFI_GUID)); \r
+  OutputFormSet = (FW_HII_FORMSET_TEMPLATE *) Buffer;\r
   \r
+  CopyMem (OutputFormSet, &FormSetTemplate, sizeof (FW_HII_FORMSET_TEMPLATE));\r
+  CopyMem (&OutputFormSet->FormSet.Guid, &ThunkContext->TagGuid, sizeof (EFI_GUID)); \r
+\r
+  OutputFormSet->FormSet.Class = ThunkContext->FormSetClass;\r
+  OutputFormSet->FormSet.SubClass = ThunkContext->FormSetSubClass;\r
+  OutputFormSet->FormSet.Help     = ThunkContext->FormSetHelp;\r
+  OutputFormSet->FormSet.FormSetTitle = ThunkContext->FormSetTitle;\r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r
 \r
-EFI_STATUS\r
-EFIAPI\r
-HiiGetDefaultImage (\r
-  IN     EFI_HII_PROTOCOL            *This,\r
-  IN     FRAMEWORK_EFI_HII_HANDLE    Handle,\r
-  IN     UINTN                       DefaultMask,\r
-  OUT    EFI_HII_VARIABLE_PACK_LIST  **VariablePackList\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
+/**\r
 \r
   This function allows a program to extract the NV Image\r
   that represents the default storage image\r
 \r
-  Arguments:\r
-    This             - A pointer to the EFI_HII_PROTOCOL instance.\r
-    Handle           - The HII handle from which will have default data retrieved.\r
-    UINTN            - Mask used to retrieve the default image.\r
-    VariablePackList - Callee allocated, tightly-packed, link list data\r
+\r
+  @param This            A pointer to the EFI_HII_PROTOCOL instance.\r
+  @param Handle          The HII handle from which will have default data retrieved.\r
+                         UINTN            - Mask used to retrieve the default image.\r
+  @param DefaultMask     EDES_TODO: Add parameter description\r
+  @param VariablePackList Callee allocated, tightly-packed, link list data\r
                          structure that contain all default varaible packs\r
                          from the Hii Database.\r
 \r
-  Returns:\r
-    EFI_NOT_FOUND         - If Hii database does not contain any default images.\r
-    EFI_INVALID_PARAMETER - Invalid input parameter.\r
-    EFI_SUCCESS           - Operation successful.\r
+  @retval  EFI_NOT_FOUND          If Hii database does not contain any default images.\r
+  @retval  EFI_INVALID_PARAMETER  Invalid input parameter.\r
+  @retval  EFI_SUCCESS            Operation successful.\r
 \r
---*/\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiGetDefaultImage (\r
+  IN     EFI_HII_PROTOCOL            *This,\r
+  IN     FRAMEWORK_EFI_HII_HANDLE    Handle,\r
+  IN     UINTN                       DefaultMask,\r
+  OUT    EFI_HII_VARIABLE_PACK_LIST  **VariablePackList\r
+  )\r
 {\r
   LIST_ENTRY        *UefiDefaults;\r
   EFI_HII_HANDLE    UefiHiiHandle;\r
   EFI_STATUS        Status;\r
-  EFI_HII_THUNK_PRIVATE_DATA *Private;\r
+  HII_THUNK_PRIVATE_DATA *Private;\r
 \r
-  Private = EFI_HII_THUNK_PRIVATE_DATA_FROM_THIS(This);\r
+  Private = HII_THUNK_PRIVATE_DATA_FROM_THIS(This);\r
 \r
-  UefiHiiHandle = FrameworkHiiHandleToUefiHiiHandle (Private, Handle);\r
+  UefiHiiHandle = FwHiiHandleToUefiHiiHandle (Private, Handle);\r
   if (UefiHiiHandle == NULL) {\r
     ASSERT (FALSE);\r
     return EFI_INVALID_PARAMETER;\r
@@ -197,7 +201,7 @@ HiiGetDefaultImage (
     goto Done;\r
   }\r
 \r
-  Status = UefiDefaultsToFrameworkDefaults (UefiDefaults, DefaultMask, VariablePackList);\r
+  Status = UefiDefaultsToFwDefaults (UefiDefaults, DefaultMask, VariablePackList);\r
 \r
 Done:\r
   FreeDefaultList (UefiDefaults);\r
@@ -205,22 +209,31 @@ Done:
   return Status;\r
 }\r
 \r
+/**\r
+  EDES_TODO: Add function description.\r
+\r
+  @param CallbackHandle  EDES_TODO: Add parameter description\r
+  @param ThunkContext  EDES_TODO: Add parameter description\r
+\r
+  @return EDES_TODO: Add description for return value\r
+\r
+**/\r
 EFI_STATUS\r
-ThunkUpdateFormCallBack (\r
+UpdateFormCallBack (\r
   IN       EFI_HANDLE                                CallbackHandle,\r
-  IN CONST HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY  *HandleMapEntry\r
+  IN CONST HII_THUNK_CONTEXT                         *ThunkContext\r
   )\r
 {\r
   EFI_STATUS                                Status;\r
-  EFI_FORM_CALLBACK_PROTOCOL                *FrameworkFormCallbackProtocol;\r
+  EFI_FORM_CALLBACK_PROTOCOL                *FormCallbackProtocol;\r
   EFI_HII_CONFIG_ACCESS_PROTOCOL            *ConfigAccessProtocol;\r
   EFI_HANDLE                                UefiDriverHandle;\r
-  HII_TRHUNK_CONFIG_ACCESS_PROTOCOL_INSTANCE *ConfigAccessProtocolInstance;\r
+  CONFIG_ACCESS_PRIVATE                     *ConfigAccessPrivate;\r
   \r
   Status = gBS->HandleProtocol (\r
                    CallbackHandle,\r
                    &gEfiFormCallbackProtocolGuid,\r
-                   (VOID **) &FrameworkFormCallbackProtocol\r
+                   (VOID **) &FormCallbackProtocol\r
                    );\r
   if (EFI_ERROR (Status)) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -228,7 +241,7 @@ ThunkUpdateFormCallBack (
   \r
   Status = mHiiDatabase->GetPackageListHandle (\r
                                         mHiiDatabase,\r
-                                        HandleMapEntry->UefiHiiHandle,\r
+                                        ThunkContext->UefiHiiHandle,\r
                                         &UefiDriverHandle\r
                                         );\r
   ASSERT_EFI_ERROR (Status);\r
@@ -239,17 +252,28 @@ ThunkUpdateFormCallBack (
                    );\r
   ASSERT_EFI_ERROR (Status);\r
   \r
-  ConfigAccessProtocolInstance = HII_TRHUNK_CONFIG_ACCESS_PROTOCOL_INSTANCE_FROM_PROTOCOL (ConfigAccessProtocol);\r
+  ConfigAccessPrivate = CONFIG_ACCESS_PRIVATE_FROM_PROTOCOL (ConfigAccessProtocol);\r
   \r
-  ConfigAccessProtocolInstance->FrameworkFormCallbackProtocol = FrameworkFormCallbackProtocol;\r
+  ConfigAccessPrivate->FormCallbackProtocol = FormCallbackProtocol;\r
 \r
   return EFI_SUCCESS;\r
 }\r
 \r
 \r
+/**\r
+  EDES_TODO: Add function description.\r
+\r
+  @param HiiPackageList  EDES_TODO: Add parameter description\r
+  @param PackageIndex    EDES_TODO: Add parameter description\r
+  @param BufferLen       EDES_TODO: Add parameter description\r
+  @param Buffer          EDES_TODO: Add parameter description\r
+\r
+  @return EDES_TODO: Add description for return value\r
+\r
+**/\r
 STATIC\r
 EFI_STATUS\r
-GetPackageDataFromPackageList (\r
+GetPackageData (\r
   IN  EFI_HII_PACKAGE_LIST_HEADER *HiiPackageList,\r
   IN  UINT32                      PackageIndex,\r
   OUT UINT32                      *BufferLen,\r
@@ -390,7 +414,7 @@ LocateLabel (
   @retval EFI_SUCCESS       The first found Form ID is returned in FormId.\r
 **/\r
 EFI_STATUS\r
-ThunkLocateFormId (\r
+LocateFormId (\r
   IN  EFI_HII_HANDLE Handle,\r
   IN  EFI_FORM_LABEL Label,\r
   OUT EFI_GUID       *FormsetGuid,\r
@@ -419,7 +443,7 @@ ThunkLocateFormId (
   }\r
 \r
   for (Index = 0; ; Index++) {\r
-    Status = GetPackageDataFromPackageList (HiiPackageList, Index, &PackageLength, &Package);\r
+    Status = GetPackageData (HiiPackageList, Index, &PackageLength, &Package);\r
     if (!EFI_ERROR (Status)) {\r
       CopyMem (&PackageHeader, Package, sizeof (EFI_HII_PACKAGE_HEADER));\r
       if (PackageHeader.Type == EFI_HII_PACKAGE_FORM) {\r
@@ -439,77 +463,87 @@ Done:
   \r
   return Status;\r
 }\r
+/**\r
+  This function allows the caller to update a form that has\r
+  previously been registered with the EFI HII database.\r
+\r
+\r
+  @param This            EDES_TODO: Add parameter description\r
+  @param Handle          Hii Handle associated with the Formset to modify\r
+  @param Label           Update information starting immediately after this label in the IFR\r
+  @param AddData         If TRUE, add data.  If FALSE, remove data\r
+  @param Data            If adding data, this is the pointer to the data to add\r
+\r
+  @retval  EFI_SUCCESS  Update success.\r
+  @retval  Other        Update fail.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 HiiUpdateForm (\r
-  IN EFI_HII_PROTOCOL       *This,\r
+  IN EFI_HII_PROTOCOL                  *This,\r
   IN FRAMEWORK_EFI_HII_HANDLE          Handle,\r
-  IN EFI_FORM_LABEL         Label,\r
-  IN BOOLEAN                AddData,\r
+  IN EFI_FORM_LABEL                    Label,\r
+  IN BOOLEAN                           AddData,\r
   IN FRAMEWORK_EFI_HII_UPDATE_DATA    *Data\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-  This function allows the caller to update a form that has\r
-  previously been registered with the EFI HII database.\r
-\r
-Arguments:\r
-  Handle     - Hii Handle associated with the Formset to modify\r
-  Label      - Update information starting immediately after this label in the IFR\r
-  AddData    - If TRUE, add data.  If FALSE, remove data\r
-  Data       - If adding data, this is the pointer to the data to add\r
-\r
-Returns:\r
-  EFI_SUCCESS - Update success.\r
-  Other       - Update fail.\r
-\r
---*/\r
 {\r
   EFI_STATUS                                Status;\r
-  EFI_HII_THUNK_PRIVATE_DATA                *Private;\r
-  HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY  *HandleMapEntry;\r
+  HII_THUNK_PRIVATE_DATA                    *Private;\r
+  HII_THUNK_CONTEXT                          *ThunkContext;\r
   EFI_HII_UPDATE_DATA                       *UefiHiiUpdateData;\r
   EFI_HII_HANDLE                            UefiHiiHandle;\r
   EFI_GUID                                  FormsetGuid;\r
   EFI_FORM_ID                               FormId;\r
+  EFI_TPL                                   OldTpl;\r
 \r
+  OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
+  \r
+  mInFrameworkUpdatePakcage = TRUE;\r
   Status = EFI_SUCCESS;\r
+  UefiHiiUpdateData = NULL;\r
 \r
-  Private = EFI_HII_THUNK_PRIVATE_DATA_FROM_THIS(This);\r
 \r
-  HandleMapEntry = FrameworkHiiHandleToMapDatabaseEntry (Private, Handle);\r
+  Private = HII_THUNK_PRIVATE_DATA_FROM_THIS(This);\r
 \r
-  if (HandleMapEntry == NULL) {\r
-    return EFI_NOT_FOUND;\r
+  ThunkContext = FwHiiHandleToThunkContext (Private, Handle);\r
+\r
+  if (ThunkContext == NULL) {\r
+    Status = EFI_NOT_FOUND;\r
+    goto Done;\r
   }\r
   \r
   if (Data->FormSetUpdate) {\r
-    Status = ThunkUpdateFormCallBack ((EFI_HANDLE) (UINTN) Data->FormCallbackHandle, HandleMapEntry);\r
+    Status = UpdateFormCallBack ((EFI_HANDLE) (UINTN) Data->FormCallbackHandle, ThunkContext);\r
     if (EFI_ERROR (Status)) {\r
-      return Status;\r
+      goto Done;\r
     }\r
   }\r
 \r
-  if (HandleMapEntry->IsPackageListWithOnlyStringPackages) {\r
-    UefiHiiHandle = TagGuidToUefiIfrHiiHandle (Private, &HandleMapEntry->TagGuid);\r
+  if ((ThunkContext->IfrPackageCount == 0) && (ThunkContext->StringPackageCount != 0)) {\r
+    UefiHiiHandle = TagGuidToUefiHiiHandle (Private, &ThunkContext->TagGuid);\r
   \r
     if (UefiHiiHandle == NULL) {\r
-      return EFI_INVALID_PARAMETER;\r
+      Status = EFI_INVALID_PARAMETER;\r
+      goto Done;\r
     }\r
   } else {\r
-    UefiHiiHandle = HandleMapEntry->UefiHiiHandle;\r
+    UefiHiiHandle = ThunkContext->UefiHiiHandle;\r
   }\r
 \r
-  UefiHiiUpdateData = NULL;\r
+  Status = LocateFormId (UefiHiiHandle, Label, &FormsetGuid, &FormId);\r
+  if (EFI_ERROR (Status)) {\r
+    //\r
+    // Can't find the label.\r
+    //\r
+    goto Done;\r
+  }\r
 \r
   if (AddData) {\r
     if (Data->DataCount != 0) {\r
-      \r
-      Status = ThunkFrameworkUpdateDataToUefiUpdateData (Data, AddData, &UefiHiiUpdateData);\r
-      ASSERT_EFI_ERROR (Status);\r
 \r
-      Status = ThunkLocateFormId (UefiHiiHandle, Label, &FormsetGuid, &FormId);\r
+      ThunkContext = UefiHiiHandleToThunkContext (Private, UefiHiiHandle);\r
+      Status = FwUpdateDataToUefiUpdateData (ThunkContext, Data, AddData, &UefiHiiUpdateData);\r
       ASSERT_EFI_ERROR (Status);\r
 \r
       Status = IfrLibUpdateForm (UefiHiiHandle, &FormsetGuid, FormId, Label, AddData, UefiHiiUpdateData);\r
@@ -517,9 +551,6 @@ Returns:
       \r
     } \r
   } else {\r
-    Status = ThunkLocateFormId (UefiHiiHandle, Label, &FormsetGuid, &FormId);\r
-    ASSERT_EFI_ERROR (Status);\r
-\r
     //\r
     // Delete Opcode starting from Labe in FormId found\r
     //\r
@@ -529,10 +560,15 @@ Returns:
     ASSERT_EFI_ERROR (Status);\r
   }\r
 \r
+Done:\r
   if (UefiHiiUpdateData != NULL) {\r
     SafeFreePool (UefiHiiUpdateData->Data);\r
     SafeFreePool (UefiHiiUpdateData);\r
   }\r
 \r
+  mInFrameworkUpdatePakcage = FALSE; \r
+\r
+  gBS->RestoreTPL (OldTpl);\r
+\r
   return Status;\r
 }\r