@Gao, Liming,  Any comment about patch V2 ?  we need to this patch to fix our 
issues,  Pls help review it.

Thanks,
Lin

-----Original Message-----
From: Chen, Lin Z <lin.z.c...@intel.com> 
Sent: Friday, April 1, 2022 2:09 PM
To: Wang, Jian J <jian.j.w...@intel.com>; Gao, Liming 
<gaolim...@byosoft.com.cn>; Bi, Dandan <dandan...@intel.com>; Dong, Eric 
<eric.d...@intel.com>; devel@edk2.groups.io
Cc: Li, Zhuangzhi <zhuangzhi...@intel.com>; Zhang, Di <di.zh...@intel.com>; 
Chen, Lin Z <lin.z.c...@intel.com>
Subject: [PATCH-V2] Fix Setup numeric default value incorrect issue

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.

Signed-off-by: Chen Lin Z <lin.z.c...@intel.com>
Signed-off-by: Dandan Bi <dandan...@intel.com>
---
 .../Universal/HiiDatabaseDxe/ConfigRouting.c  | 22 ++++++++++++++++++
 .../Universal/HiiDatabaseDxe/HiiDatabase.h    | 23 +++++++++++++++++++
 2 files changed, 45 insertions(+)

diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c 
b/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c
index 2f792d2965..1c6af853b3 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;@@ -2212,6 +2214,7 @@ ParseIfrData (
   SmallestDefaultId      = 0xFFFF;   FromOtherDefaultOpcode = FALSE;   
QuestionReferBitField  = FALSE;+  IfrEfiVarStoreTmp      = NULL;    //   // Go 
through the form package to parse OpCode one by one.@@ -2303,6 +2306,17 @@ 
ParseIfrData (
         }          AsciiStrToUnicodeStrS ((CHAR8 *)IfrEfiVarStore->Name, 
VarStoreName, NameSize);+        if (IfrEfiVarStoreTmp != NULL) {+          
FreePool (IfrEfiVarStoreTmp);+        }+        IfrEfiVarStoreTmp = 
AllocatePool (IfrEfiVarStore->Header.Length + AsciiStrSize ((CHAR8 
*)IfrEfiVarStore->Name));+        if (IfrEfiVarStoreTmp == NULL) {+          
Status = 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 +2516,13 @@ ParseIfrData (
           //           // Set default value base on the DefaultId list get 
from IFR data.           //+          NvDefaultStoreSize = PcdGetSize 
(PcdNvStoreDefaultValueBuffer);           for (LinkData = 
DefaultIdArray->Entry.ForwardLink; LinkData != &DefaultIdArray->Entry; LinkData 
= LinkData->ForwardLink) {             DefaultDataPtr        = BASE_CR 
(LinkData, IFR_DEFAULT_DATA, Entry);             DefaultData.DefaultId = 
DefaultDataPtr->DefaultId;+            if (NvDefaultStoreSize > sizeof 
(PCD_NV_STORE_DEFAULT_BUFFER_HEADER)) {+              
FindQuestionDefaultSetting (DefaultData.DefaultId, IfrEfiVarStoreTmp, 
&(IfrOneOf->Question), &DefaultData.Value, VarWidth, QuestionReferBitField);+   
         }             InsertDefaultValue (BlockData, &DefaultData);           
}         }@@ -3192,6 +3210,10 @@ Done:
     }   } +  if (IfrEfiVarStoreTmp != NULL) {+    FreePool 
(IfrEfiVarStoreTmp);+  }+   return Status; } 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



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#88497): https://edk2.groups.io/g/devel/message/88497
Mute This Topic: https://groups.io/mt/90172134/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to