From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id E466CAC16D1 for ; Fri, 8 Mar 2024 14:47:27 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=XHefPQeQLXUWvpMC8gDiZsSVLvqPBq48YsuG2kODslI=; c=relaxed/simple; d=groups.io; h=From:To:Cc:References:In-Reply-To:Subject:Date:Message-ID:MIME-Version:Thread-Index:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Type:Content-Transfer-Encoding:Content-Language; s=20240206; t=1709909246; v=1; b=mB7gLxMdn/5RcGAgftRbyOfZV1p51F0WbwdrvQzT3oLrYIcggc+UjATSNwPXC7BpCJ8wcNei 2Ci8/zEejqKdClvth4m5z1gfr+1tSIcKD3jCRt64BIfoBvZyN9xNLY9ew1/e6oaP+fICubmPzIL 9nppUgFiaR1RxzvIV07I6mlNDnW7aDMszV8hn7Ip/6MNC5/bAqGZV2zpdhsb5vHp3fHGAb8nrMu mfxJtOeKSvCalkkzMJK8XK89R9S4ViwloEfqsv+OYFovBSaUxIWY7FOJHpGwbKg+TNCb2BJXU43 oA4uZFhPf7413SKyCR4bipIKDfau+QVa0viT23ss+T2HQ== X-Received: by 127.0.0.2 with SMTP id Dz3uYY7687511x8GTEDk0aoa; Fri, 08 Mar 2024 06:47:26 -0800 X-Received: from cxsh.intel-email.com (cxsh.intel-email.com [121.46.250.151]) by mx.groups.io with SMTP id smtpd.web10.23645.1709909243787025014 for ; Fri, 08 Mar 2024 06:47:25 -0800 X-Received: from cxsh.intel-email.com (localhost [127.0.0.1]) by cxsh.intel-email.com (Postfix) with ESMTP id 78FD4DDA78D for ; Fri, 8 Mar 2024 22:47:20 +0800 (CST) X-Received: from localhost (localhost [127.0.0.1]) by cxsh.intel-email.com (Postfix) with ESMTP id 74507DDA787 for ; Fri, 8 Mar 2024 22:47:20 +0800 (CST) X-Received: from mail.byosoft.com.cn (mail.byosoft.com.cn [58.240.74.242]) by cxsh.intel-email.com (Postfix) with SMTP id 6F414DDA797 for ; Fri, 8 Mar 2024 22:47:17 +0800 (CST) X-Received: from DESKTOPS6D0PVI ([114.93.194.54]) (envelope-sender ) by 192.168.6.13 with ESMTP(SSL) for ; Fri, 08 Mar 2024 22:47:09 +0800 X-WM-Sender: gaoliming@byosoft.com.cn X-Originating-IP: 114.93.194.54 X-WM-AuthFlag: YES X-WM-AuthUser: gaoliming@byosoft.com.cn From: "gaoliming via groups.io" To: "'Zhang, Zifeng'" , "'Yang, Yuting2'" , Cc: "'Rebecca Cran'" , "'Feng, Bob C'" , "'Chen, Christine'" , "'Chen, Arthur G'" References: <20240126025341.149-1-yuting2.yang@intel.com> In-Reply-To: Subject: =?UTF-8?B?W2VkazItZGV2ZWxdIOWbnuWkjTogW1BhdGNoIFYzXSBCYXNlVG9vbHM6IFZmckNvbXBpbGVyIEFkZHMgRGVmYXVsdFZhbHVlRXJyb3I=?= Date: Fri, 08 Mar 2024 06:47:25 -0800 Message-ID: <03d801da7167$818247a0$8486d6e0$@byosoft.com.cn> MIME-Version: 1.0 Thread-Index: AQHXaPTXuswEHVv4J0cJFLtVuYCanwJiIXBfsSDpamA= Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,gaoliming@byosoft.com.cn List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: D6D6KhyMnFbAhOAMPZCqBZhMx7686176AA= Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: quoted-printable Content-Language: zh-cn X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20240206 header.b=mB7gLxMd; dmarc=pass (policy=none) header.from=groups.io; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io Zifeng: For Structure PCD, https://edk2.groups.io/g/devel/message/18432 is the summary of code change.=20 Below is two wikis about its usage.=20 https://github.com/lgao4/edk2/wiki/StrucutrePcd-Usage https://github.com/lgao4/edk2/wiki/StructurePcd-Enable-Steps =20 For the patch table configuration, the structure PCD can be defined to ma= p the patch table structure.=20 Then, the patch table value can be specified in DSC in the different SkuI= d (boardId) to support multiple SKUs. Structure PCD can make DSC as the centralized way for the platform configuration.=20 The developer doesn't need to maintain the board setting in C source file= . Thanks Liming > -----=D3=CA=BC=FE=D4=AD=BC=FE----- > =B7=A2=BC=FE=C8=CB: Zhang, Zifeng > =B7=A2=CB=CD=CA=B1=BC=E4: 2024=C4=EA3=D4=C27=C8=D5 14:54 > =CA=D5=BC=FE=C8=CB: Yang, Yuting2 ; devel@edk2.gr= oups.io > =B3=AD=CB=CD: Rebecca Cran ; Liming Gao > ; Feng, Bob C ; Chen, > Christine ; Chen, Arthur G > =D6=F7=CC=E2: RE: [Patch V3] BaseTools: VfrCompiler Adds DefaultValueErro= r >=20 > Hi Liming, >=20 > Could you help to review the patch for VFR compiler change submitted by > Yuting? >=20 > Btw, > Dell need some introduction of Hii StructurePCD implementation especially > for replacing patch table configurations. > Would you like to share EDK2 wiki link or doc for it? >=20 > Best Regards, > Zifeng >=20 >=20 > -----Original Message----- > From: Yang, Yuting2 > Sent: Friday, January 26, 2024 10:54 AM > To: devel@edk2.groups.io > Cc: Rebecca Cran ; Liming Gao > ; Feng, Bob C ; Chen, > Christine ; Zhang, Zifeng > Subject: [Patch V3] BaseTools: VfrCompiler Adds DefaultValueError >=20 > Add --catch_default option to raise a DefaultValueError when encountering > VFR default definitions to help remove default variables. >=20 > Signed-off-by: Yuting Yang >=20 > Cc: Rebecca Cran > Cc: Liming Gao > Cc: Bob Feng > Cc: Christine Chen > Cc: Zifeng Zhang > Signed-off-by: Yuting Yang > --- > BaseTools/Source/C/VfrCompile/VfrCompiler.cpp | 8 +- > BaseTools/Source/C/VfrCompile/VfrCompiler.h | 1 + > BaseTools/Source/C/VfrCompile/VfrError.cpp | 3 +- > BaseTools/Source/C/VfrCompile/VfrError.h | 3 +- > BaseTools/Source/C/VfrCompile/VfrFormPkg.h | 1 + > BaseTools/Source/C/VfrCompile/VfrSyntax.g | 238 ++++++++++-------- > 6 files changed, 150 insertions(+), 104 deletions(-) >=20 > diff --git a/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp > b/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp > index 5f4d262d85..4031af6e39 100644 > --- a/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp > +++ b/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp > @@ -78,6 +78,7 @@ CVfrCompiler::OptionInitialization ( > mOptions.WarningAsError =3D FALSE; > mOptions.AutoDefault =3D FALSE; > mOptions.CheckDefault =3D FALSE;+ > mOptions.IsCatchDefaultEnable =3D FALSE; memset > (&mOptions.OverrideClassGuid, 0, sizeof (EFI_GUID)); if (Argc =3D=3D 1= ) {@@ > -95,6 +96,8 @@ CVfrCompiler::OptionInitialization ( > Version (); SET_RUN_STATUS (STATUS_DEAD); > return;+ } else if (stricmp(Argv[Index], "--catch_default") =3D=3D 0){= + > mOptions.IsCatchDefaultEnable =3D TRUE; } else if (stricmp(Argv[Index= ], > "-l") =3D=3D 0) { mOptions.CreateRecordListFile =3D TRUE; > gCIfrRecordInfoDB.TurnOn ();@@ -179,7 +182,6 @@ > CVfrCompiler::OptionInitialization ( > goto Fail; } strcpy (mOptions.VfrFileName, Argv[Index]);- > if (mOptions.OutputDirectory =3D=3D NULL) { mOptions.OutputDirector= y =3D > (CHAR8 *) malloc (1); if (mOptions.OutputDirectory =3D=3D NULL) {@@ > -679,7 +681,7 @@ CVfrCompiler::Compile ( > DebugError (NULL, 0, 0001, "Error opening the input file", "%s", > InFileName); goto Fail; }-+ InputInfo.IsCatchDefaultEnable =3D > mOptions.IsCatchDefaultEnable; if (mOptions.HasOverrideClassGuid) > { InputInfo.OverrideClassGuid =3D &mOptions.OverrideClassGuid; } el= se > {@@ -937,5 +939,3 @@ main ( > return GetUtilityStatus (); }--diff --git > a/BaseTools/Source/C/VfrCompile/VfrCompiler.h > b/BaseTools/Source/C/VfrCompile/VfrCompiler.h > index b6e207d2ce..974f37c4eb 100644 > --- a/BaseTools/Source/C/VfrCompile/VfrCompiler.h > +++ b/BaseTools/Source/C/VfrCompile/VfrCompiler.h > @@ -52,6 +52,7 @@ typedef struct { > BOOLEAN WarningAsError; BOOLEAN AutoDefault; BOOLEAN > CheckDefault;+ BOOLEAN IsCatchDefaultEnable; } OPTIONS; typedef > enum {diff --git a/BaseTools/Source/C/VfrCompile/VfrError.cpp > b/BaseTools/Source/C/VfrCompile/VfrError.cpp > index 65bb8e34fd..8a706f929b 100644 > --- a/BaseTools/Source/C/VfrCompile/VfrError.cpp > +++ b/BaseTools/Source/C/VfrCompile/VfrError.cpp > @@ -49,7 +49,8 @@ static SVFR_WARNING_HANDLE > VFR_WARNING_HANDLE_TABLE [] =3D { > { VFR_WARNING_DEFAULT_VALUE_REDEFINED, ": default value > re-defined with different value"}, > { VFR_WARNING_ACTION_WITH_TEXT_TWO, ": Action opcode should not > have TextTwo part"}, > { VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, ": Not recommend to > use obsoleted framework opcode"},- { VFR_WARNING_CODEUNDEFINED, ": > undefined Warning Code" }+ { VFR_WARNING_CODEUNDEFINED, ": > undefined Warning Code" },+ { VFR_WARNING_UNSUPPORTED, ": pls > remove the default values if necessary" } }; > CVfrErrorHandle::CVfrErrorHandle (diff --git > a/BaseTools/Source/C/VfrCompile/VfrError.h > b/BaseTools/Source/C/VfrCompile/VfrError.h > index 7d16bd5f74..1b4bc173d2 100644 > --- a/BaseTools/Source/C/VfrCompile/VfrError.h > +++ b/BaseTools/Source/C/VfrCompile/VfrError.h > @@ -47,7 +47,8 @@ typedef enum { > VFR_WARNING_DEFAULT_VALUE_REDEFINED =3D 0, > VFR_WARNING_ACTION_WITH_TEXT_TWO, > VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE,- > VFR_WARNING_CODEUNDEFINED+ VFR_WARNING_CODEUNDEFINED,+ > VFR_WARNING_UNSUPPORTED } EFI_VFR_WARNING_CODE; typedef > struct _SVFR_ERROR_HANDLE {diff --git > a/BaseTools/Source/C/VfrCompile/VfrFormPkg.h > b/BaseTools/Source/C/VfrCompile/VfrFormPkg.h > index 9ef6f07787..d8fada3bcb 100644 > --- a/BaseTools/Source/C/VfrCompile/VfrFormPkg.h > +++ b/BaseTools/Source/C/VfrCompile/VfrFormPkg.h > @@ -96,6 +96,7 @@ struct SBufferNode { > typedef struct { EFI_GUID *OverrideClassGuid;+ BOOLEAN > IsCatchDefaultEnable; } INPUT_INFO_TO_SYNTAX; class CFormPkg {diff --git > a/BaseTools/Source/C/VfrCompile/VfrSyntax.g > b/BaseTools/Source/C/VfrCompile/VfrSyntax.g > index 55fd067f8a..5daf1c423c 100644 > --- a/BaseTools/Source/C/VfrCompile/VfrSyntax.g > +++ b/BaseTools/Source/C/VfrCompile/VfrSyntax.g > @@ -50,6 +50,7 @@ VfrParserStart ( > { ParserBlackBox > VfrParser(File); VfrParser.parser()->SetOverrideClassGuid > (InputInfo->OverrideClassGuid);+ > VfrParser.parser()->SetIsCatchDefaultEnable(InputInfo->IsCatchDefaultEnable > ); return VfrParser.parser()->vfrProgram(); } >>@@ -386,8 +387,8 @@ > dataStructField32 [BOOLEAN FieldInUnion]: > ; dataStructField16 [BOOLEAN FieldInUnion]:- << - UINT32 > ArrayNum =3D 0; + <<+ UINT32 ArrayNum =3D 0; >> ("UINT16" | > "CHAR16") N:StringIdentifier@@ -737,7 +738,7 @@ vfrFormSetList : > ; vfrStatementExtension:- << + << EFI_GUID Guid; > CIfrGuid *GuidObj =3D NULL; CHAR8 *TypeName =3D NULL;@@ > -751,7 +752,7 @@ vfrStatementExtension: > >> L:GuidOp Uuid "=3D" guidDefinition[Guid]- {"," DataType "=3D" = + > {"," DataType "=3D" ( U64:"UINT64" {OpenBracket > AN1:Number CloseBracket <getText(), > AN1->getLine());>>} > << TypeName =3D U64->getText(); LineNum =3D U64->getLine(); >>@@ -770,7 > +771,7 @@ vfrStatementExtension: > | T:"EFI_HII_TIME" {OpenBracket AN8:Number CloseBracket > <getText(), AN8->getLine());>>} > << TypeName =3D T->getText(); LineNum =3D T->getLine(); IsStruct =3D TRUE= ;>> > | R:"EFI_HII_REF" {OpenBracket AN9:Number CloseBracket < _STOU32(AN9->getText(), AN9->getLine());>>}- > << TypeName =3D R->getText(); LineNum =3D R->getLine(); IsStruct =3D TRUE= ;>> > + << > TypeName =3D R->getText(); LineNum =3D R->getLine(); IsStruct =3D TRUE;>> > | TN:StringIdentifier {OpenBracket AN10:Number CloseBracket < =3D _STOU32(AN10->getText(), AN10->getLine());>>} > << TypeName =3D TN->getText(); LineNum =3D TN->getLine(); IsStruct =3D > TRUE;>> )@@ -875,19 +876,19 @@ vfrExtensionData[UINT8 *DataBuff, > UINT32 Size, CHAR8 *TypeName, UINT32 TypeSize, > memcpy (ByteOffset, &Data_U64, > TypeSize); }else if (strcmp ("UINT32", TypeName) =3D=3D 0) > { Data_U32 =3D _STOU32(RD->getText(), RD->getLine());- > memcpy (ByteOffset, &Data_U32, TypeSize); > + memcpy (ByteOffset, &Data_U32, > TypeSize); }else if (strcmp ("UINT16", TypeName) =3D=3D 0) > { Data_U16 =3D _STOU16(RD->getText(), RD->getLine());- > memcpy (ByteOffset, &Data_U16, TypeSize); > + memcpy (ByteOffset, &Data_U16, > TypeSize); }else if (strcmp ("UINT8", TypeName) =3D=3D 0) > { Data_U8 =3D _STOU8(RD->getText(), RD->getLine());- > memcpy (ByteOffset, &Data_U8, TypeSize); > + memcpy (ByteOffset, &Data_U8, > TypeSize); }else if (strcmp ("BOOLEAN", TypeName)=3D=3D 0) > { Data_BL =3D _STOU8(RD->getText(), RD->getLine());- > memcpy (ByteOffset, &Data_BL, TypeSize); > + memcpy (ByteOffset, &Data_BL, > TypeSize); }else if (strcmp ("EFI_STRING_ID", TypeName) =3D= =3D > 0) { Data_SID =3D _STOSID(RD->getText(), RD->getLine());- > memcpy (ByteOffset, &Data_SID, TypeSize); > + memcpy (ByteOffset, &Data_SID, > TypeSize); } } else > { gCVfrVarDataTypeDB.GetDataFieldInfo(TFName, > FieldOffset, FieldType, FieldSize, BitField);@@ -975,7 +976,15 @@ > vfrExtensionData[UINT8 *DataBuff, UINT32 Size, CHAR8 *TypeName, UINT32 > TypeSize, > vfrStatementDefaultStore : << UINT16 DefaultId =3D > EFI_HII_DEFAULT_CLASS_STANDARD; >>- D:DefaultStore N:StringIdentifier > ","+ D:DefaultStore N:StringIdentifier "," <<+ > if (mIsCatchDefaultEnable) {+ > gCVfrErrorHandle.HandleWarning (+ > VFR_WARNING_UNSUPPORTED,+ > D->getLine(),+ > D->getText()+ > );+ > }+ >> > Prompt "=3D" "STRING_TOKEN" "\(" S:Number "\)" { "," Attribute "=3D= " > A:Number << DefaultId =3D _STOU16(A->getText(), > A->getLine()); >>@@ -1074,7 +1083,7 @@ vfrStatementVarStoreEfi : > | U64:"UINT64" "," << TypeName > =3D U64->getText(); LineNum =3D U64->getLine(); >> | D:"EFI_HII_DATE"= "," > << TypeName =3D D->getText(); LineNum =3D D->getLine(); >> | > T:"EFI_HII_TIME" "," << TypeName =3D > T->getText(); LineNum =3D T->getLine(); >>- | R:"EFI_HII_REF" "," > << TypeName =3D R->getText(); LineNum =3D R->getLine(); >> + | > R:"EFI_HII_REF" "," << TypeName =3D > R->getText(); LineNum =3D R->getLine(); >> ) { VarId "=3D" ID:Num= ber > "," <<@@ -1092,8 +1101,8 @@ > vfrStatementVarStoreEfi : > ( Name "=3D" SN:StringIdentifier "," << StoreName > =3D SN->getText(); >> |- Name "=3D" "STRING_TOKEN" "\(" > VN:Number "\)" "," - VarSize "=3D" N:Number "," > << + Name "=3D" "STRING_TOKEN" "\(" VN:Number "\)" ","+ > VarSize "=3D" N:Number "," << > IsUEFI23EfiVarstore =3D FALSE; > StoreName =3D > gCVfrStringDB.GetVarStoreNameFormStringId(_STOSID(VN->getText(), > VN->getLine())); > if (StoreName =3D=3D NULL) {@@ -1116,7 +1125,7 @@ vfrStatementVarStoreEfi= : > break; > case 8: > TypeName =3D (CHAR8 *) "UINT64";- > break; + > break; > default: > _PCATCH (VFR_RETURN_UNSUPPORTED, N); > break;@@ -1124,7 +1133,7 @@ vfrStatementVarStoreEfi : > >> ) - > Uuid "=3D" guidDefinition[Guid] << + Uuid "=3D" > guidDefinition[Guid] << > if (IsUEFI23EfiVarstore) > { _PCAT > CH(gCVfrDataStorage.DeclareBufferVarStore > ( > StoreName,@@ -1150,7 +1159,7 @@ > vfrStatementVarStoreEfi : > } > VSEObj.SetGuid (&Guid); > VSEObj.SetVarStoreId (VarStoreId);- > + > VSEObj.SetSize ((UINT16) Size); > VSEObj.SetName (StoreName); > if (IsUEFI23EfiVarstore =3D=3D FALSE && StoreName !=3D NULL) {@@ -1184,7 > +1193,7 @@ vfrStatementVarStoreNameValue : > >> } > (- Name "=3D" "STRING_TOKEN" "\(" N:Number "\)" "," << + Name > "=3D" "STRING_TOKEN" "\(" N:Number "\)" "," << > if (!Created) > { _PC > ATCH(gCVfrDataStorage.DeclareNameVarStoreBegin (SN->getText(), > VarStoreId), SN); > Created =3D TRUE;@@ -1245,12 +1254,12 @@ vfrStatementDisableIfFormSet : > vfrStatementSuppressIfFormSet : << CIfrSuppressIf SIObj;>> > L:SuppressIf <<- > SIObj.SetLineNo(L->getLine()); + > SIObj.SetLineNo(L->getLine()); > >> { FLAGS "=3D" flagsField ( "\|" flagsField )* "," = } > vfrStatementExpression[0] ";" vfrFormSetList- E: EndIf + E: EndIf ";" > << CRT_END_OP (E); >> ; @@ -1491,7 +1500,7 @@ > vfrQuestionDataFieldName [EFI_QUESTION_ID &QId, UINT32 &Mask, CHAR8 > *&VarIdStr, > ( SN2:StringIdentifier << _STRCAT > (&VarIdStr, SN2->getText()); LineNo =3D SN2->getLine(); >> (- ".= " > << + "." << > _STRCAT (&VarIdStr, "."); > if (mConstantOnlyInExpression) > { _PC > ATCH(VFR_RETURN_CONSTANT_ONLY, LineNo);@@ -1518,7 +1527,7 @@ > vfrQuestionDataFieldName [EFI_QUESTION_ID &QId, UINT32 &Mask, CHAR8 > *&VarIdStr, > ; vfrConstantValueField[UINT8 Type, EFI_IFR_TYPE_VALUE &Value, > BOOLEAN &ListType] :- << + << EFI_GUID Guid; > BOOLEAN Negative =3D FALSE; BOOLEAN IntDecStyle =3D > FALSE;@@ -1634,11 +1643,11 @@ vfrConstantValueField[UINT8 Type, > EFI_IFR_TYPE_VALUE &Value, BOOLEAN &ListType] > | Z:Zero << $Value.u8 > =3D _STOU8(Z->getText(), Z->getLine()); >> | HOUR:Number ":" > MINUTE:Number ":" SECOND:Number << $Value.time =3D > _STOT(HOUR->getText(), MINUTE->getText(),SECOND->getText(), > HOUR->getLine()); >> | YEAR:Number "/" MONTH:Number "/" > DAY:Number << $Value.date =3D _STOD(YEAR->getText(), > MONTH->getText(), DAY->getText(), YEAR->getLine()); >>- | QI:Number";" > FI:Number";" guidDefinition[Guid] ";" "STRING_TOKEN" "\(" DP:Number "\)" = + > | QI:Number";" FI:Number";" guidDefinition[Guid] ";" "STRING_TOKEN" "\(" > DP:Number "\)" > << $Value.ref =3D _STOR(QI->getText(), FI->getText(), &Guid, DP->getText(), > QI->getLine()); >> | "STRING_TOKEN" "\(" S1:Number "\)" > << $Value.string =3D _STOSID(S1->getText(), S1->getLine()); >> | "\{" > << ListType =3D TRUE; >>- L1:Number > << + L1:Number << > switch (Type) > { case > EFI_IFR_TYPE_NUM_SIZE_8 : > Type8[Index] =3D _STOU8(L1->getText(), L1->getLine());@@ -1658,8 +1667,8 > @@ vfrConstantValueField[UINT8 Type, EFI_IFR_TYPE_VALUE &Value, > BOOLEAN &ListType] >=20 > Index++; >> > (- "," - L2:Number > << + ","+ L2:Number > << > switch (Type) > { case > EFI_IFR_TYPE_NUM_SIZE_8 : > Type8[Index] =3D _STOU8(L2->getText(), L2->getLine());@@ -1679,7 +1688,7 > @@ vfrConstantValueField[UINT8 Type, EFI_IFR_TYPE_VALUE &Value, > BOOLEAN &ListType] >=20 > Index++; >> > )*- "\}" + > "\}" ; > //************************************************************ > *****************@@ -1714,7 +1723,7 @@ vfrFormDefinition : > ; vfrFormMapDefinition :- << + << CIfrFormMap *FMapObj =3D > NULL; UINT32 FormMapMethodNumber =3D 0; EFI_GUID > Guid;@@ -1775,11 +1784,15 @@ vfrStatementDefault : > CIfrNumeric *NumericQst =3D NULL; >>- > D:Default + D:Default > <<+ if > (mIsCatchDefaultEnable) {+ > DefaultValueError(VFR_RETURN_UNSUPPORTED, > D->getLine());+ > }+ >> > ( (- "=3D" vfrConstantValueField[_GET_CURRQEST_DATATYPE(), > *Val, ArrayType] "," - > << + "=3D" vfrConstantValueField[_GET_CURRQEST_DATATYPE(), *Val, > ArrayType] ","+ > << if > (gCurrentMinMaxData !=3D NULL && > gCurrentMinMaxData->IsNumericOpcode()) > { //c > heck default value is valid for Numeric Opcode > NumericQst =3D (CIfrNumeric *) gCurrentQuestion;@@ -1888,14 +1901,14 @@ > vfrStatementDefault : > vfrStatementValue "," << CIfrEnd > EndObj1; EndObj1.SetLineNo(D->getLine()); >> ) {- > DefaultStore "=3D" SN:StringIdentifier "," << + DefaultStore "= =3D" > SN:StringIdentifier "," << > _PCATCH(gCVfrDefaultStore.GetDefaultId (SN->getText(), &DefaultId), SN); > if (DObj !=3D NULL) {- > DObj->SetDefaultId (DefaultId); > - } + > DObj->SetDefaultId > (DefaultId);+ > } > if (DObj2 !=3D NULL) {- > DObj2->SetDefaultId (DefaultId); + > DObj2->SetDefaultId > (DefaultId); > } >> > }@@ -1917,8 +1930,8 @@ vfrStatementDefault : >=20 > ); > } }- > if (DObj !=3D NULL) {delete DObj;} - > if (DObj2 !=3D NULL) {delete DObj2;} + > if (DObj !=3D NULL) {delete DObj;}+ > if (DObj2 !=3D NULL) {delete > DObj2;} >> > ) ;@@ -1970,11 +1983,15 @@ vfrStatementInvalid : > ; flagsField :- Number - | InteractiveFlag - | ManufacturingFlag - > | DefaultFlag - | ResetRequiredFlag + Number+ | InteractiveFlag+ | > ManufacturingFlag+ | D:DefaultFlag > <<+ if > (mIsCatchDefaultEnable) {+ > DefaultValueError(VFR_RETURN_UNSUPPORTED, > D->getLine());+ > }+ > >>+ | ResetRequiredFlag | ReconnectRequiredFlag | > N:NVAccessFlag << > gCVfrErrorHandle.HandleWarning (@@ -1989,7 +2006,7 @@ flagsField : >=20 > L->getLine(), > L->getText() > );- > >> > + >> ; > vfrStatementValue :@@ -2001,13 +2018,13 @@ vfrStatementValue : > vfrStatementRead : << CIfrRead RObj; >> R:Read > << RObj.SetLineNo(R->getLine()); >>- vfrStatementExpression[0] ";" + > vfrStatementExpression[0] ";" ; vfrStatementWrite : << CIfrWrite > WObj; >> W:Write > << WObj.SetLineNo(W->getLine()); >>- vfrStatementExpression[0] ";" + > vfrStatementExpression[0] ";" ; vfrStatementSubTitle :@@ -2140,7 > +2157,7 @@ vfrStatementGoto : > FormId "=3D" F3:Number "," << RefType > =3D 2; FId =3D _STOFID(F3->getText(), F3->getLine()); >> Question "= =3D" > (- QN3:StringIdentifier "," << + > QN3:StringIdentifier "," << > mCVfrQuestionDB.GetQuestionId (QN3->getText (), NULL, QId, BitMask); > if (QId =3D=3D EFI_QUESTION_ID_INVALID) > { > _PCATCH(VFR_RETURN_UNDEFINED, QN3);@@ -2222,7 +2239,7 @@ > vfrStatementGoto : > "," Key "=3D" KN:Number << > AssignQuestionKey (*QHObj, KN); >> } {- E:"," + E:"," > vfrStatementQuestionOptionList << > OHObj->SetScope(1); CRT_END_OP (E);>> } ";" > << if (R1Obj !=3D NULL) {delete R1Obj;} if (R2Obj !=3D NULL) {delete R2Ob= j;} if > (R3Obj !=3D NULL) {delete R3Obj;} if (R4Obj !=3D NULL) {delete R4Obj;} if > (R5Obj !=3D NULL) {delete R5Obj;}>>@@ -2511,20 +2528,20 @@ > minMaxDateStepDefault[EFI_HII_DATE & D, UINT8 KeyValue] : > { "default" "=3D" N:Number "," << > switch (KeyValue) {- > case 0: + > case 0: > D.Year =3D _STOU16(N->getText(), N->getLine()); > if (D.Year < _STOU16 (MinN->getText(), MinN->getLine()) || D.Year > _STOU16 > (MaxN->getText(), MaxN->getLine())) > { > _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Year default > value must be between Min year and Max > year."); > } > break;- > case 1: - > D.Month =3D _STOU8(N->getText(), N->getLine()); + > case 1:+ > D.Month =3D _STOU8(N->getText(), N->getLine()); > if (D.Month < 1 || D.Month > 12) > { > _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Month > default value must be between 1 and > 12."); > } > break;- > case 2: - > D.Day =3D _STOU8(N->getText(), N->getLine()); + > case 2:+ > D.Day =3D _STOU8(N->getText(), N->getLine()); > if (D.Day < 1 || D.Day > 31) > { > _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Day default > value must be between 1 and > 31."); > }@@ -2570,7 +2587,7 @@ vfrSetMinMaxStep[CIfrMinMaxStepData & > MMSDObj] : > BOOLEAN MinNegative =3D FALSE; BOOLEAN MaxNegative =3D > FALSE; >>- Minimum "=3D" + Minimum "=3D" { "\-" > << MinNegative =3D TRUE; >> }@@ -2659,8 +2676,8 @@ > vfrSetMinMaxStep[CIfrMinMaxStepData & MMSDObj] : > } > } > >>- > Maximum "=3D" - { + Maximum "=3D"+ { "\-" > << MaxNegative =3D TRUE; >> } A:Number "," > <<@@ -2889,7 +2906,7 @@ vfrStatementNumeric : > } > >> > vfrStatementQuestionOptionList- E:EndNumeric > << + E:EndNumeric << > CRT_END_OP (E); > if (GuidObj !=3D NULL) > { > GuidObj->SetScope(1);@@ -3131,7 +3148,7 @@ vfrStatementString : > { Key "=3D" KN:Number "," << > AssignQuestionKey (SObj, KN); >> }- MinSize "=3D" MIN:Number "," > << + MinSize "=3D" MIN:Number "," << > VarArraySize =3D _GET_CURRQEST_ARRAY_SIZE(); > StringMinSize =3D _STOU8(MIN->getText(), MIN->getLine()); > if (_STOU64(MIN->getText(), MIN->getLine()) > StringMinSize) {@@ -3141,7 > +3158,7 @@ vfrStatementString : > } > SObj.SetMinSize > (StringMinSize); > >>- MaxSize "=3D" MAX:Number "," > << + MaxSize "=3D" MAX:Number "," << > StringMaxSize =3D _STOU8(MAX->getText(), MAX->getLine()); > if (_STOU64(MAX->getText(), MAX->getLine()) > StringMaxSize) > { > _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "String > MaxSize takes only one byte, which can't be larger than 0xFF.");@@ -3185,= 7 > +3202,7 @@ vfrStatementPassword : > { Key "=3D" KN:Number "," << > AssignQuestionKey (PObj, KN); >> }- MinSize "=3D" MIN:Number "," > << + MinSize "=3D" MIN:Number "," << > VarArraySize =3D _GET_CURRQEST_ARRAY_SIZE(); > PasswordMinSize =3D _STOU16(MIN->getText(), MIN->getLine()); > if (_STOU64(MIN->getText(), MIN->getLine()) > PasswordMinSize) {@@ > -3195,7 +3212,7 @@ vfrStatementPassword : > } > PObj.SetMinSize > (PasswordMinSize); > >>- MaxSize "=3D" MAX:Number "," > << + MaxSize "=3D" MAX:Number "," << > PasswordMaxSize =3D _STOU16(MAX->getText(), MAX->getLine()); > if (_STOU64(MAX->getText(), MAX->getLine()) > PasswordMaxSize) > { > _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "Password > MaxSize takes only two byte, which can't be larger than 0xFFFF.");@@ > -3230,12 +3247,12 @@ vfrStatementOrderedList : > >> L:OrderedList << > OLObj.SetLineNo(L->getLine()); gIsOrderedList =3D TRUE;>> > vfrQuestionHeader[OLObj] ","- > << + << > VarArraySize =3D _GET_CURRQEST_ARRAY_SIZE(); > OLObj.SetMaxContainers ((UINT8) (VarArraySize > 0xFF ? 0xFF : > VarArraySize)); > >> {- MaxContainers "=3D" M:Number "," > << + MaxContainers "=3D" M:Number "," << > if (_STOU64(M->getText(), M->getLine()) > _STOU8(M->getText(), > M->getLine())) > { > _PCATCH (VFR_RETURN_INVALID_PARAMETER, M->getLine(), "OrderedList > MaxContainers takes only one byte, which can't be larger than > 0xFF."); > } else if (VarArraySize !=3D 0 && _STOU8(M->getText(), M->getLine()) > > VarArraySize) {@@ -3328,19 +3345,19 @@ > minMaxTimeStepDefault[EFI_HII_TIME & T, UINT8 KeyValue] : > { "default" "=3D" N:Number "," << > switch (KeyValue) {- > case 0: - > T.Hour =3D _STOU8(N->getText(), N->getLine()); + > case 0:+ > T.Hour =3D _STOU8(N->getText(), N->getLine()); > if (T.Hour > 23) > { > _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Hour > default value must be between 0 and > 23."); > } > break;- > case 1: - > T.Minute =3D _STOU8(N->getText(), N->getLine()); + > case 1:+ > T.Minute =3D _STOU8(N->getText(), N->getLine()); > if (T.Minute > 59) > { > _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Minute > default value must be between 0 and > 59."); > } > break;- > case 2: + > case 2: > T.Second =3D _STOU8(N->getText(), N->getLine()); > if (T.Second > 59) > { > _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Second > default value must be between 0 and 59.");@@ -3419,11 +3436,11 @@ > vfrStatementStatListOld : > ; vfrStatementDisableIfStat :- << - CIfrDisableIf DIObj; + <<+ > CIfrDisableIf DIObj; >> L:DisableIf > << DIObj.SetLineNo(L->getLine()); >>- vfrStatementExpression[0] ";" + > vfrStatementExpression[0] ";" ( vfrStatementStatList )* E:EndIf > << CRT_END_OP (E); >> ";"@@ -3548,8 +3565,8 @@ > vfrStatementWarningIf : > ; vfrStatementDisableIfQuest :- << - CIfrDisableIf DIObj; + <<+ > CIfrDisableIf DIObj; >> L:DisableIf > << DIObj.SetLineNo(L->getLine()); >> vfrStatementExpression[0] ";"@@ > -3616,15 +3633,15 @@ vfrStatementOneOfOption : > UINT32 *Type32 =3D (UINT32 *) ValueList; > UINT64 *Type64 =3D (UINT64 *) ValueList; >>- > L:Option << + > L:Option << > if (_GET_CURRQEST_DATATYPE() =3D=3D EFI_IFR_TYPE_OTHER) > { > _PCATCH (VFR_RETURN_FATAL_ERROR, L->getLine(), "Get data type > error."); > } > > >- Text "=3D" "STRING_TOKEN" "\(" S:Number "\)" "," + Text "=3D" > "STRING_TOKEN" "\(" S:Number "\)" "," Value "=3D" > vfrConstantValueField[_GET_CURRQEST_DATATYPE(), *Val, ArrayType] ","- > << + << > if (gCurrentMinMaxData !=3D NULL) > { > //set min/max value for oneof opcode > UINT64 Step =3D > gCurrentMinMaxData->GetStepData(_GET_CURRQEST_DATATYPE(), > _GET_CURRQEST_VARTINFO().mIsBitVar);@@ -3696,7 +3713,7 @@ > vfrStatementOneOfOption : > Size > +=3D OFFSET_OF (EFI_IFR_ONE_OF_OPTION, Value); > OOOObj =3D new CIfrOneOfOption((UINT8)Size); > OOOObj->SetLineNo(L->getLine());- > OOOObj->SetOption (_STOSID(S->getText(), S->getLine())); + > OOOObj->SetOption (_STOSID(S->getText(), S->getLine())); > if (ArrayType) > { > OOOObj->SetType > (EFI_IFR_TYPE_BUFFER); > } else {@@ -3706,7 +3723,7 @@ > vfrStatementOneOfOption : >=20 > OOOObj->SetType > (_GET_CURRQEST_DATATYPE()); > } > }- > OOOObj->SetValue (*Val); + > OOOObj->SetValue > (*Val); >> > F:FLAGS "=3D" vfrOneOfOptionFlags[*OOOObj, F->getLine()] > <<@@ -3790,7 +3807,12 @@ oneofoptionFlagsField [UINT8 & HFlags, UINT8 > & LFlags] : > | RestStyleFlag << $HFlags > |=3D 0x20; >> | ReconnectRequiredFlag > << $HFlags |=3D 0x40; >> | ManufacturingFlag > << $LFlags |=3D 0x20; >>- | DefaultFlag > << $LFlags |=3D 0x10; >>+ | D:DefaultFlag > <<+ > $LFlags |=3D 0x10;+ > if (mIsCatchDefaultEnable) {+ > DefaultValueError(VFR_RETURN_UNSUPPORTED, > D->getLine());+ > }+ > >> | A:NVAccessFlag > << > gCVfrErrorHandle.HandleWarning > ( > VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE,@@ -3963,7 +3985,7 > @@ vfrStatementExpression [UINT32 RootLevel, UINT32 ExpOpCount =3D 0] : >=20 > } > } }- > + if > ($RootLevel =3D=3D 0) > { > _CLEAR_SAVED_OPHDR (); > mCIfrOpHdrIndex --;@@ -4405,10 +4427,10 @@ ideqvallistExp[UINT32 & > RootLevel, UINT32 & ExpOpCount] : >=20 > for (Index =3D 0; Index < ListLen; Index++) > { > EILObj.SetValueList (Index, > ValueList[Index]); > }- > + > EILObj.UpdateIfrBuffer();- > _SAVE_OPHDR_COND (EILObj, ($ExpOpCount =3D=3D 0), L->getLine()); > - + > _SAVE_OPHDR_COND (EILObj, ($ExpOpCount =3D=3D 0), L->getLine());+ > if (QId =3D=3D EFI_QUESTION_ID_INVALID) > { > EILObj.SetQuestionId (QId, VarIdStr, > LineNo); > }@@ -4458,9 +4480,9 @@ stringref1Exp[UINT32 & RootLevel, > UINT32 & ExpOpCount] : > >> L:StringRef "\("- ( + ( "STRING_TOKEN"- > "\(" + "\(" S:Number << RefStringId =3D > _STOSID(S->getText(), S->getLine()); >> "\)" | I:Number > << RefStringId =3D _STOSID(I->getText(), I->getLine()); >>@@ -4499,10 +45= 21, 10 > @@ getExp[UINT32 & RootLevel, UINT32 & ExpOpCount] : > Info.mVarStoreId =3D 0; >> L:Get- "\(" + "\(" > vfrStorageVarId[Info, VarIdStr, FALSE] {"\|" FLAGS "=3D" > numericVarStoreType [VarType] }- "\)" > << + "\)" << > { i > f (Info.mVarStoreId =3D=3D 0) > { > // support Date/Time question@@ -4549,9 +4571,9 @@ getExp[UINT32 & > RootLevel, UINT32 & ExpOpCount] : >=20 > _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode don't > support data > array"); > } > }- > CIfrGet GObj(L->getLine()); - > _SAVE_OPHDR_COND (GObj, ($ExpOpCount =3D=3D 0), L->getLine()); - > GObj.SetVarInfo (&Info); + > CIfrGet GObj(L->getLine());+ > _SAVE_OPHDR_COND (GObj, ($ExpOpCount =3D=3D 0), L->getLine());+ > GObj.SetVarInfo (&Info); > delete[] VarIdStr; > $ExpOpCount++; > }@@ -4608,7 +4630,7 @@ question23refExp[UINT32 & > RootLevel, UINT32 & ExpOpCount] : > { Uuid "=3D" guidDefinition[Guid] "," > << Type =3D 0x3; >> }- vfrStatementExpressionSub[$RootLevel + > 1, $ExpOpCount] + vfrStatementExpressionSub[$RootLevel + 1, > $ExpOpCount] "\)" > << > switch (Type) {@@ -4675,9 +4697,9 @@ setExp[UINT32 & RootLevel, > UINT32 & ExpOpCount] : > "\(" vfrStorageVarId[Info, VarIdStr, FALSE] {"\|" FLAG "=3D" > numericVarStoreType [VarType] }- "," > vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] + "," > vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] "\)"- > << + << > { i > f (Info.mVarStoreId =3D=3D 0) > { > // support Date/Time question@@ -4724,8 +4746,8 @@ setExp[UINT32 & > RootLevel, UINT32 & ExpOpCount] : >=20 > _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode don't > support data > array"); > } > }- > CIfrSet TSObj(L->getLine()); - > TSObj.SetVarInfo (&Info); + > CIfrSet TSObj(L->getLine());+ > TSObj.SetVarInfo (&Info); > delete[] VarIdStr; > $ExpOpCount++; > }@@ -4808,9 +4830,9 @@ spanExp[UINT32 & RootLevel, > UINT32 & ExpOpCount] : > ; vfrExpressionMap [UINT32 & RootLevel, UINT32 & ExpOpCount]:- > L:Map - "\(" > - vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] + L:Map+ > "\("+ vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] ":" > << { CIfrMap MObj(L->getLine()); } >> > ( vfrStatementExpression[0]@@ -4837,6 +4859,7 @@ spanFlags > [UINT8 & Flags] : > class EfiVfrParser { << private:+ BOOLEAN > mIsCatchDefaultEnable; UINT8 mParserStatus; > BOOLEAN mConstantOnlyInExpression; @@ -4880,6 +4903,7 > @@ public: > VOID _PCATCH (IN EFI_VFR_RETURN_CODE, IN > ANTLRTokenPtr); VOID _PCATCH (IN > EFI_VFR_RETURN_CODE, IN UINT32); VOID _PCATCH > (IN EFI_VFR_RETURN_CODE, IN UINT32, IN CONST CHAR8 *);+ VOID > DefaultValueError (IN EFI_VFR_RETURN_CODE, IN UINT32); VOID > syn (ANTLRAbstractToken *, ANTLRChar *, SetWordType *, > ANTLRTokenType, INT32); @@ -4909,6 +4933,7 @@ public: > VOID IdEqIdDoSpecial (IN UINT32 &, IN > UINT32, IN EFI_QUESTION_ID, IN CHAR8 *, IN UINT32, IN EFI_QUESTION_ID, > IN CHAR8 *, IN UINT32, IN EFI_COMPARE_TYPE); VOID > IdEqListDoSpecial (IN UINT32 &, IN UINT32, IN EFI_QUESTION_ID, IN > CHAR8 *, IN UINT32, IN UINT16, IN UINT16 *); VOID > SetOverrideClassGuid (IN EFI_GUID *);+ VOID > SetIsCatchDefaultEnable (BOOLEAN IsCatchDefaultEnable); >> } @@ -5086,6 > +5111,17 @@ EfiVfrParser::_PCATCH ( > mParserStatus =3D mParserStatus + gCVfrErrorHandle.HandleError > (ReturnCode, LineNum, (CHAR8 *) ErrorMsg); } > +VOID+EfiVfrParser::DefaultValueError (+ IN EFI_VFR_RETURN_CODE > ReturnCode,+ IN UINT32 LineNum+ )+{+ CHAR8 > ErrorMsg[100];+ sprintf(ErrorMsg, "please remove the default value / > defaultstore in line %d", LineNum);+ mParserStatus =3D mParserStatus + > gCVfrErrorHandle.HandleError (ReturnCode, LineNum, ErrorMsg);+}+ VOID > EfiVfrParser::syn ( ANTLRAbstractToken *Tok,@@ -5682,12 +5718,18 > @@ EfiVfrParser::IdEqListDoSpecial ( > } } -VOID +VOID EfiVfrParser::SetOverrideClassGuid (IN EFI_GUID > *OverrideClassGuid) { mOverrideClassGuid =3D OverrideClassGuid; } > +VOID+EfiVfrParser::SetIsCatchDefaultEnable (BOOLEAN > IsCatchDefaultEnable)+{+ mIsCatchDefaultEnable =3D > IsCatchDefaultEnable;+}+ VOID EfiVfrParser::CheckDuplicateDefaultValue > ( IN EFI_DEFAULT_ID DefaultId,-- > 2.39.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#116522): https://edk2.groups.io/g/devel/message/116522 Mute This Topic: https://groups.io/mt/104809618/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-