RedfishPkg: introduce HII utility helper library
HiiUtilityLib is a helper library that provides the functions to manipulate HII options. Signed-off-by: Nickle Wang <nicklew@nvidia.com> Cc: Abner Chang <abner.chang@amd.com> Cc: Igor Kulchytskyy <igork@ami.com> Cc: Nick Ramirez <nramirez@nvidia.com> Reviewed-by: Abner Chang <abner.chang@amd.com> Reviewed-by: Igor Kulchytskyy <igork @ami.com>
This commit is contained in:
committed by
mergify[bot]
parent
78f088b5a7
commit
02990e2558
376
RedfishPkg/Library/HiiUtilityLib/HiiInternal.h
Normal file
376
RedfishPkg/Library/HiiUtilityLib/HiiInternal.h
Normal file
@@ -0,0 +1,376 @@
|
||||
/** @file
|
||||
HII internal header file.
|
||||
|
||||
Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
|
||||
(C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
|
||||
Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#ifndef HII_INTERNAL_H_
|
||||
#define HII_INTERNAL_H_
|
||||
|
||||
#include <Uefi.h>
|
||||
|
||||
#include <Protocol/UnicodeCollation.h>
|
||||
#include <Protocol/HiiConfigRouting.h>
|
||||
#include <Protocol/HiiDatabase.h>
|
||||
#include <Protocol/UserManager.h>
|
||||
#include <Protocol/DevicePathFromText.h>
|
||||
#include <Protocol/RegularExpressionProtocol.h>
|
||||
|
||||
#include <Guid/MdeModuleHii.h>
|
||||
#include <Guid/ZeroGuid.h>
|
||||
#include <Guid/HiiPlatformSetupFormset.h>
|
||||
#include <Guid/HiiFormMapMethodGuid.h>
|
||||
|
||||
#include <Library/PrintLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/UefiRuntimeServicesTableLib.h>
|
||||
#include <Library/UefiBootServicesTableLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/HiiLib.h>
|
||||
#include <Library/DevicePathLib.h>
|
||||
#include <Library/UefiLib.h>
|
||||
|
||||
#include "HiiExpression.h"
|
||||
#include <Library/HiiUtilityLib.h>
|
||||
|
||||
#define EXPRESSION_STACK_SIZE_INCREMENT 0x100
|
||||
#define EFI_IFR_SPECIFICATION_VERSION (UINT16) (((EFI_SYSTEM_TABLE_REVISION >> 16) << 8) | (((EFI_SYSTEM_TABLE_REVISION & 0xFFFF) / 10) << 4) | ((EFI_SYSTEM_TABLE_REVISION & 0xFFFF) % 10))
|
||||
|
||||
///
|
||||
/// Definition of HII_FORM_CONFIG_REQUEST
|
||||
//
|
||||
typedef struct {
|
||||
UINTN Signature;
|
||||
LIST_ENTRY Link;
|
||||
|
||||
CHAR16 *ConfigRequest; ///< <ConfigRequest> = <ConfigHdr> + <RequestElement>
|
||||
CHAR16 *ConfigAltResp; ///< Alt config response string for this ConfigRequest.
|
||||
UINTN ElementCount; ///< Number of <RequestElement> in the <ConfigRequest>
|
||||
UINTN SpareStrLen;
|
||||
CHAR16 *RestoreConfigRequest; ///< When submit form fail, the element need to be restored
|
||||
CHAR16 *SyncConfigRequest; ///< When submit form fail, the element need to be synced
|
||||
|
||||
HII_FORMSET_STORAGE *Storage;
|
||||
} HII_FORM_CONFIG_REQUEST;
|
||||
|
||||
#define HII_FORM_CONFIG_REQUEST_SIGNATURE SIGNATURE_32 ('F', 'C', 'R', 'S')
|
||||
#define HII_FORM_CONFIG_REQUEST_FROM_LINK(a) CR (a, HII_FORM_CONFIG_REQUEST, Link, HII_FORM_CONFIG_REQUEST_SIGNATURE)
|
||||
|
||||
///
|
||||
/// Incremental string length of ConfigRequest
|
||||
///
|
||||
#define CONFIG_REQUEST_STRING_INCREMENTAL 1024
|
||||
|
||||
/**
|
||||
Allocate new memory and then copy the Unicode string Source to Destination.
|
||||
|
||||
@param[in,out] Dest Location to copy string
|
||||
@param[in] Src String to copy
|
||||
|
||||
**/
|
||||
VOID
|
||||
NewStringCopy (
|
||||
IN OUT CHAR16 **Dest,
|
||||
IN CHAR16 *Src
|
||||
);
|
||||
|
||||
/**
|
||||
Set Value of given Name in a NameValue Storage.
|
||||
|
||||
@param[in] Storage The NameValue Storage.
|
||||
@param[in] Name The Name.
|
||||
@param[in] Value The Value to set.
|
||||
@param[out] ReturnNode The node use the input name.
|
||||
|
||||
@retval EFI_SUCCESS Value found for given Name.
|
||||
@retval EFI_NOT_FOUND No such Name found in NameValue storage.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
SetValueByName (
|
||||
IN HII_FORMSET_STORAGE *Storage,
|
||||
IN CHAR16 *Name,
|
||||
IN CHAR16 *Value,
|
||||
OUT HII_NAME_VALUE_NODE **ReturnNode
|
||||
);
|
||||
|
||||
/**
|
||||
Get bit field value from the buffer and then set the value for the question.
|
||||
Note: Data type UINT32 can cover all the bit field value.
|
||||
|
||||
@param[in] Question The question refer to bit field.
|
||||
@param[in] Buffer Point to the buffer which the question value get from.
|
||||
@param[out] QuestionValue The Question Value retrieved from Bits.
|
||||
|
||||
**/
|
||||
VOID
|
||||
GetBitsQuestionValue (
|
||||
IN HII_STATEMENT *Question,
|
||||
IN UINT8 *Buffer,
|
||||
OUT HII_STATEMENT_VALUE *QuestionValue
|
||||
);
|
||||
|
||||
/**
|
||||
Set bit field value to the buffer.
|
||||
Note: Data type UINT32 can cover all the bit field value.
|
||||
|
||||
@param[in] Question The question refer to bit field.
|
||||
@param[in,out] Buffer Point to the buffer which the question value set to.
|
||||
@param[in] Value The bit field value need to set.
|
||||
|
||||
**/
|
||||
VOID
|
||||
SetBitsQuestionValue (
|
||||
IN HII_STATEMENT *Question,
|
||||
IN OUT UINT8 *Buffer,
|
||||
IN UINT32 Value
|
||||
);
|
||||
|
||||
/**
|
||||
Convert the buffer value to HiiValue.
|
||||
|
||||
@param[in] Question The question.
|
||||
@param[in] Value Unicode buffer save the question value.
|
||||
@param[out] QuestionValue The Question Value retrieved from Buffer.
|
||||
|
||||
@retval Status whether convert the value success.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
BufferToQuestionValue (
|
||||
IN HII_STATEMENT *Question,
|
||||
IN CHAR16 *Value,
|
||||
OUT HII_STATEMENT_VALUE *QuestionValue
|
||||
);
|
||||
|
||||
/**
|
||||
Get the string based on the StringId and HII Package List Handle.
|
||||
|
||||
@param[in] Token The String's ID.
|
||||
@param[in] HiiHandle The package list in the HII database to search for
|
||||
the specified string.
|
||||
|
||||
@return The output string.
|
||||
|
||||
**/
|
||||
CHAR16 *
|
||||
GetTokenString (
|
||||
IN EFI_STRING_ID Token,
|
||||
IN EFI_HII_HANDLE HiiHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Converts the unicode character of the string from uppercase to lowercase.
|
||||
This is a internal function.
|
||||
|
||||
@param[in] ConfigString String to be converted
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
HiiStringToLowercase (
|
||||
IN EFI_STRING ConfigString
|
||||
);
|
||||
|
||||
/**
|
||||
Evaluate if the result is a non-zero value.
|
||||
|
||||
@param[in] Result The result to be evaluated.
|
||||
|
||||
@retval TRUE It is a non-zero value.
|
||||
@retval FALSE It is a zero value.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
IsHiiValueTrue (
|
||||
IN EFI_HII_VALUE *Result
|
||||
);
|
||||
|
||||
/**
|
||||
Set a new string to string package.
|
||||
|
||||
@param[in] String A pointer to the Null-terminated Unicode string
|
||||
to add or update in the String Package associated
|
||||
with HiiHandle.
|
||||
@param[in] HiiHandle A handle that was previously registered in the
|
||||
HII Database.
|
||||
|
||||
@return the Id for this new string.
|
||||
|
||||
**/
|
||||
EFI_STRING_ID
|
||||
NewHiiString (
|
||||
IN CHAR16 *String,
|
||||
IN EFI_HII_HANDLE HiiHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Perform nosubmitif check for a Form.
|
||||
|
||||
@param[in] FormSet FormSet data structure.
|
||||
@param[in] Form Form data structure.
|
||||
@param[in] Question The Question to be validated.
|
||||
|
||||
@retval EFI_SUCCESS Form validation pass.
|
||||
@retval other Form validation failed.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
ValidateNoSubmit (
|
||||
IN HII_FORMSET *FormSet,
|
||||
IN HII_FORM *Form,
|
||||
IN HII_STATEMENT *Question
|
||||
);
|
||||
|
||||
/**
|
||||
Perform NoSubmit check for each Form in FormSet.
|
||||
|
||||
@param[in] FormSet FormSet data structure.
|
||||
@param[in,out] CurrentForm Current input form data structure.
|
||||
@param[out] Statement The statement for this check.
|
||||
|
||||
@retval EFI_SUCCESS Form validation pass.
|
||||
@retval other Form validation failed.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
NoSubmitCheck (
|
||||
IN HII_FORMSET *FormSet,
|
||||
IN OUT HII_FORM **CurrentForm,
|
||||
OUT HII_STATEMENT **Statement
|
||||
);
|
||||
|
||||
/**
|
||||
Convert setting of Buffer Storage or NameValue Storage to <ConfigResp>.
|
||||
|
||||
@param[in] Storage The Storage to be converted.
|
||||
@param[in] ConfigResp The returned <ConfigResp>.
|
||||
@param[in] ConfigRequest The ConfigRequest string.
|
||||
|
||||
@retval EFI_SUCCESS Convert success.
|
||||
@retval EFI_INVALID_PARAMETER Incorrect storage type.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
StorageToConfigResp (
|
||||
IN HII_FORMSET_STORAGE *Storage,
|
||||
IN CHAR16 **ConfigResp,
|
||||
IN CHAR16 *ConfigRequest
|
||||
);
|
||||
|
||||
/**
|
||||
Convert <ConfigResp> to settings in Buffer Storage or NameValue Storage.
|
||||
|
||||
@param[in] Storage The Storage to receive the settings.
|
||||
@param[in] ConfigResp The <ConfigResp> to be converted.
|
||||
|
||||
@retval EFI_SUCCESS Convert success.
|
||||
@retval EFI_INVALID_PARAMETER Incorrect storage type.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
ConfigRespToStorage (
|
||||
IN HII_FORMSET_STORAGE *Storage,
|
||||
IN CHAR16 *ConfigResp
|
||||
);
|
||||
|
||||
/**
|
||||
Fetch the Ifr binary data of a FormSet.
|
||||
|
||||
@param[in] Handle PackageList Handle
|
||||
@param[in,out] FormSetGuid On input, GUID or class GUID of a formset. If not
|
||||
specified (NULL or zero GUID), take the first
|
||||
FormSet with class GUID EFI_HII_PLATFORM_SETUP_FORMSET_GUID
|
||||
found in package list.
|
||||
On output, GUID of the formset found(if not NULL).
|
||||
@param[out] BinaryLength The length of the FormSet IFR binary.
|
||||
@param[out] BinaryData The buffer designed to receive the FormSet.
|
||||
|
||||
@retval EFI_SUCCESS Buffer filled with the requested FormSet.
|
||||
BufferLength was updated.
|
||||
@retval EFI_INVALID_PARAMETER The handle is unknown.
|
||||
@retval EFI_NOT_FOUND A form or FormSet on the requested handle cannot
|
||||
be found with the requested FormId.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
GetIfrBinaryData (
|
||||
IN EFI_HII_HANDLE Handle,
|
||||
IN OUT EFI_GUID *FormSetGuid,
|
||||
OUT UINTN *BinaryLength,
|
||||
OUT UINT8 **BinaryData
|
||||
);
|
||||
|
||||
/**
|
||||
Fill storage with settings requested from Configuration Driver.
|
||||
|
||||
@param[in] FormSet FormSet data structure.
|
||||
@param[in] Storage Buffer Storage.
|
||||
|
||||
**/
|
||||
VOID
|
||||
LoadFormSetStorage (
|
||||
IN HII_FORMSET *FormSet,
|
||||
IN HII_FORMSET_STORAGE *Storage
|
||||
);
|
||||
|
||||
/**
|
||||
Free resources of a Form.
|
||||
|
||||
@param[in] FormSet Pointer of the FormSet
|
||||
@param[in,out] Form Pointer of the Form.
|
||||
|
||||
**/
|
||||
VOID
|
||||
DestroyForm (
|
||||
IN HII_FORMSET *FormSet,
|
||||
IN OUT HII_FORM *Form
|
||||
);
|
||||
|
||||
/**
|
||||
Get formset storage based on the input varstoreid info.
|
||||
|
||||
@param[in] FormSet Pointer of the current FormSet.
|
||||
@param[in] VarStoreId Varstore ID info.
|
||||
|
||||
@return Pointer to a HII_FORMSET_STORAGE data structure.
|
||||
|
||||
**/
|
||||
HII_FORMSET_STORAGE *
|
||||
GetFstStgFromVarId (
|
||||
IN HII_FORMSET *FormSet,
|
||||
IN EFI_VARSTORE_ID VarStoreId
|
||||
);
|
||||
|
||||
/**
|
||||
Zero extend integer/boolean/date/time to UINT64 for comparing.
|
||||
|
||||
@param[in] Value HII Value to be converted.
|
||||
|
||||
**/
|
||||
VOID
|
||||
ExtendValueToU64 (
|
||||
IN HII_STATEMENT_VALUE *Value
|
||||
);
|
||||
|
||||
/**
|
||||
Parse opcodes in the formset IFR binary.
|
||||
|
||||
@param[in] FormSet Pointer of the FormSet data structure.
|
||||
|
||||
@retval EFI_SUCCESS Opcode parse success.
|
||||
@retval Other Opcode parse fail.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
ParseOpCodes (
|
||||
IN HII_FORMSET *FormSet
|
||||
);
|
||||
|
||||
#endif // HII_INTERNAL_H_
|
Reference in New Issue
Block a user