[edk2-devel] 回复: [PATCH-V2] Fix Setup numeric default value incorrect issue

gaoliming gaoliming at byosoft.com.cn
Thu Apr 7 05:04:45 UTC 2022


Reviewed-by: Liming Gao <gaoliming at byosoft.com.cn>

> -----邮件原件-----
> 发件人: Chen Lin Z <lin.z.chen at intel.com>
> 发送时间: 2022年4月1日 14:09
> 收件人: jian.j.wang at intel.com; gaoliming at byosoft.com.cn;
> dandan.bi at intel.com; eric.dong at intel.com; devel at edk2.groups.io
> 抄送: zhuangzhi.li at intel.com; di.zhang at intel.com; Chen Lin Z
> <lin.z.chen at intel.com>
> 主题: [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.chen at intel.com>
> Signed-off-by: Dandan Bi <dandan.bi at 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 (#88505): https://edk2.groups.io/g/devel/message/88505
Mute This Topic: https://groups.io/mt/90307119/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-




More information about the edk2-devel-archive mailing list