Our tool can support OrderedList which has default value,but doesn't update the
source code in HiiDatabase when parse the ifr data.Now update the code and add
test case in DriverSample.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Dandan Bi <dandan...@intel.com>
---
 MdeModulePkg/Universal/DriverSampleDxe/Vfr.vfr      |  1 +
 .../Universal/HiiDatabaseDxe/ConfigRouting.c        | 21 ++++++++++-----------
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/MdeModulePkg/Universal/DriverSampleDxe/Vfr.vfr 
b/MdeModulePkg/Universal/DriverSampleDxe/Vfr.vfr
index 8da0d4b..bd28797 100644
--- a/MdeModulePkg/Universal/DriverSampleDxe/Vfr.vfr
+++ b/MdeModulePkg/Universal/DriverSampleDxe/Vfr.vfr
@@ -232,10 +232,11 @@ formset
         help        = STRING_TOKEN(STR_TEXT_HELP),
         flags       = RESET_REQUIRED,
         option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 3, flags = 0;
         option text = STRING_TOKEN(STR_ONE_OF_TEXT2), value = 2, flags = 0;
         option text = STRING_TOKEN(STR_ONE_OF_TEXT3), value = 1, flags = 0;
+        default     = {1,2,3},
       endlist;
     endif;
 
     label 100;
 
diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c 
b/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c
index 1081e75..b618903 100644
--- a/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c
+++ b/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c
@@ -1597,10 +1597,11 @@ ParseIfrData (
   IFR_BLOCK_DATA           *BlockData;
   CHAR16                   *VarStoreName;
   UINT16                   VarWidth;
   UINT16                   VarDefaultId;
   BOOLEAN                  FirstOneOfOption;
+  BOOLEAN                  FirstOrderedList;
   LIST_ENTRY               *LinkData;
   LIST_ENTRY               *LinkDefault;
   EFI_IFR_VARSTORE_NAME_VALUE *IfrNameValueVarStore;
   EFI_HII_PACKAGE_HEADER   *PackageHeader;
   EFI_VARSTORE_ID          VarStoreId;
@@ -1608,10 +1609,11 @@ ParseIfrData (
   Status           = EFI_SUCCESS;
   BlockData        = NULL;
   DefaultDataPtr   = NULL;
   FirstOneOfOption = FALSE;
   VarStoreId       = 0;
+  FirstOrderedList = FALSE;
   ZeroMem (&DefaultData, sizeof (IFR_DEFAULT_DATA));
 
   //
   // Go through the form package to parse OpCode one by one.
   //
@@ -1854,13 +1856,13 @@ ParseIfrData (
 
     case EFI_IFR_ORDERED_LIST_OP:
       //
       // offset by question header
       // width by EFI_IFR_ORDERED_LIST MaxContainers * OneofOption Type
-      // no default value and default id, how to define its default value?
       //
 
+      FirstOrderedList = TRUE;
       //
       // OrderedList question is not in IFR Form. This IFR form is not valid. 
       //
       if (VarStoreId == 0) {
         Status = EFI_INVALID_PARAMETER;
@@ -2100,10 +2102,14 @@ ParseIfrData (
         break;
       }
 
       IfrOneOfOption = (EFI_IFR_ONE_OF_OPTION *) IfrOpHdr;
       if (BlockData->OpCode == EFI_IFR_ORDERED_LIST_OP) {
+
+        if (!FirstOrderedList){
+          break;
+        }
         //
         // Get ordered list option data type.
         //
         if (IfrOneOfOption->Type == EFI_IFR_TYPE_NUM_SIZE_8 || 
IfrOneOfOption->Type == EFI_IFR_TYPE_BOOLEAN) {
           VarWidth = 1;
@@ -2156,14 +2162,13 @@ ParseIfrData (
         }
         //
         // Add Block Data into VarStorageData BlockEntry
         //
         InsertBlockData (&VarStorageData->BlockEntry, &BlockData);
-        //
-        // No default data for OrderedList.
-        //
-        BlockData = NULL;
+
+        FirstOrderedList = FALSE;
+
         break;
       }
 
       //
       // 1. Set default value for OneOf option when flag field has default 
attribute.
@@ -2220,16 +2225,10 @@ ParseIfrData (
         // No matched block data is ignored.
         //
         break;
       }
 
-      if (BlockData->OpCode == EFI_IFR_ORDERED_LIST_OP) {
-        //
-        // OrderedList Opcode is no default value.
-        //
-        break;
-      }
       //
       // Get the DefaultId
       //
       IfrDefault     = (EFI_IFR_DEFAULT *) IfrOpHdr;
       VarDefaultId   = IfrDefault->DefaultId;
-- 
1.9.5.msysgit.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to