From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.byosoft.com.cn (mail.byosoft.com.cn [58.240.74.242]) by mx.groups.io with SMTP id smtpd.web09.5541.1648778461677724336 for ; Thu, 31 Mar 2022 19:01:02 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=none, err=permanent DNS error (domain: byosoft.com.cn, ip: 58.240.74.242, mailfrom: gaoliming@byosoft.com.cn) Received: from DESKTOPS6D0PVI ([101.224.116.119]) (envelope-sender ) by 192.168.6.13 with ESMTP for ; Fri, 01 Apr 2022 10:00:54 +0800 X-WM-Sender: gaoliming@byosoft.com.cn X-Originating-IP: 101.224.116.119 X-WM-AuthFlag: YES X-WM-AuthUser: gaoliming@byosoft.com.cn From: "gaoliming" To: "'Chen, Lin Z'" , "'Wang, Jian J'" , "'Bi, Dandan'" , "'Dong, Eric'" , Cc: "'Li, Zhuangzhi'" , "'Zhang, Di'" References: <949b224dbfc992759531166b24c2e0af8c10e0f0.1648473720.git.lin.z.chen@intel.com> In-Reply-To: Subject: =?UTF-8?B?5Zue5aSNOiBbUEFUQ0hdIEZpeCBTZXR1cCBudW1lcmljIGRlZmF1bHQgdmFsdWUgaW5jb3JyZWN0IGlzc3Vl?= Date: Fri, 1 Apr 2022 10:00:58 +0800 Message-ID: <003d01d8456c$5483fbf0$fd8bf3d0$@byosoft.com.cn> MIME-Version: 1.0 X-Mailer: Microsoft Outlook 16.0 Thread-Index: AQBBo5t4Cu6CzRv3Btx8QjkfOLqfEAJoUZX0r/RKDFA= Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: quoted-printable Content-Language: zh-cn Lin: Thanks for your fix. This is the real issue for numeric opcode. I have = one comment here. The allocated IfrEfiVarStoreTmp is required to be free.=20 Thanks Liming > -----=D3=CA=BC=FE=D4=AD=BC=FE----- > =B7=A2=BC=FE=C8=CB: Chen, Lin Z > =B7=A2=CB=CD=CA=B1=BC=E4: 2022=C4=EA3=D4=C231=C8=D5 15:29 > =CA=D5=BC=FE=C8=CB: Wang, Jian J ; Gao, Liming > ; Bi, Dandan ; Dong, = Eric > ; devel@edk2.groups.io > =B3=AD=CB=CD: Li, Zhuangzhi ; Zhang, Di > =D6=F7=CC=E2: RE: [PATCH] Fix Setup numeric default value incorrect = issue >=20 > Hi All, >=20 > Any comments about patch ? >=20 > Thanks, > Lin >=20 > -----Original Message----- > From: Chen, Lin Z > Sent: Monday, March 28, 2022 9:27 PM > To: Wang, Jian J ; Gao, Liming > ; Bi, Dandan ; Dong, = Eric > ; devel@edk2.groups.io > Cc: Li, Zhuangzhi ; Zhang, Di ; > Chen, Lin Z > Subject: [PATCH] Fix Setup numeric default value incorrect issue >=20 > When default/manufacturing flag get removed from numeric varid, it = can't get > default value from StructurePcd in 'UpdateDefaultSettingInFormPackage' > function since there is no EFI_IFR_DEFAULT_OP opcode in IFR file. Add = a > chance to get numeric default value from StructurePcd in the case that > numeric minimum value will be used as default value. >=20 > Signed-off-by: Chen Lin Z > Signed-off-by: Dandan Bi > --- > .../Universal/HiiDatabaseDxe/ConfigRouting.c | 14 +++++++++++ > .../Universal/HiiDatabaseDxe/HiiDatabase.h | 23 > +++++++++++++++++++ > 2 files changed, 37 insertions(+) >=20 > diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c > b/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c > index 2f792d2965..8bfa0f4bf1 100644 > --- a/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c > +++ b/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c > @@ -2171,6 +2171,7 @@ ParseIfrData ( > UINTN PackageOffset; > EFI_IFR_VARSTORE *IfrVarStore; EFI_IFR_VARSTORE_EFI > *IfrEfiVarStore;+ EFI_IFR_VARSTORE_EFI *IfrEfiVarStoreTmp; > EFI_IFR_OP_HEADER *IfrOpHdr; EFI_IFR_ONE_OF > *IfrOneOf; EFI_IFR_REF4 *IfrRef;@@ -2187,6 > +2188,7 @@ ParseIfrData ( > IFR_BLOCK_DATA *BlockData; CHAR16 > *VarStoreName; UINTN NameSize;+ > UINTN NvDefaultStoreSize; UINT16 > VarWidth; UINT16 VarDefaultId; BOOLEAN > FirstOneOfOption;@@ -2303,6 +2305,14 @@ ParseIfrData ( > } AsciiStrToUnicodeStrS ((CHAR8 > *)IfrEfiVarStore->Name, VarStoreName, NameSize);+ > IfrEfiVarStoreTmp =3D AllocatePool (IfrEfiVarStore->Header.Length + AsciiStrSize > ((CHAR8 *)IfrEfiVarStore->Name));+ if (IfrEfiVarStoreTmp =3D=3D = NULL) > {+ Status =3D EFI_OUT_OF_RESOURCES;+ goto > Done;+ }++ CopyMem (IfrEfiVarStoreTmp, IfrEfiVarStore, > IfrEfiVarStore->Header.Length);+ AsciiStrToUnicodeStrS ((CHAR8 > *)IfrEfiVarStore->Name, (CHAR16 *)&(IfrEfiVarStoreTmp->Name[0]), > AsciiStrSize ((CHAR8 *)IfrEfiVarStore->Name) * sizeof (CHAR16)); > if (IsThisVarstore (&IfrEfiVarStore->Guid, VarStoreName, ConfigHdr)) > { //@@ -2502,9 +2512,13 @@ ParseIfrData ( > // // Set default value base on the DefaultId = list > get from IFR data. //+ NvDefaultStoreSize =3D > PcdGetSize (PcdNvStoreDefaultValueBuffer); for (LinkData =3D > DefaultIdArray->Entry.ForwardLink; LinkData !=3D = &DefaultIdArray->Entry; > LinkData =3D LinkData->ForwardLink) { DefaultDataPtr > =3D BASE_CR (LinkData, IFR_DEFAULT_DATA, Entry); > DefaultData.DefaultId =3D DefaultDataPtr->DefaultId;+ if > (NvDefaultStoreSize > sizeof (PCD_NV_STORE_DEFAULT_BUFFER_HEADER)) > {+ FindQuestionDefaultSetting (DefaultData.DefaultId, > IfrEfiVarStoreTmp, &(IfrOneOf->Question), &DefaultData.Value, = VarWidth, > QuestionReferBitField);+ } InsertDefaultValue > (BlockData, &DefaultData); } }diff --git > a/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabase.h > b/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabase.h > index c4ca6ad6ee..421c293cfc 100644 > --- a/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabase.h > +++ b/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabase.h > @@ -2308,6 +2308,29 @@ HiiGetConfigRespInfo ( > IN CONST EFI_HII_DATABASE_PROTOCOL *This ); +/**+ Find > question default value from PcdNvStoreDefaultValueBuffer++ @param > DefaultId Default store ID+ @param EfiVarStore Point > to EFI VarStore header+ @param IfrQuestionHdr Point to Question > header+ @param ValueBuffer Point to Buffer includes the found > default setting+ @param Width Width of the default > value+ @param BitFieldQuestion Whether the Question is stored in = Bit > field.++ @retval EFI_SUCCESS Question default value is found.+ > @retval EFI_NOT_FOUND Question default value is not > found.+**/+EFI_STATUS+FindQuestionDefaultSetting (+ IN UINT16 > DefaultId,+ IN EFI_IFR_VARSTORE_EFI *EfiVarStore,+ IN > EFI_IFR_QUESTION_HEADER *IfrQuestionHdr,+ OUT VOID > *ValueBuffer,+ IN UINTN Width,+ IN > BOOLEAN BitFieldQuestion+ );+ // // Global variables > //-- > 2.25.1