summaryrefslogtreecommitdiffstats
path: root/RedfishPkg/Library/HiiUtilityLib/HiiInternal.h
diff options
context:
space:
mode:
Diffstat (limited to 'RedfishPkg/Library/HiiUtilityLib/HiiInternal.h')
-rw-r--r--RedfishPkg/Library/HiiUtilityLib/HiiInternal.h376
1 files changed, 376 insertions, 0 deletions
diff --git a/RedfishPkg/Library/HiiUtilityLib/HiiInternal.h b/RedfishPkg/Library/HiiUtilityLib/HiiInternal.h
new file mode 100644
index 0000000000..e68a61f8b2
--- /dev/null
+++ b/RedfishPkg/Library/HiiUtilityLib/HiiInternal.h
@@ -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_