]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c
Update code to follow coding style. Mainly change about:
[mirror_edk2.git] / MdeModulePkg / Universal / HiiDatabaseDxe / ConfigRouting.c
index 6d9aec99076e4d6fd55b320391322a92d4cf1f69..7cc71e2476e97c0a422518bd1f53864a364b02f3 100644 (file)
@@ -654,33 +654,28 @@ InsertDefaultValue (
   for (Link = BlockData->DefaultValueEntry.ForwardLink; Link != &BlockData->DefaultValueEntry; Link = Link->ForwardLink) {\r
     DefaultValueArray = BASE_CR (Link, IFR_DEFAULT_DATA, Entry);\r
     if (DefaultValueArray->DefaultId == DefaultValueData->DefaultId) {\r
-      if (DefaultValueData->OpCode == EFI_IFR_DEFAULT_OP) {\r
-        //\r
-        // Update the default value array in BlockData.\r
-        //\r
-        DefaultValueArray->Value = DefaultValueData->Value;\r
-      } else if (DefaultValueArray->OpCode != EFI_IFR_DEFAULT_OP) {\r
+      //\r
+      // DEFAULT_VALUE_FROM_OPCODE has high priority, DEFAULT_VALUE_FROM_DEFAULT has low priority.\r
+      //\r
+      if (DefaultValueData->Type > DefaultValueArray->Type) {\r
         //\r
         // Update the default value array in BlockData.\r
         //\r
         DefaultValueArray->Value = DefaultValueData->Value;\r
+        DefaultValueArray->Type  = DefaultValueData->Type;\r
+        DefaultValueArray->Cleaned = DefaultValueData->Cleaned;\r
       }\r
-      FreePool (DefaultValueData);\r
-      return;\r
-    } else if (DefaultValueArray->DefaultId > DefaultValueData->DefaultId) {\r
-      //\r
-      // Insert new default value data in the front of this default value array.\r
-      //\r
-      InsertTailList (Link, &DefaultValueData->Entry);\r
       return;\r
-    }\r
+    } \r
   }\r
 \r
   //\r
   // Insert new default value data in tail.\r
   //\r
-  InsertTailList (Link, &DefaultValueData->Entry);\r
-  return;\r
+  DefaultValueArray = AllocateZeroPool (sizeof (IFR_DEFAULT_DATA));\r
+  ASSERT (DefaultValueArray != NULL);\r
+  CopyMem (DefaultValueArray, DefaultValueData, sizeof (IFR_DEFAULT_DATA));\r
+  InsertTailList (Link, &DefaultValueArray->Entry);\r
 }\r
 \r
 /**\r
@@ -1001,18 +996,20 @@ ParseIfrData (
   EFI_IFR_CHECKBOX         *IfrCheckBox;\r
   EFI_IFR_PASSWORD         *IfrPassword;\r
   EFI_IFR_STRING           *IfrString;\r
-  IFR_DEFAULT_DATA         *DefaultData;\r
+  IFR_DEFAULT_DATA         DefaultData;\r
+  IFR_DEFAULT_DATA         *DefaultDataPtr;\r
   IFR_BLOCK_DATA           *BlockData;\r
   CHAR16                   *VarStoreName;\r
   UINT16                   VarOffset;\r
   UINT16                   VarWidth;\r
-  EFI_STRING_ID            VarDefaultName;\r
   UINT16                   VarDefaultId;\r
   EFI_STRING               GuidStr;\r
   EFI_STRING               NameStr;\r
   EFI_STRING               TempStr;\r
   UINTN                    LengthString;\r
   BOOLEAN                  FirstOneOfOption;\r
+  LIST_ENTRY               *LinkData;\r
+  LIST_ENTRY               *LinkDefault;\r
 \r
   LengthString     = 0;\r
   Status           = EFI_SUCCESS;\r
@@ -1020,9 +1017,9 @@ ParseIfrData (
   NameStr          = NULL;\r
   TempStr          = NULL;\r
   BlockData        = NULL;\r
-  DefaultData      = NULL;\r
-  VarDefaultName   = 0;\r
+  DefaultDataPtr   = NULL;\r
   FirstOneOfOption = FALSE;\r
+  ZeroMem (&DefaultData, sizeof (IFR_DEFAULT_DATA));\r
 \r
   //\r
   // Go through the form package to parse OpCode one by one.\r
@@ -1160,14 +1157,14 @@ ParseIfrData (
       //\r
       // Add new the map between default id and default name.\r
       //\r
-      DefaultData = (IFR_DEFAULT_DATA *) AllocateZeroPool (sizeof (IFR_DEFAULT_DATA));\r
-      if (DefaultData == NULL) {\r
+      DefaultDataPtr = (IFR_DEFAULT_DATA *) AllocateZeroPool (sizeof (IFR_DEFAULT_DATA));\r
+      if (DefaultDataPtr == NULL) {\r
         Status = EFI_OUT_OF_RESOURCES;\r
         goto Done;\r
       }\r
-      DefaultData->DefaultId   = ((EFI_IFR_DEFAULTSTORE *) IfrOpHdr)->DefaultId;\r
-      InsertTailList (&DefaultIdArray->Entry, &DefaultData->Entry);\r
-      DefaultData = NULL;\r
+      DefaultDataPtr->DefaultId   = ((EFI_IFR_DEFAULTSTORE *) IfrOpHdr)->DefaultId;\r
+      InsertTailList (&DefaultIdArray->Entry, &DefaultDataPtr->Entry);\r
+      DefaultDataPtr = NULL;\r
       break;\r
 \r
     case EFI_IFR_FORM_OP:\r
@@ -1253,43 +1250,32 @@ ParseIfrData (
         //\r
         // Numeric minimum value will be used as default value when no default is specified. \r
         //\r
-\r
-        //\r
-        // Set standard ID\r
-        //\r
-        VarDefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;\r
-        //\r
-        // Prepare new DefaultValue\r
-        //\r
-        DefaultData = (IFR_DEFAULT_DATA *) AllocateZeroPool (sizeof (IFR_DEFAULT_DATA));\r
-        if (DefaultData == NULL) {\r
-          Status = EFI_OUT_OF_RESOURCES;\r
-          goto Done;\r
-        }\r
-        DefaultData->OpCode      = IfrOpHdr->OpCode;\r
-        DefaultData->DefaultId   = VarDefaultId;\r
-\r
+        DefaultData.Type        = DefaultValueFromDefault;\r
         switch (IfrOneOf->Flags & EFI_IFR_NUMERIC_SIZE) {\r
         case EFI_IFR_NUMERIC_SIZE_1:\r
-          DefaultData->Value = (UINT64) IfrOneOf->data.u8.MinValue;\r
+          DefaultData.Value = (UINT64) IfrOneOf->data.u8.MinValue;\r
           break;\r
   \r
         case EFI_IFR_NUMERIC_SIZE_2:\r
-          CopyMem (&DefaultData->Value, &IfrOneOf->data.u16.MinValue, sizeof (UINT16));\r
+          CopyMem (&DefaultData.Value, &IfrOneOf->data.u16.MinValue, sizeof (UINT16));\r
           break;\r
   \r
         case EFI_IFR_NUMERIC_SIZE_4:\r
-          CopyMem (&DefaultData->Value, &IfrOneOf->data.u32.MinValue, sizeof (UINT32));\r
+          CopyMem (&DefaultData.Value, &IfrOneOf->data.u32.MinValue, sizeof (UINT32));\r
           break;\r
   \r
         case EFI_IFR_NUMERIC_SIZE_8:\r
-          CopyMem (&DefaultData->Value, &IfrOneOf->data.u64.MinValue, sizeof (UINT64));\r
+          CopyMem (&DefaultData.Value, &IfrOneOf->data.u64.MinValue, sizeof (UINT64));\r
           break;\r
         }\r
         //\r
-        // Add DefaultValue into current BlockData\r
-        //\r
-        InsertDefaultValue (BlockData, DefaultData);      \r
+        // Set default value base on the DefaultId list get from IFR data.\r
+        //        \r
+        for (LinkData = DefaultIdArray->Entry.ForwardLink; LinkData != &DefaultIdArray->Entry; LinkData = LinkData->ForwardLink) {\r
+          DefaultDataPtr = BASE_CR (LinkData, IFR_DEFAULT_DATA, Entry);     \r
+          DefaultData.DefaultId   = DefaultDataPtr->DefaultId;\r
+          InsertDefaultValue (BlockData, &DefaultData);\r
+        }\r
       }\r
       break;\r
 \r
@@ -1413,28 +1399,24 @@ ParseIfrData (
       //\r
       // Prepare new DefaultValue\r
       //\r
-      DefaultData = (IFR_DEFAULT_DATA *) AllocateZeroPool (sizeof (IFR_DEFAULT_DATA));\r
-      if (DefaultData == NULL) {\r
-        Status = EFI_OUT_OF_RESOURCES;\r
-        goto Done;\r
-      }\r
-      DefaultData->OpCode      = IfrOpHdr->OpCode;\r
-      DefaultData->DefaultId   = VarDefaultId;\r
+      DefaultData.DefaultId   = VarDefaultId;\r
       if ((IfrCheckBox->Flags & EFI_IFR_CHECKBOX_DEFAULT) == EFI_IFR_CHECKBOX_DEFAULT) {\r
         //\r
         // When flag is set, defautl value is TRUE.\r
         //\r
-        DefaultData->Value    = 1;\r
+        DefaultData.Type     = DefaultValueFromFlag;\r
+        DefaultData.Value    = 1;\r
       } else {\r
         //\r
         // When flag is not set, defautl value is FASLE.\r
         //\r
-        DefaultData->Value    = 0;\r
+        DefaultData.Type     = DefaultValueFromDefault;\r
+        DefaultData.Value    = 0;\r
       }\r
       //\r
       // Add DefaultValue into current BlockData\r
       //\r
-      InsertDefaultValue (BlockData, DefaultData);\r
+      InsertDefaultValue (BlockData, &DefaultData);\r
 \r
       //\r
       // Add default value for Manufacture ID by CheckBox Flag\r
@@ -1443,28 +1425,24 @@ ParseIfrData (
       //\r
       // Prepare new DefaultValue\r
       //\r
-      DefaultData = (IFR_DEFAULT_DATA *) AllocateZeroPool (sizeof (IFR_DEFAULT_DATA));\r
-      if (DefaultData == NULL) {\r
-        Status = EFI_OUT_OF_RESOURCES;\r
-        goto Done;\r
-      }\r
-      DefaultData->OpCode      = IfrOpHdr->OpCode;\r
-      DefaultData->DefaultId   = VarDefaultId;\r
+      DefaultData.DefaultId   = VarDefaultId;\r
       if ((IfrCheckBox->Flags & EFI_IFR_CHECKBOX_DEFAULT_MFG) == EFI_IFR_CHECKBOX_DEFAULT_MFG) {\r
         //\r
         // When flag is set, defautl value is TRUE.\r
         //\r
-        DefaultData->Value    = 1;\r
+        DefaultData.Type     = DefaultValueFromFlag;\r
+        DefaultData.Value    = 1;\r
       } else {\r
         //\r
         // When flag is not set, defautl value is FASLE.\r
         //\r
-        DefaultData->Value    = 0;\r
+        DefaultData.Type     = DefaultValueFromDefault;        \r
+        DefaultData.Value    = 0;\r
       }\r
       //\r
       // Add DefaultValue into current BlockData\r
       //\r
-      InsertDefaultValue (BlockData, DefaultData);\r
+      InsertDefaultValue (BlockData, &DefaultData);\r
       break;\r
 \r
     case EFI_IFR_STRING_OP:\r
@@ -1673,54 +1651,51 @@ ParseIfrData (
         break;\r
       }\r
 \r
+      //\r
+      // 1. Set default value for OneOf option when flag field has default attribute.\r
+      //\r
       if (((IfrOneOfOption->Flags & EFI_IFR_OPTION_DEFAULT) == EFI_IFR_OPTION_DEFAULT) ||\r
-          (BlockData->OpCode == EFI_IFR_ONE_OF_OP && FirstOneOfOption)) {\r
+          ((IfrOneOfOption->Flags & EFI_IFR_OPTION_DEFAULT_MFG) == EFI_IFR_OPTION_DEFAULT_MFG)) {\r
         //\r
         // This flag is used to specify whether this option is the first. Set it to FALSE for the following options. \r
         // The first oneof option value will be used as default value when no default value is specified. \r
         //\r
         FirstOneOfOption = FALSE;\r
-        //\r
-        // Set standard ID to Manufacture ID\r
-        //\r
-        VarDefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;\r
-        //\r
+        \r
         // Prepare new DefaultValue\r
         //\r
-        DefaultData = (IFR_DEFAULT_DATA *) AllocateZeroPool (sizeof (IFR_DEFAULT_DATA));\r
-        if (DefaultData == NULL) {\r
-          Status = EFI_OUT_OF_RESOURCES;\r
-          goto Done;\r
+        DefaultData.Type  = DefaultValueFromFlag;\r
+        DefaultData.Value = IfrOneOfOption->Value.u64;\r
+        if ((IfrOneOfOption->Flags & EFI_IFR_OPTION_DEFAULT) == EFI_IFR_OPTION_DEFAULT) {\r
+          DefaultData.DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;\r
+          InsertDefaultValue (BlockData, &DefaultData);\r
+        } \r
+        if ((IfrOneOfOption->Flags & EFI_IFR_OPTION_DEFAULT_MFG) == EFI_IFR_OPTION_DEFAULT_MFG) {\r
+          DefaultData.DefaultId = EFI_HII_DEFAULT_CLASS_MANUFACTURING;\r
+          InsertDefaultValue (BlockData, &DefaultData);\r
         }\r
-        DefaultData->OpCode      = IfrOpHdr->OpCode;\r
-        DefaultData->DefaultId   = VarDefaultId;\r
-        DefaultData->Value       = IfrOneOfOption->Value.u64;\r
-        //\r
-        // Add DefaultValue into current BlockData\r
-        //\r
-        InsertDefaultValue (BlockData, DefaultData);\r
-      }\r
 \r
-      if ((IfrOneOfOption->Flags & EFI_IFR_OPTION_DEFAULT_MFG) == EFI_IFR_OPTION_DEFAULT_MFG) {\r
-        //\r
-        // Set default ID to Manufacture ID\r
-        //\r
-        VarDefaultId = EFI_HII_DEFAULT_CLASS_MANUFACTURING;\r
+        \r
+      }\r
+      \r
+      //\r
+      // 2. Set as the default value when this is the first option.\r
+      // The first oneof option value will be used as default value when no default value is specified. \r
+      //\r
+      if (FirstOneOfOption) {\r
+        // This flag is used to specify whether this option is the first. Set it to FALSE for the following options. \r
+        FirstOneOfOption = FALSE;\r
+        \r
         //\r
         // Prepare new DefaultValue\r
-        //\r
-        DefaultData = (IFR_DEFAULT_DATA *) AllocateZeroPool (sizeof (IFR_DEFAULT_DATA));\r
-        if (DefaultData == NULL) {\r
-          Status = EFI_OUT_OF_RESOURCES;\r
-          goto Done;\r
-        }\r
-        DefaultData->OpCode      = IfrOpHdr->OpCode;\r
-        DefaultData->DefaultId   = VarDefaultId;\r
-        DefaultData->Value       = IfrOneOfOption->Value.u64;\r
-        //\r
-        // Add DefaultValue into current BlockData\r
-        //\r
-        InsertDefaultValue (BlockData, DefaultData);\r
+        //        \r
+        DefaultData.Type        = DefaultValueFromDefault;\r
+        DefaultData.Value       = IfrOneOfOption->Value.u64;        \r
+        for (LinkData = DefaultIdArray->Entry.ForwardLink; LinkData != &DefaultIdArray->Entry; LinkData = LinkData->ForwardLink) {\r
+          DefaultDataPtr = BASE_CR (LinkData, IFR_DEFAULT_DATA, Entry); \r
+          DefaultData.DefaultId   = DefaultDataPtr->DefaultId;\r
+          InsertDefaultValue (BlockData, &DefaultData);\r
+        }        \r
       }\r
       break;\r
 \r
@@ -1749,18 +1724,25 @@ ParseIfrData (
       //\r
       // Prepare new DefaultValue\r
       //\r
-      DefaultData = (IFR_DEFAULT_DATA *) AllocateZeroPool (sizeof (IFR_DEFAULT_DATA));\r
-      if (DefaultData == NULL) {\r
-        Status = EFI_OUT_OF_RESOURCES;\r
-        goto Done;\r
+      DefaultData.Type        = DefaultValueFromOpcode;\r
+      DefaultData.DefaultId   = VarDefaultId;\r
+      DefaultData.Value       = IfrDefault->Value.u64;  \r
+      \r
+      // If the value field is expression, set the cleaned flag.\r
+      if (IfrDefault->Type ==  EFI_IFR_TYPE_OTHER) {\r
+        DefaultData.Cleaned = TRUE;\r
       }\r
-      DefaultData->OpCode      = IfrOpHdr->OpCode;\r
-      DefaultData->DefaultId   = VarDefaultId;\r
-      DefaultData->Value       = IfrDefault->Value.u64;\r
       //\r
       // Add DefaultValue into current BlockData\r
       //\r
-      InsertDefaultValue (BlockData, DefaultData);\r
+      InsertDefaultValue (BlockData, &DefaultData);\r
+       \r
+      //\r
+      // After insert the default value, reset the cleaned value for next \r
+      // time used. If not set here, need to set the value before everytime \r
+      // use it.\r
+      //\r
+      DefaultData.Cleaned     = FALSE;\r
       break;\r
     case EFI_IFR_END_OP:\r
       //\r
@@ -1781,6 +1763,18 @@ ParseIfrData (
   }\r
 \r
 Done:\r
+  for (LinkData = VarStorageData->BlockEntry.ForwardLink; LinkData != &VarStorageData->BlockEntry; LinkData = LinkData->ForwardLink) {\r
+    BlockData = BASE_CR (LinkData, IFR_BLOCK_DATA, Entry);\r
+    for (LinkDefault = BlockData->DefaultValueEntry.ForwardLink; LinkDefault != &BlockData->DefaultValueEntry; ) {\r
+      DefaultDataPtr = BASE_CR (LinkDefault, IFR_DEFAULT_DATA, Entry);\r
+      LinkDefault = LinkDefault->ForwardLink;\r
+      if (DefaultDataPtr->Cleaned == TRUE) {\r
+        RemoveEntryList (&DefaultDataPtr->Entry);\r
+        FreePool (DefaultDataPtr);\r
+      }\r
+    }\r
+  }\r
+\r
   return Status;  \r
 }\r
 \r
@@ -1840,7 +1834,6 @@ GetFullStringFromHiiFormPackages (
   EFI_STATUS                   Status;\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
@@ -1882,7 +1875,6 @@ GetFullStringFromHiiFormPackages (
   NameStr           = NULL;\r
   PathStr           = NULL;\r
   HiiFormPackage    = NULL;\r
-  ResultSize        = 0;\r
   PackageSize       = 0;\r
   DataExist         = FALSE;\r
   Progress          = *Request;\r