/** @file This file defines the EDKII Redfish Platform Config Protocol private structure. (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP
Copyright (c) 2022-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef EDKII_REDFISH_PLATFORM_CONFIG_IMPL_H_ #define EDKII_REDFISH_PLATFORM_CONFIG_IMPL_H_ #include // // Libraries // #include #include #include #include #include #include #include #include #include #define IS_EMPTY_STRING(a) (a == NULL || a[0] == L'\0') #define ENGLISH_LANGUAGE_CODE "en-US" #define X_UEFI_SCHEMA_PREFIX "x-uefi-redfish-" // // Definition of REDFISH_PLATFORM_CONFIG_PRIVATE. // typedef struct { LIST_ENTRY Link; EFI_HII_HANDLE HiiHandle; BOOLEAN IsDeleted; } REDFISH_PLATFORM_CONFIG_PENDING_LIST; #define REDFISH_PLATFORM_CONFIG_PENDING_LIST_FROM_LINK(a) BASE_CR (a, REDFISH_PLATFORM_CONFIG_PENDING_LIST, Link) typedef struct { UINTN Count; // Number of schema in list CHAR8 **SchemaList; // Schema list } REDFISH_PLATFORM_CONFIG_SCHEMA; // // Definition of REDFISH_PLATFORM_CONFIG_FORM_SET_PRIVATE // typedef struct { LIST_ENTRY Link; HII_FORMSET *HiiFormSet; // Pointer to HII formset data. EFI_GUID Guid; // Formset GUID. EFI_HII_HANDLE HiiHandle; // Hii Handle of this formset. LIST_ENTRY HiiFormList; // Form list that keep form data under this formset. CHAR16 *DevicePathStr; // Device path of this formset. REDFISH_PLATFORM_CONFIG_SCHEMA SupportedSchema; // Schema that is supported in this formset. } REDFISH_PLATFORM_CONFIG_FORM_SET_PRIVATE; #define REDFISH_PLATFORM_CONFIG_FORMSET_FROM_LINK(a) BASE_CR (a, REDFISH_PLATFORM_CONFIG_FORM_SET_PRIVATE, Link) // // Definition of REDFISH_PLATFORM_CONFIG_FORM_PRIVATE // typedef struct { LIST_ENTRY Link; UINT16 Id; // Form ID. EFI_STRING_ID Title; // String token of form title. REDFISH_PLATFORM_CONFIG_FORM_SET_PRIVATE *ParentFormset; HII_FORM *HiiForm; // Pointer to HII form data. LIST_ENTRY StatementList; // Statement list that keep statement under this form. BOOLEAN Suppressed; // Form is suppressed } REDFISH_PLATFORM_CONFIG_FORM_PRIVATE; #define REDFISH_PLATFORM_CONFIG_FORM_FROM_LINK(a) BASE_CR (a, REDFISH_PLATFORM_CONFIG_FORM_PRIVATE, Link) // // Definition of REDFISH_PLATFORM_CONFIG_STATEMENT_DATA // typedef struct { UINT64 NumMinimum; UINT64 NumMaximum; UINT64 NumStep; UINT8 StrMinSize; UINT8 StrMaxSize; } REDFISH_PLATFORM_CONFIG_STATEMENT_DATA; // // Definition of REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE // typedef struct { LIST_ENTRY Link; REDFISH_PLATFORM_CONFIG_FORM_PRIVATE *ParentForm; HII_STATEMENT *HiiStatement; // Pointer to HII statement data. EFI_QUESTION_ID QuestionId; // Question ID of this statement. EFI_STRING_ID Description; // String token of this question. EFI_STRING_ID Help; // String token of help message. EFI_STRING DesStringCache; // The string cache for search function. UINT8 Flags; // The statement flag. REDFISH_PLATFORM_CONFIG_STATEMENT_DATA StatementData; // The max/min for statement value. BOOLEAN Suppressed; // Statement is suppressed. BOOLEAN GrayedOut; // Statement is GrayedOut. } REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE; #define REDFISH_PLATFORM_CONFIG_STATEMENT_FROM_LINK(a) BASE_CR (a, REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE, Link) // // Definition of REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE_REF // typedef struct { LIST_ENTRY Link; REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE *Statement; } REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE_REF; #define REDFISH_PLATFORM_CONFIG_STATEMENT_REF_FROM_LINK(a) BASE_CR (a, REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE_REF, Link) // // Definition of REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE_LIST // typedef struct { LIST_ENTRY StatementList; // List of REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE_REF UINTN Count; } REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE_LIST; /** Release formset list and all the forms that belong to this formset. @param[in] FormsetList Pointer to formset list that needs to be released. @retval EFI_STATUS **/ EFI_STATUS ReleaseFormsetList ( IN LIST_ENTRY *FormsetList ); /** Release formset list and all the forms that belong to this formset. @param[in] FormsetList Pointer to formset list that needs to be released. @retval EFI_STATUS **/ EFI_STATUS LoadFormsetList ( IN EFI_HII_HANDLE *HiiHandle, OUT LIST_ENTRY *FormsetList ); /** When HII database is updated. Keep updated HII handle into pending list so we can process them later. @param[in] HiiHandle HII handle instance. @param[in] PendingList Pending list to keep HII handle which is recently updated. @retval EFI_SUCCESS HII handle is saved in pending list. @retval EFI_INVALID_PARAMETER HiiHandle is NULL or PendingList is NULL. @retval EFI_OUT_OF_RESOURCES System is out of memory. **/ EFI_STATUS NotifyFormsetUpdate ( IN EFI_HII_HANDLE *HiiHandle, IN LIST_ENTRY *PendingList ); /** When HII database is updated and form-set is deleted. Keep deleted HII handle into pending list so we can process them later. @param[in] HiiHandle HII handle instance. @param[in] PendingList Pending list to keep HII handle which is recently updated. @retval EFI_SUCCESS HII handle is saved in pending list. @retval EFI_INVALID_PARAMETER HiiHandle is NULL or PendingList is NULL. @retval EFI_OUT_OF_RESOURCES System is out of memory. **/ EFI_STATUS NotifyFormsetDeleted ( IN EFI_HII_HANDLE *HiiHandle, IN LIST_ENTRY *PendingList ); /** Get statement private instance by the given configure language. @param[in] FormsetList Form-set list to search. @param[in] Schema Schema to be matched. @param[in] ConfigureLang Configure language. @retval REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE * Pointer to statement private instance. **/ REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE * GetStatementPrivateByConfigureLang ( IN LIST_ENTRY *FormsetList, IN CHAR8 *Schema, IN EFI_STRING ConfigureLang ); /** Search and find statement private instance by given regular expression pattern which describes the Configure Language. @param[in] RegularExpressionProtocol Regular express protocol. @param[in] FormsetList Form-set list to search. @param[in] Schema Schema to be matched. @param[in] Pattern Regular expression pattern. @param[out] StatementList Statement list that match above pattern. @retval EFI_SUCCESS Statement list is returned. @retval EFI_INVALID_PARAMETER Input parameter is NULL. @retval EFI_NOT_READY Regular express protocol is NULL. @retval EFI_NOT_FOUND No statement is found. @retval EFI_OUT_OF_RESOURCES System is out of memory. **/ EFI_STATUS GetStatementPrivateByConfigureLangRegex ( IN EFI_REGULAR_EXPRESSION_PROTOCOL *RegularExpressionProtocol, IN LIST_ENTRY *FormsetList, IN CHAR8 *Schema, IN EFI_STRING Pattern, OUT REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE_LIST *StatementList ); /** There are HII database update and we need to process them accordingly so that we won't use stale data. This function will parse updated HII handle again in order to get updated data-set. @param[in] FormsetList List to keep HII form-set. @param[in] PendingList List to keep HII handle that is updated. @retval EFI_SUCCESS HII handle is saved in pending list. @retval EFI_INVALID_PARAMETER FormsetList is NULL or PendingList is NULL. **/ EFI_STATUS ProcessPendingList ( IN LIST_ENTRY *FormsetList, IN LIST_ENTRY *PendingList ); /** Delete a string from HII Package List by given HiiHandle. @param[in] StringId Id of the string in HII database. @param[in] HiiHandle The HII package list handle. @retval EFI_SUCCESS The string was deleted successfully. @retval EFI_INVALID_PARAMETER StringId is zero. **/ EFI_STATUS HiiDeleteString ( IN EFI_STRING_ID StringId, IN EFI_HII_HANDLE HiiHandle ); /** Retrieves a unicode string from a string package in a given language. The returned string is allocated using AllocatePool(). The caller is responsible for freeing the allocated buffer using FreePool(). If HiiHandle is NULL, then ASSERT(). If StringId is 0, then ASSET. @param[in] HiiHandle A handle that was previously registered in the HII Database. @param[in] Language The specified configure language to get string. @param[in] StringId The identifier of the string to retrieved from the string package associated with HiiHandle. @retval NULL The string specified by StringId is not present in the string package. @retval Other The string was returned. **/ EFI_STRING HiiGetRedfishString ( IN EFI_HII_HANDLE HiiHandle, IN CHAR8 *Language, IN EFI_STRING_ID StringId ); /** Retrieves a ASCII string from a string package in a given language. The returned string is allocated using AllocatePool(). The caller is responsible for freeing the allocated buffer using FreePool(). If HiiHandle is NULL, then ASSERT(). If StringId is 0, then ASSET. @param[in] HiiHandle A handle that was previously registered in the HII Database. @param[in] Language The specified configure language to get string. @param[in] StringId The identifier of the string to retrieved from the string package associated with HiiHandle. @retval NULL The string specified by StringId is not present in the string package. @retval Other The string was returned. **/ CHAR8 * HiiGetRedfishAsciiString ( IN EFI_HII_HANDLE HiiHandle, IN CHAR8 *Language, IN EFI_STRING_ID StringId ); /** Get ASCII string from HII database in English language. The returned string is allocated using AllocatePool(). The caller is responsible for freeing the allocated buffer using FreePool(). @param[in] HiiHandle A handle that was previously registered in the HII Database. @param[in] StringId The identifier of the string to retrieved from the string package associated with HiiHandle. @retval NULL The string specified by StringId is not present in the string package. @retval Other The string was returned. **/ CHAR8 * HiiGetEnglishAsciiString ( IN EFI_HII_HANDLE HiiHandle, IN EFI_STRING_ID StringId ); /** Release all resource in statement list. @param[in] StatementList Statement list to be released. @retval EFI_SUCCESS All resource are released. @retval EFI_INVALID_PARAMETER StatementList is NULL. **/ EFI_STATUS ReleaseStatementList ( IN REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE_LIST *StatementList ); #endif