]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools: Enable buffer type value for default and oneofoption opcode.
authorEric Dong <eric.dong@intel.com>
Wed, 6 May 2015 09:35:14 +0000 (09:35 +0000)
committerydong10 <ydong10@Edk2>
Wed, 6 May 2015 09:35:14 +0000 (09:35 +0000)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17335 6f19259b-4bc3-4df7-8a09-765794883524

BaseTools/Source/C/VfrCompile/VfrFormPkg.h
BaseTools/Source/C/VfrCompile/VfrSyntax.g
BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp

index 3d2def8b957686eb3647ff5b2b88f805ab8535d5..71ff02371bc89597201da17b458c8e224f6a49fe 100644 (file)
@@ -2,7 +2,7 @@
   \r
   The definition of CFormPkg's member function\r
 \r
-Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2004 - 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
@@ -595,6 +595,7 @@ public:
 \r
 static CIfrQuestionHeader *gCurrentQuestion  = NULL;\r
 static CIfrMinMaxStepData *gCurrentMinMaxData = NULL;\r
+static BOOLEAN            gIsOrderedList = FALSE;\r
 \r
 /*\r
  * The definition of all of the UEFI IFR Objects\r
@@ -1710,6 +1711,7 @@ public:
   }\r
 \r
   EFI_VFR_RETURN_CODE SetFlags (IN UINT8 LFlags) {\r
+    mOneOfOption->Flags = 0;\r
     if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_OPTION_DEFAULT)) {\r
       mOneOfOption->Flags |= EFI_IFR_OPTION_DEFAULT;\r
     }\r
index 8e9f32b81598047386ecca16a348d6c39cc6f7fa..891effad79efb750da9b2b0718e0a7081d01b286 100644 (file)
@@ -1,7 +1,7 @@
 /*++ @file\r
 Vfr Syntax\r
 \r
-Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2004 - 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
@@ -1393,9 +1393,15 @@ vfrQuestionDataFieldName [EFI_QUESTION_ID &QId, UINT32 &Mask, CHAR8 *&VarIdStr,
   )\r
   ;\r
 \r
-vfrConstantValueField[UINT8 Type] > [EFI_IFR_TYPE_VALUE Value] :\r
-  <<\r
+vfrConstantValueField[UINT8 Type, EFI_IFR_TYPE_VALUE &Value, BOOLEAN &ListType] :\r
+  <<  \r
     EFI_GUID Guid;\r
+    UINT8    *Type8  = (UINT8  *) &Value;\r
+    UINT16   *Type16 = (UINT16 *) &Value;\r
+    UINT32   *Type32 = (UINT32 *) &Value;\r
+    UINT64   *Type64 = (UINT64 *) &Value;\r
+    UINT16   Index = 0;\r
+    ListType = FALSE;\r
   >>\r
     N1:Number                                       <<\r
                                                        switch ($Type) {\r
@@ -1434,6 +1440,49 @@ vfrConstantValueField[UINT8 Type] > [EFI_IFR_TYPE_VALUE Value] :
   | QI:Number";" FI:Number";" guidDefinition[Guid] ";" "STRING_TOKEN" "\(" DP:Number "\)" \r
                                                     << $Value.ref    = _STOR(QI->getText(), FI->getText(), &Guid, DP->getText(), QI->getLine()); >>\r
   | "STRING_TOKEN" "\(" S1:Number "\)"              << $Value.string = _STOSID(S1->getText(), S1->getLine()); >>\r
+  | "\{"                                            << ListType = TRUE; >>\r
+      L1:Number                                     << \r
+                                                       switch (Type) {\r
+                                                         case EFI_IFR_TYPE_NUM_SIZE_8 :\r
+                                                           Type8[Index]  = _STOU8(L1->getText(), L1->getLine());\r
+                                                         break;\r
+                                                         case EFI_IFR_TYPE_NUM_SIZE_16 :\r
+                                                           Type16[Index] = _STOU16(L1->getText(), L1->getLine());\r
+                                                         break;\r
+                                                         case EFI_IFR_TYPE_NUM_SIZE_32 :\r
+                                                           Type32[Index] = _STOU32(L1->getText(), L1->getLine());\r
+                                                         break;\r
+                                                         case EFI_IFR_TYPE_NUM_SIZE_64 :\r
+                                                           Type64[Index] = _STOU64(L1->getText(), L1->getLine());\r
+                                                         break;\r
+                                                         default:\r
+                                                         break;\r
+                                                       }\r
+                                                       Index++;\r
+                                                    >>\r
+      (\r
+        "," \r
+        L2:Number                                   << \r
+                                                       switch (Type) {\r
+                                                         case EFI_IFR_TYPE_NUM_SIZE_8 :\r
+                                                           Type8[Index]  = _STOU8(L2->getText(), L2->getLine());\r
+                                                         break;\r
+                                                         case EFI_IFR_TYPE_NUM_SIZE_16 :\r
+                                                           Type16[Index] = _STOU16(L2->getText(), L2->getLine());\r
+                                                         break;\r
+                                                         case EFI_IFR_TYPE_NUM_SIZE_32 :\r
+                                                           Type32[Index] = _STOU32(L2->getText(), L2->getLine());\r
+                                                         break;\r
+                                                         case EFI_IFR_TYPE_NUM_SIZE_64 :\r
+                                                           Type64[Index] = _STOU64(L2->getText(), L2->getLine());\r
+                                                         break;\r
+                                                         default:\r
+                                                         break;\r
+                                                       }\r
+                                                       Index++;\r
+                                                    >>\r
+      )*\r
+    "\}"                                           \r
   ;\r
 \r
 //*****************************************************************************\r
@@ -1527,7 +1576,8 @@ vfrStatementRules :
 vfrStatementDefault :\r
   <<\r
      BOOLEAN               IsExp         = FALSE;\r
-     EFI_IFR_TYPE_VALUE    Val           = gZeroEfiIfrTypeValue;\r
+     UINT64                ValueList[EFI_IFR_MAX_LENGTH] = {0,};\r
+     EFI_IFR_TYPE_VALUE    *Val           = (EFI_IFR_TYPE_VALUE *) ValueList;\r
      CIfrDefault           *DObj         = NULL;\r
      CIfrDefault2          *DObj2        = NULL;\r
      EFI_DEFAULT_ID        DefaultId     = EFI_HII_DEFAULT_CLASS_STANDARD;\r
@@ -1535,29 +1585,70 @@ vfrStatementDefault :
      EFI_VFR_VARSTORE_TYPE VarStoreType  = EFI_VFR_VARSTORE_INVALID;\r
      UINT32                Size          = 0;\r
      EFI_GUID              *VarGuid      = NULL;\r
+     BOOLEAN               ArrayType     = FALSE;\r
+     UINT8                 *Type8        = (UINT8  *) ValueList;\r
+     UINT16                *Type16       = (UINT16 *) ValueList;\r
+     UINT32                *Type32       = (UINT32 *) ValueList;\r
+     UINT64                *Type64       = (UINT64 *) ValueList;\r
+\r
   >>\r
   D:Default                                         \r
   (\r
     (\r
-      "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] > [Val] ","  \r
+      "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE(), *Val, ArrayType] ","  \r
                                                     << \r
                                                         if (gCurrentMinMaxData != NULL && gCurrentMinMaxData->IsNumericOpcode()) {\r
                                                           //check default value is valid for Numeric Opcode\r
-                                                          if (Val.u64 < gCurrentMinMaxData->GetMinData(_GET_CURRQEST_DATATYPE()) || Val.u64 > gCurrentMinMaxData->GetMaxData(_GET_CURRQEST_DATATYPE())) {\r
+                                                          if (Val->u64 < gCurrentMinMaxData->GetMinData(_GET_CURRQEST_DATATYPE()) || Val->u64 > gCurrentMinMaxData->GetMaxData(_GET_CURRQEST_DATATYPE())) {\r
                                                             _PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "Numeric default value must be between MinValue and MaxValue.");\r
                                                           }\r
                                                         }\r
                                                         if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {\r
                                                           _PCATCH (VFR_RETURN_FATAL_ERROR, D->getLine(), "Default data type error.");\r
                                                           Size = sizeof (EFI_IFR_TYPE_VALUE);\r
+                                                        } else if (ArrayType) {\r
+                                                          switch (_GET_CURRQEST_DATATYPE()) {\r
+                                                            case EFI_IFR_TYPE_NUM_SIZE_8 :\r
+                                                              while (Type8[Size] != 0) {\r
+                                                                Size++;\r
+                                                              }\r
+                                                              break;\r
+                                                            case EFI_IFR_TYPE_NUM_SIZE_16 :\r
+                                                              while (Type16[Size] != 0) {\r
+                                                                Size++;\r
+                                                              }\r
+                                                              Size *= sizeof (UINT16);\r
+                                                              break;\r
+\r
+                                                            case EFI_IFR_TYPE_NUM_SIZE_32 :\r
+                                                              while (Type32[Size] != 0) {\r
+                                                                Size++;\r
+                                                              }\r
+                                                              Size *= sizeof (UINT32);\r
+                                                              break;\r
+\r
+                                                            case EFI_IFR_TYPE_NUM_SIZE_64 :\r
+                                                              while (Type64[Size] != 0) {\r
+                                                                Size++;\r
+                                                              }\r
+                                                              Size *= sizeof (UINT64);\r
+                                                              break;\r
+\r
+                                                            default:\r
+                                                              break;\r
+                                                          }\r
                                                         } else {\r
                                                           _PCATCH (gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &Size), D->getLine());\r
                                                         }\r
                                                         Size += OFFSET_OF (EFI_IFR_DEFAULT, Value);\r
                                                         DObj = new CIfrDefault ((UINT8)Size);\r
                                                         DObj->SetLineNo(D->getLine());\r
-                                                        DObj->SetType (_GET_CURRQEST_DATATYPE()); \r
-                                                        DObj->SetValue(Val);\r
+                                                        if (ArrayType) {\r
+                                                          DObj->SetType (EFI_IFR_TYPE_BUFFER);\r
+                                                        } else {\r
+                                                          DObj->SetType (_GET_CURRQEST_DATATYPE());\r
+                                                        }\r
+                                                        DObj->SetValue(*Val);\r
                                                     >>\r
       |                                             << IsExp = TRUE; DObj2 = new CIfrDefault2; DObj2->SetLineNo(D->getLine()); DObj2->SetScope (1); >>\r
         vfrStatementValue ","                       << CIfrEnd EndObj1; EndObj1.SetLineNo(D->getLine()); >>\r
@@ -1587,9 +1678,9 @@ vfrStatementDefault :
                                                                    VarStoreName,\r
                                                                    VarGuid,\r
                                                                    _GET_CURRQEST_DATATYPE (),\r
-                                                                     Val),\r
-                                                                     D->getLine()\r
-                                                                     );\r
+                                                                   *Val),\r
+                                                                   D->getLine()\r
+                                                                   );\r
                                                          }\r
                                                        }\r
                                                        if (DObj  != NULL) {delete DObj;} \r
@@ -2565,7 +2656,7 @@ vfrStatementOrderedList :
      CIfrOrderedList OLObj;\r
      UINT32 VarArraySize;\r
   >>\r
-  L:OrderedList                                        << OLObj.SetLineNo(L->getLine()); >>\r
+  L:OrderedList                                        << OLObj.SetLineNo(L->getLine()); gIsOrderedList = TRUE;>>\r
   vfrQuestionHeader[OLObj] ","\r
                                                        << \r
                                                           VarArraySize = _GET_CURRQEST_ARRAY_SIZE();\r
@@ -2583,7 +2674,7 @@ vfrStatementOrderedList :
   }\r
   { F:FLAGS "=" vfrOrderedListFlags[OLObj, F->getLine()] {","}}\r
   vfrStatementQuestionOptionList\r
-  E:EndList                                            << CRT_END_OP (E); >>\r
+  E:EndList                                            << CRT_END_OP (E); gIsOrderedList = FALSE;>>\r
   ";"\r
   ;\r
 \r
@@ -2975,64 +3066,117 @@ vfrStatementOptions :
 \r
 vfrStatementOneOfOption :\r
   <<\r
-     EFI_IFR_TYPE_VALUE Val           = gZeroEfiIfrTypeValue;\r
+     UINT8              ValueList[EFI_IFR_MAX_LENGTH] = {0,};\r
+     EFI_IFR_TYPE_VALUE *Val          = (EFI_IFR_TYPE_VALUE *) ValueList;\r
      CHAR8              *VarStoreName = NULL;\r
      UINT32             Size          = 0;\r
      BOOLEAN            TypeError     = FALSE;\r
      EFI_VFR_RETURN_CODE ReturnCode   = VFR_RETURN_SUCCESS;\r
      EFI_GUID           *VarStoreGuid = NULL;\r
-     \r
-     if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {\r
-       TypeError = TRUE;\r
-       Size = sizeof (EFI_IFR_TYPE_VALUE);\r
-     } else {\r
-       ReturnCode = gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &Size);\r
-     }\r
-\r
-     Size += OFFSET_OF (EFI_IFR_ONE_OF_OPTION, Value);\r
-     CIfrOneOfOption    OOOObj ((UINT8)Size);\r
+     BOOLEAN            ArrayType     = FALSE;\r
+     CIfrOneOfOption    *OOOObj;\r
+     UINT8              *Type8        = (UINT8  *) ValueList;\r
+     UINT16             *Type16       = (UINT16 *) ValueList;\r
+     UINT32             *Type32       = (UINT32 *) ValueList;\r
+     UINT64             *Type64       = (UINT64 *) ValueList;\r
   >>\r
   L:Option                                             <<      \r
-                                                          OOOObj.SetLineNo(L->getLine());\r
-                                                          if (TypeError) {\r
+                                                          if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {\r
                                                             _PCATCH (VFR_RETURN_FATAL_ERROR, L->getLine(), "Get data type error.");\r
                                                           }\r
-                                                          if (ReturnCode != VFR_RETURN_SUCCESS) {\r
-                                                            _PCATCH (ReturnCode, L->getLine());\r
-                                                          }\r
+\r
                                                        >>\r
-  Text  "=" "STRING_TOKEN" "\(" S:Number "\)" ","      << OOOObj.SetOption (_STOSID(S->getText(), S->getLine())); >>\r
-  Value "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] >[Val] ","    \r
+  Text  "=" "STRING_TOKEN" "\(" S:Number "\)" ","      \r
+  Value "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE(), *Val, ArrayType] ","\r
                                                        << \r
                                                           if (gCurrentMinMaxData != NULL) {\r
                                                             //set min/max value for oneof opcode\r
                                                             UINT64 Step = gCurrentMinMaxData->GetStepData(_GET_CURRQEST_DATATYPE());\r
                                                             switch (_GET_CURRQEST_DATATYPE()) {\r
                                                             case EFI_IFR_TYPE_NUM_SIZE_64:\r
-                                                              gCurrentMinMaxData->SetMinMaxStepData(Val.u64, Val.u64, Step);\r
+                                                              gCurrentMinMaxData->SetMinMaxStepData(Val->u64, Val->u64, Step);\r
                                                               break;\r
                                                             case EFI_IFR_TYPE_NUM_SIZE_32:\r
-                                                              gCurrentMinMaxData->SetMinMaxStepData(Val.u32, Val.u32, (UINT32) Step);\r
+                                                              gCurrentMinMaxData->SetMinMaxStepData(Val->u32, Val->u32, (UINT32) Step);\r
                                                               break;\r
                                                             case EFI_IFR_TYPE_NUM_SIZE_16:\r
-                                                              gCurrentMinMaxData->SetMinMaxStepData(Val.u16, Val.u16, (UINT16) Step);\r
+                                                              gCurrentMinMaxData->SetMinMaxStepData(Val->u16, Val->u16, (UINT16) Step);\r
                                                               break;\r
                                                             case EFI_IFR_TYPE_NUM_SIZE_8:\r
-                                                              gCurrentMinMaxData->SetMinMaxStepData(Val.u8, Val.u8, (UINT8) Step);\r
+                                                              gCurrentMinMaxData->SetMinMaxStepData(Val->u8, Val->u8, (UINT8) Step);\r
                                                               break;\r
                                                             default:\r
                                                               break;\r
                                                             }\r
                                                           }\r
-                                                          OOOObj.SetType (_GET_CURRQEST_DATATYPE()); \r
-                                                          OOOObj.SetValue (Val); \r
+                                                          if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {\r
+                                                            Size = sizeof (EFI_IFR_TYPE_VALUE);\r
+                                                          } else if (ArrayType) {\r
+                                                            switch (_GET_CURRQEST_DATATYPE()) {\r
+                                                                 case EFI_IFR_TYPE_NUM_SIZE_8 :\r
+                                                               while (Type8[Size] != 0) {\r
+                                                                 Size++;\r
+                                                               }\r
+                                                               break;\r
+                                                             case EFI_IFR_TYPE_NUM_SIZE_16 :\r
+                                                               while (Type16[Size] != 0) {\r
+                                                                 Size++;\r
+                                                               }\r
+                                                               Size *= sizeof (UINT16);\r
+                                                               break;\r
+                                                             case EFI_IFR_TYPE_NUM_SIZE_32 :\r
+                                                               while (Type32[Size] != 0) {\r
+                                                                 Size++;\r
+                                                               }\r
+                                                               Size *= sizeof (UINT32);\r
+                                                               break;\r
+                                                             case EFI_IFR_TYPE_NUM_SIZE_64 :\r
+                                                               while (Type64[Size] != 0) {\r
+                                                                 Size++;\r
+                                                               }\r
+                                                               Size *= sizeof (UINT64);\r
+                                                               break;\r
+                                                             default:\r
+                                                               break;\r
+                                                            }\r
+                                                          } else {\r
+                                                            ReturnCode = gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &Size);\r
+                                                          }\r
+                                                          if (ReturnCode != VFR_RETURN_SUCCESS) {\r
+                                                            _PCATCH (ReturnCode, L->getLine());\r
+                                                          }\r
+\r
+                                                          Size += OFFSET_OF (EFI_IFR_ONE_OF_OPTION, Value);\r
+                                                          OOOObj = new CIfrOneOfOption((UINT8)Size);\r
+                                                          OOOObj->SetLineNo(L->getLine());\r
+                                                          OOOObj->SetOption (_STOSID(S->getText(), S->getLine())); \r
+                                                          if (ArrayType) {\r
+                                                            OOOObj->SetType (EFI_IFR_TYPE_BUFFER); \r
+                                                          } else {\r
+                                                            OOOObj->SetType (_GET_CURRQEST_DATATYPE()); \r
+                                                          }\r
+                                                          OOOObj->SetValue (*Val); \r
                                                        >>\r
-  F:FLAGS "=" vfrOneOfOptionFlags[OOOObj, F->getLine()]\r
+  F:FLAGS "=" vfrOneOfOptionFlags[*OOOObj, F->getLine()]\r
                                                        <<\r
+                                                          //\r
+                                                          // Array type only for default type OneOfOption.\r
+                                                          //\r
+                                                          if ((OOOObj->GetFlags () & (EFI_IFR_OPTION_DEFAULT | EFI_IFR_OPTION_DEFAULT_MFG)) == 0 && ArrayType) {\r
+                                                            _PCATCH (VFR_RETURN_FATAL_ERROR, L->getLine(), "Default keyword should with array value type!");\r
+                                                          }\r
+\r
+                                                          //\r
+                                                          // Clear the default flag if the option not use array value but has default flag.\r
+                                                          //\r
+                                                          if ((OOOObj->GetFlags () & (EFI_IFR_OPTION_DEFAULT | EFI_IFR_OPTION_DEFAULT_MFG)) != 0 && !ArrayType && gIsOrderedList) {\r
+                                                            OOOObj->SetFlags(OOOObj->GetFlags () & ~(EFI_IFR_OPTION_DEFAULT | EFI_IFR_OPTION_DEFAULT_MFG));\r
+                                                          }\r
+\r
                                                           if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {\r
                                                             _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), L->getLine());\r
                                                             VarStoreGuid = mCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);\r
-                                                            if (OOOObj.GetFlags () & 0x10) {\r
+                                                            if (OOOObj->GetFlags () & EFI_IFR_OPTION_DEFAULT) {\r
                                                               CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_STANDARD, F);\r
                                                               _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
                                                                         EFI_HII_DEFAULT_CLASS_STANDARD,\r
@@ -3040,10 +3184,10 @@ vfrStatementOneOfOption :
                                                                         VarStoreName,\r
                                                                         VarStoreGuid,\r
                                                                         _GET_CURRQEST_DATATYPE (),\r
-                                                                        Val\r
+                                                                        *Val\r
                                                                         ), L->getLine());\r
                                                             }\r
-                                                            if (OOOObj.GetFlags () & 0x20) {\r
+                                                            if (OOOObj->GetFlags () & EFI_IFR_OPTION_DEFAULT_MFG) {\r
                                                               CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_MANUFACTURING, F);\r
                                                               _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
                                                                         EFI_HII_DEFAULT_CLASS_MANUFACTURING,\r
@@ -3051,7 +3195,7 @@ vfrStatementOneOfOption :
                                                                         VarStoreName,\r
                                                                         VarStoreGuid,\r
                                                                         _GET_CURRQEST_DATATYPE (),\r
-                                                                        Val\r
+                                                                        *Val\r
                                                                         ), L->getLine());\r
                                                             }\r
                                                           }\r
@@ -3066,16 +3210,16 @@ vfrStatementOneOfOption :
                                                          //\r
                                                          CIfrOptionKey IfrOptionKey (\r
                                                                          gCurrentQuestion->QUESTION_ID(),\r
-                                                                         Val,\r
+                                                                         *Val,\r
                                                                          _STOQID(KN->getText(), KN->getLine())\r
                                                                          );\r
                                                          SET_LINE_INFO (IfrOptionKey, KN);\r
                                                        >>\r
   }\r
   (\r
-    T:"," vfrImageTag                                  << OOOObj.SetScope (1); CRT_END_OP (T); >>\r
+    T:"," vfrImageTag                                  << OOOObj->SetScope (1); CRT_END_OP (T); >>\r
   )*\r
-  ";"\r
+  ";"                                                  << if (OOOObj != NULL) {delete OOOObj;} >>\r
   ;\r
 \r
 vfrOneOfOptionFlags [CIfrOneOfOption & OOOObj, UINT32 LineNum] :\r
index 246820a08a2c331c9ffb7ba06a0317cc41b119a3..f73b70d794cc0851234b7a4493366501de4416c4 100644 (file)
@@ -2,7 +2,7 @@
   \r
   Vfr common library functions.\r
 \r
-Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2004 - 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
@@ -110,6 +110,10 @@ SConfigInfo::SConfigInfo (
   case EFI_IFR_TYPE_STRING :\r
     memcpy (mValue, &Value.string, mWidth);\r
     break;\r
+  case EFI_IFR_TYPE_BUFFER :\r
+    memcpy (mValue, &Value.u8, mWidth);\r
+    break;\r
+\r
   case EFI_IFR_TYPE_OTHER :\r
     return;\r
   }\r