]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Fix K8 issues in HiiDataBase
authorlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 18 May 2009 12:12:56 +0000 (12:12 +0000)
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 18 May 2009 12:12:56 +0000 (12:12 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8325 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Library/UefiHiiLib/HiiLib.c
MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c
MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabase.h

index 06c345b128aef3cd23318d3fc1325ba07767fe2f..df73b7b3a19359b5f13f380b9e10b57750bb0473 100644 (file)
@@ -921,16 +921,17 @@ InternalHiiGetValueOfNumber (
 }\r
 \r
 /**\r
-  This function shares the same logic to parse ConfigAltResp string \r
-  for setting default value and validating current setting.\r
-\r
-  @param ConfigResp         \r
-  @param HiiPackageList     \r
-  @param PackageListLength  \r
-  @param VarGuid\r
-  @param VarName\r
+  This internal function parses IFR data to validate current setting.\r
+\r
+  @param ConfigResp         ConfigResp string contains the current setting.\r
+  @param HiiPackageList     Point to Hii package list.\r
+  @param PackageListLength  The length of the pacakge.\r
+  @param VarGuid            Guid of the buffer storage.\r
+  @param VarName            Name of the buffer storage.\r
   \r
-  @retval EFI_SUCCESS\r
+  @retval EFI_SUCCESS            The current setting is valid.\r
+  @retval EFI_OUT_OF_RESOURCES   The memory is not enough.\r
+  @retval EFI_INVALID_PARAMETER  The config string or the Hii package is invalid.\r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
@@ -1214,7 +1215,7 @@ InternalHiiValidateCurrentSetting (
           }\r
           //\r
           // Find the matched VarStoreId to the input VarGuid and VarName\r
-          //            \r
+          //\r
           IfrVarStore = (EFI_IFR_VARSTORE *) IfrOpHdr;\r
           if (CompareGuid ((EFI_GUID *) (VOID *) &IfrVarStore->Guid, VarGuid)) {\r
             VarStoreName = (CHAR8 *) IfrVarStore->Name;\r
@@ -1244,10 +1245,17 @@ InternalHiiValidateCurrentSetting (
           break;\r
         case EFI_IFR_ONE_OF_OP:\r
           //\r
-          // Check whether current value is the one of option. \r
+          // Check whether current value is the one of option.\r
           //\r
 \r
           //\r
+          // OneOf question is not in IFR Form. This IFR form is not valid. \r
+          //\r
+          if (IfrVarStore == NULL) {\r
+            Status = EFI_INVALID_PARAMETER;\r
+            goto Done;\r
+          }\r
+          // \r
           // Check whether this question is for the requested varstore.\r
           //\r
           IfrOneOf = (EFI_IFR_ONE_OF *) IfrOpHdr;\r
@@ -1298,6 +1306,13 @@ InternalHiiValidateCurrentSetting (
           // Check the current value is in the numeric range.\r
           //\r
 \r
+          //\r
+          // Numeric question is not in IFR Form. This IFR form is not valid. \r
+          //\r
+          if (IfrVarStore == NULL) {\r
+            Status = EFI_INVALID_PARAMETER;\r
+            goto Done;\r
+          }\r
           //\r
           // Check whether this question is for the requested varstore.\r
           //\r
@@ -1381,6 +1396,14 @@ InternalHiiValidateCurrentSetting (
           // Check value is BOOLEAN type, only 0 and 1 is valid.\r
           //\r
 \r
+          //\r
+          // CheckBox question is not in IFR Form. This IFR form is not valid. \r
+          //\r
+          if (IfrVarStore == NULL) {\r
+            Status = EFI_INVALID_PARAMETER;\r
+            goto Done;\r
+          }\r
+\r
           //\r
           // Check whether this question is for the requested varstore.\r
           //\r
@@ -1428,6 +1451,14 @@ InternalHiiValidateCurrentSetting (
           // Check current string length is less than maxsize\r
           //\r
 \r
+          //\r
+          // CheckBox question is not in IFR Form. This IFR form is not valid. \r
+          //\r
+          if (IfrVarStore == NULL) {\r
+            Status = EFI_INVALID_PARAMETER;\r
+            goto Done;\r
+          }\r
+\r
           //\r
           // Check whether this question is for the requested varstore.\r
           //\r
@@ -1558,9 +1589,9 @@ Done:
 }\r
 \r
 /**\r
-  This function shares the same logic to parse ConfigAltResp string \r
-  for setting default value and validating current setting.\r
-  \r
+  This function parses the input ConfigRequest string and its matched IFR code\r
+  string for setting default value and validating current setting.\r
+\r
   1. For setting default action, Reset the default value specified by DefaultId \r
   to the driver configuration got by Request string.\r
   2. For validating current setting, Validate the current configuration \r
index 2f5118e51268b58c661aa1454045429c9ad39027..665b951869d1a15e110c63a56da67df5a0fd8aba 100644 (file)
@@ -577,6 +577,10 @@ MergeDefaultString (
                                      SizeAltCfgResp + StrSize (StringPtrDefault),\r
                                      (VOID *) (*AltCfgResp)\r
                                      );\r
+        if (*AltCfgResp == NULL) {\r
+          FreePool (AltConfigHdr);\r
+          return EFI_OUT_OF_RESOURCES;\r
+        }\r
         StrCat (*AltCfgResp, StringPtrDefault);\r
         break;\r
       } else {\r
@@ -594,11 +598,12 @@ MergeDefaultString (
     \r
     //\r
     // Find next AltCfg String\r
-    //    \r
+    //\r
     *(AltConfigHdr + HeaderLength) = L'\0';\r
     StringPtrDefault = StrStr (StringPtrDefault + 1, AltConfigHdr);    \r
   }\r
-\r
+  \r
+  FreePool (AltConfigHdr);\r
   return EFI_SUCCESS;  \r
 }\r
 \r
@@ -796,7 +801,7 @@ ParseIfrData (
   IN     EFI_STRING          ConfigHdr,\r
   IN     IFR_BLOCK_DATA      *RequestBlockArray,\r
   IN OUT IFR_VARSTORAGE_DATA *VarStorageData,\r
-  OUT    IFR_DEFAULT_DATA    **PIfrDefaultIdArray\r
+  OUT    IFR_DEFAULT_DATA    *DefaultIdArray\r
   )\r
 {\r
   EFI_STATUS               Status;\r
@@ -810,7 +815,6 @@ ParseIfrData (
   EFI_IFR_CHECKBOX         *IfrCheckBox;\r
   EFI_IFR_PASSWORD         *IfrPassword;\r
   EFI_IFR_STRING           *IfrString;\r
-  IFR_DEFAULT_DATA         *DefaultIdArray;\r
   IFR_DEFAULT_DATA         *DefaultData;\r
   IFR_BLOCK_DATA           *BlockData;\r
   CHAR16                   *VarStoreName;\r
@@ -823,9 +827,6 @@ ParseIfrData (
   EFI_STRING               TempStr;\r
   UINTN                    LengthString;\r
 \r
-  //\r
-  // Initialize DefaultIdArray to store the map between DeaultId and DefaultName\r
-  //\r
   LengthString     = 0;\r
   Status           = EFI_SUCCESS;\r
   GuidStr          = NULL;\r
@@ -833,11 +834,6 @@ ParseIfrData (
   TempStr          = NULL;\r
   BlockData        = NULL;\r
   DefaultData      = NULL;\r
-  DefaultIdArray   = (IFR_DEFAULT_DATA *) AllocateZeroPool (sizeof (IFR_DEFAULT_DATA));\r
-  if (DefaultIdArray == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-  InitializeListHead (&DefaultIdArray->Entry);\r
 \r
   //\r
   // Go through the form package to parse OpCode one by one.\r
@@ -935,6 +931,13 @@ ParseIfrData (
       // Numeric and OneOf has the same opcode structure.\r
       //\r
 \r
+      //\r
+      // Numeric and OneOf question is not in IFR Form. This IFR form is not valid. \r
+      //\r
+      if (VarStorageData->Size == 0) {\r
+        Status = EFI_INVALID_PARAMETER;\r
+        goto Done;\r
+      }\r
       //\r
       // Check whether this question is for the requested varstore.\r
       //\r
@@ -992,7 +995,14 @@ ParseIfrData (
       // width by EFI_IFR_ORDERED_LIST MaxContainers * OneofOption Type\r
       // no default value and default id, how to define its default value?\r
       //\r
-      \r
+\r
+      //\r
+      // OrderedList question is not in IFR Form. This IFR form is not valid. \r
+      //\r
+      if (VarStorageData->Size == 0) {\r
+        Status = EFI_INVALID_PARAMETER;\r
+        goto Done;\r
+      }\r
       //\r
       // Check whether this question is for the requested varstore.\r
       //\r
@@ -1056,6 +1066,13 @@ ParseIfrData (
       // default id by DeaultOption DefaultId can override CheckBox Flags and Default value.\r
       // \r
 \r
+      //\r
+      // CheckBox question is not in IFR Form. This IFR form is not valid. \r
+      //\r
+      if (VarStorageData->Size == 0) {\r
+        Status = EFI_INVALID_PARAMETER;\r
+        goto Done;\r
+      }\r
       //\r
       // Check whether this question is for the requested varstore.\r
       //\r
@@ -1170,6 +1187,13 @@ ParseIfrData (
       // no default value, only block array\r
       //\r
 \r
+      //\r
+      // String question is not in IFR Form. This IFR form is not valid. \r
+      //\r
+      if (VarStorageData->Size == 0) {\r
+        Status = EFI_INVALID_PARAMETER;\r
+        goto Done;\r
+      }\r
       //\r
       // Check whether this question is for the requested varstore.\r
       //\r
@@ -1234,6 +1258,13 @@ ParseIfrData (
       // no default value, only block array\r
       //\r
 \r
+      //\r
+      // Password question is not in IFR Form. This IFR form is not valid. \r
+      //\r
+      if (VarStorageData->Size == 0) {\r
+        Status = EFI_INVALID_PARAMETER;\r
+        goto Done;\r
+      }\r
       //\r
       // Check whether this question is for the requested varstore.\r
       //\r
@@ -1424,7 +1455,7 @@ ParseIfrData (
       break;\r
     case EFI_IFR_END_OP:\r
       //\r
-      // End Opcode is for Var.\r
+      // End Opcode is for Var question.\r
       //\r
       if (BlockData != NULL && BlockData->Scope > 0) {\r
         BlockData->Scope--;\r
@@ -1441,11 +1472,6 @@ ParseIfrData (
   }\r
 \r
 Done:\r
-  //\r
-  // Set the defualt ID array.\r
-  //\r
-  *PIfrDefaultIdArray = DefaultIdArray;\r
-\r
   return Status;  \r
 }\r
 \r
@@ -1456,7 +1482,7 @@ Done:
   When Request points to NULL string, the request string and default value string \r
   for each varstore in form package will return. \r
 \r
-  @param  HiiHandle              Hii Handle which Hii Packages are registered.\r
+  @param  DataBaseRecord         The DataBaseRecord instance contains the found Hii handle and package.\r
   @param  DevicePath             Device Path which Hii Config Access Protocol is registered.\r
   @param  Request                Pointer to a null-terminated Unicode string in\r
                                  <ConfigRequest> format. When it doesn't contain\r
@@ -1486,24 +1512,22 @@ Done:
 EFI_STATUS\r
 EFIAPI\r
 GetFullStringFromHiiFormPackages (\r
-  IN     EFI_HII_HANDLE             HiiHandle,\r
+  IN     HII_DATABASE_RECORD        *DataBaseRecord,\r
   IN     EFI_DEVICE_PATH_PROTOCOL   *DevicePath,\r
   IN OUT EFI_STRING                 *Request,\r
   IN OUT EFI_STRING                 *AltCfgResp\r
   )\r
 {\r
   EFI_STATUS                   Status;\r
-  EFI_HII_PACKAGE_LIST_HEADER  *HiiPackageList;\r
-  UINT32                       PackageListLength;  \r
-  UINTN                        BufferSize;\r
+  UINT8                        *HiiFormPackage;\r
+  UINTN                        PackageSize;\r
+  UINTN                        ResultSize;\r
   IFR_BLOCK_DATA               *RequestBlockArray;\r
   IFR_BLOCK_DATA               *BlockData;\r
   IFR_BLOCK_DATA               *NextBlockData;\r
   IFR_DEFAULT_DATA             *DefaultValueData;\r
   IFR_DEFAULT_DATA             *DefaultId;\r
   IFR_DEFAULT_DATA             *DefaultIdArray;\r
-  EFI_HII_PACKAGE_HEADER       PacakgeHeader;\r
-  UINT32                       PackageOffset;\r
   IFR_VARSTORAGE_DATA          *VarStorageData;\r
   EFI_STRING                   DefaultAltCfgResp;\r
   EFI_STRING                   FullConfigRequest;\r
@@ -1524,63 +1548,60 @@ GetFullStringFromHiiFormPackages (
   // Initialize the local variables.\r
   //\r
   RequestBlockArray = NULL;\r
+  DefaultIdArray    = NULL;\r
   VarStorageData    = NULL;\r
   DefaultAltCfgResp = NULL;\r
   FullConfigRequest = NULL;\r
   ConfigHdr         = NULL;\r
-  DefaultIdArray    = NULL;\r
   GuidStr           = NULL;\r
   NameStr           = NULL;\r
   PathStr           = NULL;\r
-\r
-  //\r
-  // 1. Get HiiPackage by HiiHandle\r
-  //\r
-  BufferSize      = 0;\r
-  HiiPackageList  = NULL;\r
-  Status = HiiExportPackageLists (&mPrivate.HiiDatabase, HiiHandle, &BufferSize, HiiPackageList);\r
-\r
-  //\r
-  // The return status should always be EFI_BUFFER_TOO_SMALL as input buffer's size is 0.\r
+  HiiFormPackage    = NULL;\r
+  ResultSize        = 0;\r
+  PackageSize       = 0;\r
+  \r
   //\r
-  if (Status != EFI_BUFFER_TOO_SMALL) {\r
+  // 0. Get Hii Form Package by HiiHandle\r
+  //\r
+  Status = ExportFormPackages (\r
+             &mPrivate, \r
+             DataBaseRecord->Handle, \r
+             DataBaseRecord->PackageList, \r
+             0, \r
+             PackageSize, \r
+             HiiFormPackage,\r
+             &ResultSize\r
+           );\r
+  if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
-\r
-  HiiPackageList = AllocatePool (BufferSize);\r
-  if (HiiPackageList == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
\r
+  HiiFormPackage = AllocatePool (ResultSize);\r
+  if (HiiFormPackage == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto Done;\r
   }\r
 \r
   //\r
-  // Get PackageList on HiiHandle\r
+  // Get HiiFormPackage by HiiHandle\r
   //\r
-  Status = HiiExportPackageLists (&mPrivate.HiiDatabase, HiiHandle, &BufferSize, HiiPackageList);\r
+  PackageSize   = ResultSize;\r
+  ResultSize    = 0;\r
+  Status = ExportFormPackages (\r
+             &mPrivate, \r
+             DataBaseRecord->Handle, \r
+             DataBaseRecord->PackageList, \r
+             0,\r
+             PackageSize, \r
+             HiiFormPackage,\r
+             &ResultSize\r
+           );\r
   if (EFI_ERROR (Status)) {\r
     goto Done;\r
   }\r
 \r
   //\r
-  // 2. Parse FormPackage to get BlockArray and DefaultId Array for the request BlockArray.\r
-  //    1) Request is NULL.\r
-  //    2) Request is not NULL. And it doesn't contain any BlockArray.\r
-  //    3) Request is not NULL. And it containts BlockArray.\r
-  //\r
-\r
-  //\r
-  // Initialize VarStorageData to store the var store Block and Default value information.\r
-  //\r
-  VarStorageData = (IFR_VARSTORAGE_DATA *) AllocateZeroPool (sizeof (IFR_VARSTORAGE_DATA));\r
-  if (VarStorageData == NULL) {\r
-    Status = EFI_OUT_OF_RESOURCES;\r
-    goto Done;\r
-  }\r
-\r
-  InitializeListHead (&VarStorageData->Entry);\r
-  InitializeListHead (&VarStorageData->BlockEntry);\r
-\r
-  //\r
-  // Gte the request block array by Request String \r
+  // 1. Get the request block array by Request String when Request string containts the block array.\r
   //\r
   StringPtr = NULL;\r
   if (*Request != NULL) {\r
@@ -1695,39 +1716,36 @@ GetFullStringFromHiiFormPackages (
   }\r
   \r
   //\r
-  // Get the form package\r
+  // 2. Parse FormPackage to get BlockArray and DefaultId Array for the request BlockArray.\r
   //\r
-  PackageOffset     = sizeof (EFI_HII_PACKAGE_LIST_HEADER);\r
-  PackageListLength = ReadUnaligned32 (&HiiPackageList->PackageLength);\r
-  while (PackageOffset < PackageListLength) {\r
-    CopyMem (&PacakgeHeader, (UINT8 *) HiiPackageList + PackageOffset, sizeof (PacakgeHeader));\r
-\r
-    if (PacakgeHeader.Type == EFI_HII_PACKAGE_FORMS) {\r
-      //\r
-      // Reset VarStorageData\r
-      //\r
-      VarStorageData->Size = 0;\r
-      VarStorageData->VarStoreId = 0;\r
-      if (VarStorageData->Name != NULL) {\r
-        FreePool (VarStorageData->Name);\r
-        VarStorageData->Name = NULL;\r
-      }\r
 \r
-      //\r
-      // Parse the opcode in form package \r
-      //\r
-      Status = ParseIfrData ((UINT8 *) HiiPackageList + PackageOffset, PacakgeHeader.Length, *Request, RequestBlockArray, VarStorageData, &DefaultIdArray);\r
-      if (EFI_ERROR (Status)) {\r
-        goto Done;\r
-      }\r
+  //\r
+  // Initialize DefaultIdArray to store the map between DeaultId and DefaultName\r
+  //\r
+  DefaultIdArray   = (IFR_DEFAULT_DATA *) AllocateZeroPool (sizeof (IFR_DEFAULT_DATA));\r
+  if (DefaultIdArray == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto Done;\r
+  }\r
+  InitializeListHead (&DefaultIdArray->Entry);\r
 \r
-      //\r
-      // Only one form is in a pacakge list.\r
-      //\r
-      break;\r
-    }\r
+  //\r
+  // Initialize VarStorageData to store the var store Block and Default value information.\r
+  //\r
+  VarStorageData = (IFR_VARSTORAGE_DATA *) AllocateZeroPool (sizeof (IFR_VARSTORAGE_DATA));\r
+  if (VarStorageData == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto Done;\r
+  }\r
+  InitializeListHead (&VarStorageData->Entry);\r
+  InitializeListHead (&VarStorageData->BlockEntry);\r
 \r
-    PackageOffset += PacakgeHeader.Length;\r
+  //\r
+  // Parse the opcode in form pacakge to get the default setting.\r
+  //\r
+  Status = ParseIfrData (HiiFormPackage, (UINT32) PackageSize, *Request, RequestBlockArray, VarStorageData, DefaultIdArray);\r
+  if (EFI_ERROR (Status)) {\r
+    goto Done;\r
   }\r
   \r
   //\r
@@ -2011,8 +2029,8 @@ Done:
   //\r
   // Free Pacakge data\r
   //\r
-  if (HiiPackageList != NULL) {\r
-    FreePool (HiiPackageList);\r
+  if (HiiFormPackage != NULL) {\r
+    FreePool (HiiFormPackage);\r
   }\r
 \r
   return Status;\r
@@ -2158,6 +2176,7 @@ HiiConfigRoutingExtractConfig (
     //\r
     DriverHandle     = NULL;\r
     HiiHandle        = NULL;\r
+    Database         = NULL;\r
     DevicePathLength = GetDevicePathSize (DevicePath);\r
     for (Link = Private->DatabaseList.ForwardLink;\r
          Link != &Private->DatabaseList;\r
@@ -2208,7 +2227,7 @@ HiiConfigRoutingExtractConfig (
       //\r
       // Get the full request string from IFR when HiiPackage is registered to HiiHandle \r
       //\r
-      Status = GetFullStringFromHiiFormPackages (HiiHandle, DevicePath, &ConfigRequest, &DefaultResults);\r
+      Status = GetFullStringFromHiiFormPackages (Database, DevicePath, &ConfigRequest, &DefaultResults);\r
       if (EFI_ERROR (Status)) {\r
         goto Done;\r
       }\r
@@ -2257,7 +2276,7 @@ HiiConfigRoutingExtractConfig (
     //\r
     if (HiiHandle != NULL) {\r
       if (DefaultResults == NULL) {\r
-        Status = GetFullStringFromHiiFormPackages (HiiHandle, DevicePath, &ConfigRequest, &AccessResults);\r
+        Status = GetFullStringFromHiiFormPackages (Database, DevicePath, &ConfigRequest, &AccessResults);\r
       } else {\r
         Status = MergeDefaultString (&AccessResults, DefaultResults);\r
       }\r
@@ -2425,6 +2444,7 @@ HiiConfigRoutingExportConfig (
     HiiHandle        = NULL;\r
     ConfigRequest    = NULL;\r
     DefaultResults   = NULL;\r
+    Database         = NULL;\r
     DevicePath       = DevicePathFromHandle (ConfigAccessHandles[Index]);\r
     DevicePathLength = GetDevicePathSize (DevicePath);\r
     if (DevicePath != NULL) {\r
@@ -2452,7 +2472,7 @@ HiiConfigRoutingExportConfig (
     // Update AccessResults by getting default setting from IFR when HiiPackage is registered to HiiHandle \r
     //\r
     if (HiiHandle != NULL && DevicePath != NULL) {\r
-      Status = GetFullStringFromHiiFormPackages (HiiHandle, DevicePath, &ConfigRequest, &DefaultResults);\r
+      Status = GetFullStringFromHiiFormPackages (Database, DevicePath, &ConfigRequest, &DefaultResults);\r
     }\r
     //\r
     // Can't parse IFR data to get the request string and default string.\r
@@ -2473,8 +2493,10 @@ HiiConfigRoutingExportConfig (
       // Merge the default sting from IFR code into the got setting from driver.\r
       //\r
       if (DefaultResults != NULL) {\r
-        MergeDefaultString (&AccessResults, DefaultResults);\r
+        Status = MergeDefaultString (&AccessResults, DefaultResults);\r
+        ASSERT_EFI_ERROR (Status);\r
         FreePool (DefaultResults);\r
+        DefaultResults = NULL;\r
       }\r
       \r
       //\r
index 5d10d46a8c2cb34130c794e7ee2c78dfa6f9ee8a..043770a7c0da02c95fb0f41fc0c076976944cf6d 100644 (file)
@@ -484,6 +484,34 @@ FindGlyphBlock (
   OUT UINTN                          *GlyphBufferLen OPTIONAL\r
   );\r
 \r
+/**\r
+  This function exports Form packages to a buffer.\r
+  This is a internal function.\r
+\r
+  @param  Private                Hii database private structure.\r
+  @param  Handle                 Identification of a package list.\r
+  @param  PackageList            Pointer to a package list which will be exported.\r
+  @param  UsedSize               The length of buffer be used.\r
+  @param  BufferSize             Length of the Buffer.\r
+  @param  Buffer                 Allocated space for storing exported data.\r
+  @param  ResultSize             The size of the already exported content of  this\r
+                                 package list.\r
+\r
+  @retval EFI_SUCCESS            Form Packages are exported successfully.\r
+  @retval EFI_INVALID_PARAMETER  Any input parameter is invalid.\r
+\r
+**/\r
+EFI_STATUS\r
+ExportFormPackages (\r
+  IN HII_DATABASE_PRIVATE_DATA          *Private,\r
+  IN EFI_HII_HANDLE                     Handle,\r
+  IN HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList,\r
+  IN UINTN                              UsedSize,\r
+  IN UINTN                              BufferSize,\r
+  IN OUT VOID                           *Buffer,\r
+  IN OUT UINTN                          *ResultSize\r
+  );\r
+\r
 //\r
 // EFI_HII_FONT_PROTOCOL protocol interfaces\r
 //\r