]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/Utility.c
EdkCompatibilityPkg: Remove EdkCompatibilityPkg
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / FrameworkHiiOnUefiHiiThunk / Utility.c
diff --git a/EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/Utility.c b/EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/Utility.c
deleted file mode 100644 (file)
index 93cd710..0000000
+++ /dev/null
@@ -1,891 +0,0 @@
-/** @file\r
-\r
-  This file contains the keyboard processing code to the HII database.\r
-\r
-Copyright (c) 2006 - 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
-\r
-**/\r
-\r
-\r
-#include "HiiDatabase.h"\r
-#include "HiiHandle.h"\r
-#include <Library/DebugLib.h>\r
-#include <Guid/ZeroGuid.h>\r
-\r
-CONST CHAR16 FrameworkReservedVarstoreName[] = FRAMEWORK_RESERVED_VARSTORE_NAME;\r
-\r
-/**\r
-  \r
-  This function returns a list of the package handles of the   \r
-  specified type that are currently active in the HII database. The   \r
-  pseudo-type EFI_HII_PACKAGE_TYPE_ALL will cause all package   \r
-  handles to be listed.\r
-\r
-  If HandleBufferLength is NULL, then ASSERT.\r
-  If HandleBuffer is NULL, the ASSERT.\r
-  If PackageType is EFI_HII_PACKAGE_TYPE_GUID and PackageGuid is\r
-  NULL, then ASSERT.\r
-  If PackageType is not EFI_HII_PACKAGE_TYPE_GUID and PackageGuid is not\r
-  NULL, then ASSERT.\r
-  \r
-  \r
-  @param PackageType          Specifies the package type of the packages\r
-                              to list or EFI_HII_PACKAGE_TYPE_ALL for\r
-                              all packages to be listed.\r
-  \r
-  @param PackageGuid          If PackageType is\r
-                              EFI_HII_PACKAGE_TYPE_GUID, then this is\r
-                              the pointer to the GUID which must match\r
-                              the Guid field of\r
-                              EFI_HII_PACKAGE_GUID_HEADER. Otherwise, it\r
-                              must be NULL.\r
-  \r
-  @param HandleBufferLength   On output, the length of the handle buffer\r
-                              that is required for the handles found.\r
-\r
-  @param HandleBuffer         On output, an array of EFI_HII_HANDLE  instances returned.\r
-                              The caller is responcible to free this pointer allocated.\r
-\r
-  @retval EFI_SUCCESS           The matching handles are outputted successfully.\r
-                                HandleBufferLength is updated with the actual length.\r
-  @retval EFI_OUT_OF_RESOURCES  Not enough resource to complete the operation.\r
-  @retval EFI_NOT_FOUND         No matching handle could not be found in database.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-ListPackageLists (\r
-  IN        UINT8                     PackageType,\r
-  IN CONST  EFI_GUID                  *PackageGuid,\r
-  IN OUT    UINTN                     *HandleBufferLength,\r
-  OUT       EFI_HII_HANDLE            **HandleBuffer\r
-  )\r
-{\r
-  EFI_STATUS          Status;\r
-  \r
-  ASSERT (HandleBufferLength != NULL);\r
-  ASSERT (HandleBuffer != NULL);\r
-  \r
-  *HandleBufferLength = 0;\r
-  *HandleBuffer       = NULL;\r
-\r
-  if (PackageType == EFI_HII_PACKAGE_TYPE_GUID) {\r
-    ASSERT (PackageGuid != NULL);\r
-  } else {\r
-    ASSERT (PackageGuid == NULL);\r
-  }\r
-\r
-  Status = mHiiDatabase->ListPackageLists (\r
-                           mHiiDatabase,\r
-                           PackageType,\r
-                           PackageGuid,\r
-                           HandleBufferLength,\r
-                           *HandleBuffer\r
-                           );\r
-  if (EFI_ERROR (Status) && (Status != EFI_BUFFER_TOO_SMALL)) {\r
-    //\r
-    // No packages is registered to UEFI HII Database, just return.\r
-    // \r
-    //\r
-    return Status;\r
-  }\r
-\r
-  *HandleBuffer = AllocateZeroPool (*HandleBufferLength);\r
-  \r
-  if (*HandleBuffer == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-  \r
-  return mHiiDatabase->ListPackageLists (\r
-                         mHiiDatabase,\r
-                         PackageType,\r
-                         PackageGuid,\r
-                         HandleBufferLength,\r
-                         *HandleBuffer\r
-                         );\r
-  \r
-}\r
-\r
-/**\r
-  Exports the contents of one or all package lists in the HII database into a buffer.\r
-\r
-  If Handle is not NULL and not a valid EFI_HII_HANDLE registered in the database, \r
-  then ASSERT.\r
-  If PackageListHeader is NULL, then ASSERT.\r
-  If PackageListSize is NULL, then ASSERT.\r
-\r
-  @param  Handle                 The HII Handle.\r
-  @param  PackageListHeader      A pointer to a buffer that will contain the results of \r
-                                 the export function.\r
-  @param  PackageListSize        On output, the length of the buffer that is required for the exported data.\r
-\r
-  @retval EFI_SUCCESS            Package exported.\r
-\r
-  @retval EFI_OUT_OF_RESOURCES   Not enought memory to complete the operations.\r
-\r
-**/\r
-EFI_STATUS \r
-EFIAPI\r
-ExportPackageLists (\r
-  IN EFI_HII_HANDLE                    Handle,\r
-  OUT EFI_HII_PACKAGE_LIST_HEADER      **PackageListHeader,\r
-  OUT UINTN                            *PackageListSize\r
-  )\r
-{\r
-  EFI_STATUS                       Status;\r
-  UINTN                            Size;\r
-  EFI_HII_PACKAGE_LIST_HEADER      *PackageListHdr;\r
-\r
-  ASSERT (PackageListSize != NULL);\r
-  ASSERT (PackageListHeader != NULL);\r
-\r
-  Size = 0;\r
-  PackageListHdr = NULL;\r
-  Status = mHiiDatabase->ExportPackageLists (\r
-                           mHiiDatabase,\r
-                           Handle,\r
-                           &Size,\r
-                           PackageListHdr\r
-                           );\r
-  ASSERT (Status != EFI_BUFFER_TOO_SMALL);\r
-  \r
-  if (Status == EFI_BUFFER_TOO_SMALL) {\r
-    PackageListHdr = AllocateZeroPool (Size);\r
-    \r
-    if (PackageListHeader == NULL) {\r
-      return EFI_OUT_OF_RESOURCES;\r
-    } else {\r
-      Status = mHiiDatabase->ExportPackageLists (\r
-                               mHiiDatabase,\r
-                               Handle,\r
-                               &Size,\r
-                               PackageListHdr\r
-                               );\r
-    }\r
-  }\r
-\r
-  if (!EFI_ERROR (Status)) {\r
-    *PackageListHeader = PackageListHdr;\r
-    *PackageListSize   = Size;\r
-  } else {\r
-    FreePool (PackageListHdr);\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-/**\r
-  Extract Hii package list GUID for given HII handle.\r
-\r
-  If HiiHandle could not be found in the HII database, then ASSERT.\r
-  If Guid is NULL, then ASSERT.\r
-\r
-  @param  Handle              Hii handle\r
-  @param  Guid                Package list GUID\r
-\r
-  @retval EFI_SUCCESS            Successfully extract GUID from Hii database.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-ExtractGuidFromHiiHandle (\r
-  IN      EFI_HII_HANDLE      Handle,\r
-  OUT     EFI_GUID            *Guid\r
-  )\r
-{\r
-  EFI_STATUS                   Status;\r
-  UINTN                        BufferSize;\r
-  EFI_HII_PACKAGE_LIST_HEADER  *HiiPackageList;\r
-\r
-  ASSERT (Guid != NULL);\r
-  ASSERT (Handle != NULL);\r
-\r
-  //\r
-  // Get HII PackageList\r
-  //\r
-  BufferSize = 0;\r
-  HiiPackageList = NULL;\r
-\r
-  Status = mHiiDatabase->ExportPackageLists (mHiiDatabase, Handle, &BufferSize, HiiPackageList);\r
-  ASSERT (Status != EFI_NOT_FOUND);\r
-  \r
-  if (Status == EFI_BUFFER_TOO_SMALL) {\r
-    HiiPackageList = AllocatePool (BufferSize);\r
-    ASSERT (HiiPackageList != NULL);\r
-\r
-    Status = mHiiDatabase->ExportPackageLists (mHiiDatabase, Handle, &BufferSize, HiiPackageList);\r
-  }\r
-  if (EFI_ERROR (Status)) {\r
-    FreePool (HiiPackageList);\r
-    return Status;\r
-  }\r
-\r
-  //\r
-  // Extract GUID\r
-  //\r
-  CopyGuid (Guid, &HiiPackageList->PackageListGuid);\r
-\r
-  FreePool (HiiPackageList);\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Find the corressponding UEFI HII Handle from a Framework HII Handle given.\r
-\r
-  @param Private      The HII Thunk Module Private context.\r
-  @param FwHiiHandle  The Framemwork HII Handle.\r
-\r
-  @return NULL        If Framework HII Handle is invalid.\r
-  @return The corresponding UEFI HII Handle.\r
-**/\r
-EFI_HII_HANDLE\r
-FwHiiHandleToUefiHiiHandle (\r
-  IN CONST HII_THUNK_PRIVATE_DATA      *Private,\r
-  IN FRAMEWORK_EFI_HII_HANDLE          FwHiiHandle\r
-  )\r
-{\r
-  HII_THUNK_CONTEXT            *ThunkContext;\r
-\r
-  ASSERT (FwHiiHandle != (FRAMEWORK_EFI_HII_HANDLE) 0);\r
-  ASSERT (Private != NULL);\r
-\r
-  ThunkContext = FwHiiHandleToThunkContext (Private, FwHiiHandle);\r
-\r
-  if (ThunkContext != NULL) {\r
-    return ThunkContext->UefiHiiHandle;\r
-  }\r
-  \r
-  return (EFI_HII_HANDLE) NULL;\r
-}\r
-\r
-\r
-/**\r
-  Find the corressponding HII Thunk Context from a Framework HII Handle given.\r
-\r
-  @param Private      The HII Thunk Module Private context.\r
-  @param FwHiiHandle  The Framemwork HII Handle.\r
-\r
-  @return NULL        If Framework HII Handle is invalid.\r
-  @return The corresponding HII Thunk Context.\r
-**/\r
-HII_THUNK_CONTEXT *\r
-FwHiiHandleToThunkContext (\r
-  IN CONST HII_THUNK_PRIVATE_DATA      *Private,\r
-  IN FRAMEWORK_EFI_HII_HANDLE          FwHiiHandle\r
-  )\r
-{\r
-  LIST_ENTRY                 *Link;\r
-  HII_THUNK_CONTEXT           *ThunkContext;\r
-\r
-\r
-  Link = GetFirstNode (&Private->ThunkContextListHead);\r
-\r
-  while (!IsNull (&Private->ThunkContextListHead, Link)) {\r
-    ThunkContext = HII_THUNK_CONTEXT_FROM_LINK (Link);\r
-\r
-    if (FwHiiHandle == ThunkContext->FwHiiHandle) {\r
-      return ThunkContext;\r
-    }\r
-\r
-    Link = GetNextNode (&Private->ThunkContextListHead, Link);\r
-  }\r
-\r
-  return NULL;\r
-}\r
-\r
-/**\r
-  Find the corressponding HII Thunk Context from a UEFI HII Handle given.\r
-\r
-  @param Private        The HII Thunk Module Private context.\r
-  @param UefiHiiHandle  The UEFI HII Handle.\r
-\r
-  @return NULL        If UEFI HII Handle is invalid.\r
-  @return The corresponding HII Thunk Context.\r
-**/\r
-HII_THUNK_CONTEXT *\r
-UefiHiiHandleToThunkContext (\r
-  IN CONST HII_THUNK_PRIVATE_DATA     *Private,\r
-  IN EFI_HII_HANDLE                   UefiHiiHandle\r
-  )\r
-{\r
-  LIST_ENTRY                 *Link;\r
-  HII_THUNK_CONTEXT           *ThunkContext;\r
-\r
-  Link = GetFirstNode (&Private->ThunkContextListHead);\r
-\r
-  while (!IsNull (&Private->ThunkContextListHead, Link)) {\r
-    ThunkContext = HII_THUNK_CONTEXT_FROM_LINK (Link);\r
-\r
-    if (UefiHiiHandle == ThunkContext->UefiHiiHandle) {\r
-      return ThunkContext;\r
-    }\r
-    Link = GetNextNode (&Private->ThunkContextListHead, Link);\r
-  }\r
-\r
-  return NULL;\r
-}\r
-\r
-/**\r
-  Find the corressponding HII Thunk Context from a Tag GUID.\r
-\r
-  @param Private      The HII Thunk Module Private context.\r
-  @param Guid         The Tag GUID.\r
-\r
-  @return NULL        No HII Thunk Context matched the Tag GUID.\r
-  @return The corresponding HII Thunk Context.\r
-**/\r
-HII_THUNK_CONTEXT *\r
-TagGuidToIfrPackThunkContext (\r
-  IN CONST HII_THUNK_PRIVATE_DATA *Private,\r
-  IN CONST EFI_GUID                   *Guid\r
-  )\r
-{\r
-  LIST_ENTRY                 *Link;\r
-  HII_THUNK_CONTEXT           *ThunkContext;\r
-\r
-  Link = GetFirstNode (&Private->ThunkContextListHead);\r
-\r
-  while (!IsNull (&Private->ThunkContextListHead, Link)) {\r
-    ThunkContext = HII_THUNK_CONTEXT_FROM_LINK (Link);\r
-\r
-    if (CompareGuid (Guid, &ThunkContext->TagGuid) && (ThunkContext->IfrPackageCount != 0)) {\r
-      return ThunkContext;\r
-    }\r
-\r
-    Link = GetNextNode (&Private->ThunkContextListHead, Link);\r
-  }\r
-\r
-  return NULL;\r
-  \r
-}\r
-\r
-/**\r
-  Clean up the HII Thunk Context for a UEFI HII Handle.\r
-\r
-  @param Private        The HII Thunk Module Private context.\r
-  @param UefiHiiHandle  The UEFI HII Handle.\r
-\r
-**/\r
-VOID\r
-DestroyThunkContextForUefiHiiHandle (\r
-  IN HII_THUNK_PRIVATE_DATA     *Private,\r
-  IN EFI_HII_HANDLE             UefiHiiHandle\r
-  )\r
-{\r
-  HII_THUNK_CONTEXT     *ThunkContext;\r
-\r
-  ThunkContext = UefiHiiHandleToThunkContext (Private, UefiHiiHandle);\r
-  ASSERT (ThunkContext != NULL);\r
-\r
-  DestroyThunkContext (ThunkContext);\r
-}\r
-\r
-\r
-/**\r
-  This function create a HII_THUNK_CONTEXT for the input UEFI HiiHandle\r
-  that is created when a package list registered by a module calling \r
-  EFI_HII_DATABASE_PROTOCOL.NewPackageList. \r
-  This function records the PackageListGuid of EFI_HII_PACKAGE_LIST_HEADER \r
-  into the TagGuid of the created HII_THUNK_CONTEXT.\r
-\r
-  @param UefiHiiHandle  The UEFI HII Handle.\r
-  \r
-  @return the new created Hii thunk context.\r
-\r
-**/\r
-HII_THUNK_CONTEXT *\r
-CreateThunkContextForUefiHiiHandle (\r
-  IN  EFI_HII_HANDLE             UefiHiiHandle\r
-  )\r
-{\r
-  EFI_STATUS            Status;\r
-  EFI_GUID              PackageGuid;\r
-  HII_THUNK_CONTEXT      *ThunkContext;\r
-\r
-  ThunkContext = AllocateZeroPool (sizeof (*ThunkContext));\r
-  ASSERT (ThunkContext != NULL);\r
-  \r
-  ThunkContext->Signature = HII_THUNK_CONTEXT_SIGNATURE;\r
-\r
-  Status = AllocateHiiHandle (&ThunkContext->FwHiiHandle);\r
-  if (EFI_ERROR (Status)) {\r
-    return NULL;\r
-  }\r
-  \r
-  ThunkContext->UefiHiiHandle = UefiHiiHandle;\r
-  \r
-  Status = ExtractGuidFromHiiHandle (UefiHiiHandle, &PackageGuid);\r
-  ASSERT_EFI_ERROR (Status);\r
-  \r
-  CopyGuid(&ThunkContext->TagGuid, &PackageGuid);\r
-\r
-  return ThunkContext;\r
-}\r
-\r
-\r
-/**\r
-  Get the number of HII Package for a Package type.\r
-\r
-  @param PackageListHeader      The Package List.\r
-  @param PackageType            The Package Type.\r
-\r
-  @return The number of Package for given type.\r
-**/\r
-UINTN\r
-GetPackageCountByType (\r
-  IN CONST EFI_HII_PACKAGE_LIST_HEADER     *PackageListHeader,\r
-  IN       UINT8                           PackageType\r
-  )\r
-{\r
-  UINTN                     Count;\r
-  EFI_HII_PACKAGE_HEADER    *PackageHeader;\r
-\r
-  PackageHeader = (EFI_HII_PACKAGE_HEADER *) ((UINT8 *) PackageListHeader + sizeof (EFI_HII_PACKAGE_LIST_HEADER));\r
-  Count = 0;\r
-  \r
-  while (PackageHeader->Type != EFI_HII_PACKAGE_END) {\r
-    if (PackageHeader->Type == PackageType ) {\r
-      Count++;\r
-    }\r
-    PackageHeader = (EFI_HII_PACKAGE_HEADER *) ((UINT8 *) PackageHeader + PackageHeader->Length);\r
-  }\r
-  \r
-  \r
-  return Count;\r
-}\r
-\r
-/**\r
-  Get the Form Package from a Framework Package List.\r
-\r
-  @param Packages               Framework Package List.\r
-\r
-  @return The Form Package Header found.\r
-**/\r
-EFI_HII_PACKAGE_HEADER *\r
-GetIfrPackage (\r
-  IN CONST EFI_HII_PACKAGES               *Packages\r
-  )\r
-{\r
-  UINTN                         Index;\r
-  TIANO_AUTOGEN_PACKAGES_HEADER **TianoAutogenPackageHdrArray;\r
-\r
-  ASSERT (Packages != NULL);\r
-\r
-  TianoAutogenPackageHdrArray = (TIANO_AUTOGEN_PACKAGES_HEADER **) (((UINT8 *) &Packages->GuidId) + sizeof (Packages->GuidId));\r
-  \r
-  for (Index = 0; Index < Packages->NumberOfPackages; Index++) {\r
-    //\r
-    // The current UEFI HII build tool generate a binary in the format defined by \r
-    // TIANO_AUTOGEN_PACKAGES_HEADER. We assume that all packages generated in\r
-    // this binary is with same package type. So the returned IfrPackageCount and StringPackageCount\r
-    // may not be the exact number of valid package number in the binary generated \r
-    // by HII Build tool.\r
-    //\r
-    switch (TianoAutogenPackageHdrArray[Index]->FrameworkPackageHeader.Type) {\r
-      case EFI_HII_IFR:\r
-        return &TianoAutogenPackageHdrArray[Index]->PackageHeader;\r
-        break;\r
-      case EFI_HII_STRING:\r
-      case EFI_HII_FONT:\r
-        break;\r
-\r
-      default:\r
-        ASSERT (FALSE);\r
-        return NULL;\r
-        break;\r
-    }\r
-  }\r
-\r
-  return NULL;\r
-}\r
-\r
-/**\r
-  Get FormSet GUID.\r
-\r
-  ASSERT if no FormSet Opcode is found.\r
-\r
-  @param Packages             Form Framework Package.\r
-  @param FormSetGuid          Return the FormSet Guid.\r
-\r
-**/\r
-VOID\r
-GetFormSetGuid (\r
-  IN  EFI_HII_PACKAGE_HEADER  *Package,\r
-  OUT EFI_GUID                *FormSetGuid\r
-  )\r
-{\r
-  UINTN                         Offset;\r
-  EFI_IFR_OP_HEADER             *OpCode;\r
-  EFI_IFR_FORM_SET              *FormSet;\r
-\r
-  Offset = sizeof (EFI_HII_PACKAGE_HEADER);\r
-  while (Offset < Package->Length) {\r
-    OpCode = (EFI_IFR_OP_HEADER *)((UINT8 *) Package + Offset);\r
-\r
-    switch (OpCode->OpCode) {\r
-    case EFI_IFR_FORM_SET_OP:\r
-      FormSet = (EFI_IFR_FORM_SET *) OpCode;\r
-      CopyGuid (FormSetGuid, (EFI_GUID *)(VOID *)&FormSet->Guid);\r
-      return;\r
-      \r
-      default:\r
-        break;\r
-      \r
-    }\r
-    Offset += OpCode->Length;\r
-  }\r
-\r
-  //\r
-  // A proper IFR must have a formset opcode.\r
-  //\r
-  ASSERT (FALSE);\r
-\r
-}\r
-\r
-/**\r
-  Creat a Thunk Context.\r
-\r
-  ASSERT if no FormSet Opcode is found.\r
-\r
-  @param Private             The HII Thunk Private Context.\r
-  @param StringPackageCount  The String package count.\r
-  @param IfrPackageCount     The IFR Package count.\r
-\r
-  @return  A newly created Thunk Context.\r
-  @retval  NULL  No resource to create a new Thunk Context.\r
-**/\r
-HII_THUNK_CONTEXT *\r
-CreateThunkContext (\r
-  IN  HII_THUNK_PRIVATE_DATA      *Private,\r
-  IN  UINTN                       StringPackageCount,\r
-  IN  UINTN                       IfrPackageCount\r
-  )\r
-{\r
-  EFI_STATUS                   Status;\r
-  HII_THUNK_CONTEXT            *ThunkContext;\r
-\r
-  ThunkContext = AllocateZeroPool (sizeof (HII_THUNK_CONTEXT));\r
-  ASSERT (ThunkContext != NULL);\r
-  \r
-  ThunkContext->Signature = HII_THUNK_CONTEXT_SIGNATURE;\r
-  ThunkContext->IfrPackageCount = IfrPackageCount;\r
-  ThunkContext->StringPackageCount = StringPackageCount;\r
-  Status = AllocateHiiHandle (&ThunkContext->FwHiiHandle);\r
-  if (EFI_ERROR (Status)) {\r
-    return NULL;\r
-  }\r
-\r
-  return ThunkContext;\r
-     \r
-}\r
-\r
-/**\r
-  Destroy the Thunk Context and free up all resource.\r
-\r
-  @param ThunkContext        The HII Thunk Private Context to be freed.\r
-\r
-**/\r
-VOID\r
-DestroyThunkContext (\r
-  IN HII_THUNK_CONTEXT          *ThunkContext\r
-  )\r
-{\r
-  ASSERT (ThunkContext != NULL);\r
-\r
-  FreeHiiHandle (ThunkContext->FwHiiHandle);\r
-\r
-  RemoveEntryList (&ThunkContext->Link);\r
-\r
-  if (ThunkContext->FormSet != NULL) {\r
-    DestroyFormSet (ThunkContext->FormSet);\r
-  }\r
-\r
-  FreePool (ThunkContext);\r
-}\r
-\r
-/**\r
-  Get the FormSet's Default Varstore ID based on the rule (Descending Priority):\r
-\r
-  1) If VarStore ID of FRAMEWORK_RESERVED_VARSTORE_ID (0x01) is found, Var Store ID is used.\r
-  2) If VarStore ID of FRAMEWORK_RESERVED_VARSTORE_ID is not found, First Var Store ID is used \r
-     as the default Var Store ID.\r
-\r
-  @param FormSet The Form Set. The Default Varstore ID is updated if found.\r
-  \r
-**/\r
-VOID\r
-GetFormsetDefaultVarstoreId (\r
-  IN OUT FORM_BROWSER_FORMSET  * FormSet\r
-  )\r
-{\r
-  LIST_ENTRY             *StorageList;\r
-  FORMSET_STORAGE        *Storage;\r
-\r
-  //\r
-  // VarStoreId 0 is invalid in UEFI IFR.\r
-  //\r
-  FormSet->DefaultVarStoreId = 0;\r
-  StorageList = GetFirstNode (&FormSet->StorageListHead);\r
-\r
-  while (!IsNull (&FormSet->StorageListHead, StorageList)) {\r
-    Storage = FORMSET_STORAGE_FROM_LINK (StorageList);\r
-\r
-    DEBUG ((EFI_D_INFO, "FormSet %g: Found Varstore ID %x Name %s Size 0x%x\n", &FormSet->Guid, Storage->VarStoreId, Storage->Name, Storage->Size));\r
-\r
-    if (Storage->VarStoreId == FRAMEWORK_RESERVED_VARSTORE_ID) {\r
-      //\r
-      // 1) If VarStore ID of FRAMEWORK_RESERVED_VARSTORE_ID (0x01) is found, Var Store ID is used.\r
-      //\r
-      FormSet->DefaultVarStoreId = FRAMEWORK_RESERVED_VARSTORE_ID;\r
-      break;\r
-    }\r
-\r
-    StorageList = GetNextNode (&FormSet->StorageListHead, StorageList);\r
-  }\r
-\r
-  if (FormSet->DefaultVarStoreId != FRAMEWORK_RESERVED_VARSTORE_ID) {\r
-    //\r
-    // \r
-    // 2) If VarStore ID of FRAMEWORK_RESERVED_VARSTORE_ID is not found, First Var Store ID is used \r
-    //   as the default Var Store ID.\r
-    //\r
-    StorageList = GetFirstNode (&FormSet->StorageListHead);\r
-    if (!IsNull (&FormSet->StorageListHead, StorageList)) {\r
-      Storage = FORMSET_STORAGE_FROM_LINK (StorageList);\r
-      FormSet->DefaultVarStoreId = Storage->VarStoreId;\r
-    }\r
-    \r
-  }\r
-\r
-  if (FormSet->DefaultVarStoreId == 0) {\r
-    DEBUG ((EFI_D_INFO, "FormSet %g: No Varstore Found\n", &FormSet->Guid));\r
-  } \r
-  \r
-  return;\r
-}\r
-\r
-/**\r
-  Fetch the Ifr binary data of a FormSet.\r
-\r
-  @param  Handle                 PackageList Handle\r
-  @param  FormSetGuid            GUID of a formset. If not specified (NULL or zero\r
-                                 GUID), take the first FormSet found in package\r
-                                 list.\r
-  @param  BinaryLength           The length of the FormSet IFR binary.\r
-  @param  BinaryData             The buffer designed to receive the FormSet.\r
-\r
-  @retval EFI_SUCCESS            Buffer filled with the requested FormSet.\r
-                                 BufferLength was updated.\r
-  @retval EFI_INVALID_PARAMETER  The handle is unknown.\r
-  @retval EFI_NOT_FOUND          A form or FormSet on the requested handle cannot\r
-                                 be found with the requested FormId.\r
-\r
-**/\r
-EFI_STATUS\r
-GetIfrBinaryData (\r
-  IN  EFI_HII_HANDLE   Handle,\r
-  IN OUT EFI_GUID      *FormSetGuid,\r
-  OUT UINTN            *BinaryLength,\r
-  OUT UINT8            **BinaryData\r
-  )\r
-{\r
-  EFI_STATUS                   Status;\r
-  EFI_HII_PACKAGE_LIST_HEADER  *HiiPackageList;\r
-  UINTN                        BufferSize;\r
-  UINT8                        *Package;\r
-  UINT8                        *OpCodeData;\r
-  UINT32                       Offset;\r
-  UINT32                       Offset2;\r
-  BOOLEAN                      ReturnDefault;\r
-  UINT32                       PackageListLength;\r
-  EFI_HII_PACKAGE_HEADER       PackageHeader;\r
-\r
-  OpCodeData = NULL;\r
-  Package = NULL;\r
-  ZeroMem (&PackageHeader, sizeof (EFI_HII_PACKAGE_HEADER));;\r
-\r
-  //\r
-  // if FormSetGuid is NULL or zero GUID, return first FormSet in the package list\r
-  //\r
-  if (FormSetGuid == NULL || CompareGuid (FormSetGuid, &gZeroGuid)) {\r
-    ReturnDefault = TRUE;\r
-  } else {\r
-    ReturnDefault = FALSE;\r
-  }\r
-\r
-  //\r
-  // Get HII PackageList\r
-  //\r
-  BufferSize = 0;\r
-  HiiPackageList = NULL;\r
-  Status = mHiiDatabase->ExportPackageLists (mHiiDatabase, Handle, &BufferSize, HiiPackageList);\r
-  if (Status == EFI_BUFFER_TOO_SMALL) {\r
-    HiiPackageList = AllocatePool (BufferSize);\r
-    ASSERT (HiiPackageList != NULL);\r
-\r
-    Status = mHiiDatabase->ExportPackageLists (mHiiDatabase, Handle, &BufferSize, HiiPackageList);\r
-  }\r
-  if (EFI_ERROR (Status) || HiiPackageList == NULL) {\r
-    return EFI_NOT_FOUND;\r
-  }\r
-\r
-  //\r
-  // Get Form package from this HII package List\r
-  //\r
-  Offset = sizeof (EFI_HII_PACKAGE_LIST_HEADER);\r
-  Offset2 = 0;\r
-  CopyMem (&PackageListLength, &HiiPackageList->PackageLength, sizeof (UINT32));\r
-\r
-  while (Offset < PackageListLength) {\r
-    Package = ((UINT8 *) HiiPackageList) + Offset;\r
-    CopyMem (&PackageHeader, Package, sizeof (EFI_HII_PACKAGE_HEADER));\r
-\r
-    if (PackageHeader.Type == EFI_HII_PACKAGE_FORMS) {\r
-      //\r
-      // Search FormSet in this Form Package\r
-      //\r
-      Offset2 = sizeof (EFI_HII_PACKAGE_HEADER);\r
-      while (Offset2 < PackageHeader.Length) {\r
-        OpCodeData = Package + Offset2;\r
-\r
-        if (((EFI_IFR_OP_HEADER *) OpCodeData)->OpCode == EFI_IFR_FORM_SET_OP) {\r
-          //\r
-          // Check whether return default FormSet\r
-          //\r
-          if (ReturnDefault) {\r
-            break;\r
-          }\r
-\r
-          //\r
-          // FormSet GUID is specified, check it\r
-          //\r
-          if (CompareGuid (FormSetGuid, (EFI_GUID *)(OpCodeData + sizeof (EFI_IFR_OP_HEADER)))) {\r
-            break;\r
-          }\r
-        }\r
-\r
-        Offset2 += ((EFI_IFR_OP_HEADER *) OpCodeData)->Length;\r
-      }\r
-\r
-      if (Offset2 < PackageHeader.Length) {\r
-        //\r
-        // Target formset found\r
-        //\r
-        break;\r
-      }\r
-    }\r
-\r
-    Offset += PackageHeader.Length;\r
-  }\r
-\r
-  if (Offset >= PackageListLength) {\r
-    //\r
-    // Form package not found in this Package List\r
-    //\r
-    gBS->FreePool (HiiPackageList);\r
-    return EFI_NOT_FOUND;\r
-  }\r
-\r
-  if (ReturnDefault && FormSetGuid != NULL) {\r
-    //\r
-    // Return the default FormSet GUID\r
-    //\r
-    CopyMem (FormSetGuid, &((EFI_IFR_FORM_SET *) OpCodeData)->Guid, sizeof (EFI_GUID));\r
-  }\r
-\r
-  //\r
-  // To determine the length of a whole FormSet IFR binary, one have to parse all the Opcodes\r
-  // in this FormSet; So, here just simply copy the data from start of a FormSet to the end\r
-  // of the Form Package.\r
-  //\r
-  *BinaryLength = PackageHeader.Length - Offset2;\r
-  *BinaryData = AllocateCopyPool (*BinaryLength, OpCodeData);\r
-\r
-  gBS->FreePool (HiiPackageList);\r
-\r
-  if (*BinaryData == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Initialize the internal data structure of a FormSet.\r
-\r
-  @param  Handle                 PackageList Handle\r
-  @param  FormSetGuid            GUID of a formset. If not specified (NULL or zero\r
-                                 GUID), take the first FormSet found in package\r
-                                 list.\r
-  @param  FormSet                FormSet data structure.\r
-\r
-  @retval EFI_SUCCESS            The function completed successfully.\r
-  @retval EFI_NOT_FOUND          The specified FormSet could not be found.\r
-\r
-**/\r
-EFI_STATUS\r
-InitializeFormSet (\r
-  IN  EFI_HII_HANDLE                   Handle,\r
-  IN OUT EFI_GUID                      *FormSetGuid,\r
-  OUT FORM_BROWSER_FORMSET             *FormSet\r
-  )\r
-{\r
-  EFI_STATUS                Status;\r
-\r
-  Status = GetIfrBinaryData (Handle, FormSetGuid, &FormSet->IfrBinaryLength, &FormSet->IfrBinaryData);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  FormSet->HiiHandle = Handle;\r
-  CopyMem (&FormSet->Guid, FormSetGuid, sizeof (EFI_GUID));\r
-\r
-  //\r
-  // Parse the IFR binary OpCodes\r
-  //\r
-  Status = ParseOpCodes (FormSet);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  GetFormsetDefaultVarstoreId (FormSet);\r
-  return Status;\r
-}\r
-\r
-/**\r
-  Parse the Form Package and build a FORM_BROWSER_FORMSET structure.\r
-\r
-  @param  UefiHiiHandle          PackageList Handle\r
-\r
-  @return A pointer to FORM_BROWSER_FORMSET.\r
-\r
-**/\r
-FORM_BROWSER_FORMSET *\r
-ParseFormSet (\r
-  IN EFI_HII_HANDLE   UefiHiiHandle\r
-  )\r
-{\r
-  FORM_BROWSER_FORMSET  *FormSet;\r
-  EFI_GUID              FormSetGuid;\r
-  EFI_STATUS            Status;\r
-  \r
-  FormSet = AllocateZeroPool (sizeof (FORM_BROWSER_FORMSET));    \r
-  ASSERT (FormSet != NULL);\r
-\r
-  CopyGuid (&FormSetGuid, &gZeroGuid);\r
-  Status = InitializeFormSet (UefiHiiHandle, &FormSetGuid, FormSet);\r
-  if (EFI_ERROR (Status)) {\r
-    FreePool (FormSet);\r
-    return NULL;\r
-  }\r
-\r
-  return FormSet;\r
-}\r
-\r