| /** @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_ |