From c82ab4d8c148c4009e0b31d1dd2ea6f7d4aea80d Mon Sep 17 00:00:00 2001 From: "Huang, Long1" Date: Tue, 30 Nov 2021 09:54:55 +0800 Subject: BaseTools/VfrCompile: Correct Bit Field Flags for numeric/one of REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3752 Add Bit mask to numeric/one of opcode to set correctly Flags for Bit Field. VfrSyntax.g: Set "LFlags &= EDKII_IFR_DISPLAY_BIT" before "LFlags |= (EDKII_IFR_NUMERIC_SIZE_BIT & (_GET_CURRQEST_VARSIZE()));" VfrFormPkg.h: update "if (LFlags & EFI_IFR_DISPLAY)" with "if (LFlags & EDKII_IFR_DISPLAY_BIT)" in SetFlagsForBitField() Cc: Bob Feng Cc: Liming Gao Cc: Yuwei Chen Cc: Dandan Bi Signed-off-by: Long1 Huang Reviewed-by: Dandan Bi --- BaseTools/Source/C/VfrCompile/VfrFormPkg.h | 2 +- BaseTools/Source/C/VfrCompile/VfrSyntax.g | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'BaseTools/Source/C') diff --git a/BaseTools/Source/C/VfrCompile/VfrFormPkg.h b/BaseTools/Source/C/VfrCompile/VfrFormPkg.h index 1cea4f0..9ef6f07 100644 --- a/BaseTools/Source/C/VfrCompile/VfrFormPkg.h +++ b/BaseTools/Source/C/VfrCompile/VfrFormPkg.h @@ -1455,7 +1455,7 @@ public: return Ret; } - if (LFlags & EFI_IFR_DISPLAY) { + if (LFlags & EDKII_IFR_DISPLAY_BIT) { mOneOf->Flags = LFlags; } else { mOneOf->Flags = LFlags | EDKII_IFR_DISPLAY_UINT_DEC_BIT; diff --git a/BaseTools/Source/C/VfrCompile/VfrSyntax.g b/BaseTools/Source/C/VfrCompile/VfrSyntax.g index 3f896c6..55fd067 100644 --- a/BaseTools/Source/C/VfrCompile/VfrSyntax.g +++ b/BaseTools/Source/C/VfrCompile/VfrSyntax.g @@ -2930,6 +2930,7 @@ vfrNumericFlags [CIfrNumeric & NObj, UINT32 LineNum] : } _PCATCH(NObj.SetFlags (HFlags, LFlags, IsDisplaySpecified), LineNum); } else if ((_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) && (_GET_CURRQEST_VARTINFO().mIsBitVar)) { + LFlags &= EDKII_IFR_DISPLAY_BIT; LFlags |= (EDKII_IFR_NUMERIC_SIZE_BIT & (_GET_CURRQEST_VARSIZE())); _PCATCH(NObj.SetFlagsForBitField (HFlags, LFlags, IsDisplaySpecified), LineNum); } @@ -3105,6 +3106,8 @@ vfrOneofFlagsField [CIfrOneOf & OObj, UINT32 LineNum] : } _PCATCH(OObj.SetFlags (HFlags, LFlags), LineNum); } else if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) { + LFlags &= EDKII_IFR_DISPLAY_BIT; + LFlags |= (EDKII_IFR_NUMERIC_SIZE_BIT & (_GET_CURRQEST_VARSIZE())); _PCATCH(OObj.SetFlagsForBitField (HFlags, LFlags), LineNum); } >> -- cgit v1.1