RedfishPkg/RedfishPlatformConfigDxe:Add RefishDebugLib support

Add RedfishPlatformConfigDxe debug capability that aligns
with edk2 Redfish debug mechanism.

- PcdRedfishPlatformConfigDebugProperty, add PCD to control
  RedfishPlatformConfigDxe subordinate of Redfish debug
  capabilities.
- PcdRedfishPlatformConfigFeatureProperty, add PCD to
  manage RedfishPlatformConfigDxe features.

Signed-off-by: Abner Chang <abner.chang@amd.com>
Co-authored-by: Nickle Wang <nicklew@nvidia.com>
Cc: Igor Kulchytskyy <igork@ami.com>
Reviewed-by: Nickle Wang <nicklew@nvidia.com>
Reviewed-by: Igor Kulchytskyy <igork@ami.com>
This commit is contained in:
Abner Chang 2024-03-18 11:18:32 +08:00 committed by mergify[bot]
parent b0be42516e
commit c8f56800fd
7 changed files with 262 additions and 59 deletions

View File

@ -193,3 +193,18 @@
# 0x0000000000000001 RedfishPlatformConfigDxe driver debug enabled.
#
gEfiRedfishPkgTokenSpaceGuid.PcdRedfishDebugCategory|0|UINT64|0x00001012
#
# Redfish RedfishPlatformConfigDxe Debug Properties
# 0x00000001 x-uefi-redfish string database message enabled
# 0x00000002 Debug Message for dumping formset
# 0x00000004 Debug Message for x-uefi-redfish searching result
# 0x00000008 Debug Message for x-uefi-redfish Regular Expression searching result
#
gEfiRedfishPkgTokenSpaceGuid.PcdRedfishPlatformConfigDebugProperty|0|UINT32|0x00001013
#
# RedfishPlatformConfigDxe feature enablement
# 0x00000001 Enable building Redfish Attribute Registry menu path.
# 0x00000002 Allow supressed HII option to be exposed on Redfish.
#
# Redfish RedfishPlatformConfigDxe feature Properties
gEfiRedfishPkgTokenSpaceGuid.PcdRedfishPlatformConfigFeatureProperty|0|UINT32|0x00001014

View File

@ -0,0 +1,58 @@
/** @file
The implementation of EDKII Redfish Platform Config Capability.
Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include "RedfishPlatformConfigDxe.h"
#include "RedfishPlatformConfigImpl.h"
/**
Check if the debug property is enabled or not.
@param[in] DebugType Debug enablement type
@retval TRUE, the debug property is enabled.
FALSE, the debug property is not enabled.
**/
BOOLEAN
RedfishPlatformConfigDebugProp (
IN UINT64 DebugType
)
{
UINT64 DebugProp;
DebugProp = FixedPcdGet64 (PcdRedfishPlatformConfigDebugProperty);
if ((DebugProp & DebugType) != 0) {
return TRUE;
}
return FALSE;
}
/**
Check if the Platform Configure feature is enabled or not.
@param[in] FeatureType Redfish platform config feature enablement
@retval TRUE, the feature is enabled.
FALSE, the feature is not enabled.
**/
BOOLEAN
RedfishPlatformConfigFeatureProp (
IN UINT64 FeatureType
)
{
UINT64 FeatureProp;
FeatureProp = FixedPcdGet64 (PcdRedfishPlatformConfigFeatureProperty);
if ((FeatureProp & FeatureType) != 0) {
return TRUE;
}
return FALSE;
}

View File

@ -315,7 +315,7 @@ DumpHiiStatementPrompt (
**/
CHAR8 *
BuildMenPath (
BuildMenuPath (
IN REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE *StatementPrivate
)
{
@ -345,7 +345,7 @@ BuildMenPath (
}
do {
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "F(%d) <-", FormPrivate->Id));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "F(%d) <-", FormPrivate->Id));
FormPrivate = FindFormLinkToThis (FormPrivate);
if (FormPrivate == NULL) {
break;
@ -387,7 +387,7 @@ BuildMenPath (
AsciiStrCatS (Buffer, OldBufferSize, "/");
AsciiStrCatS (Buffer, OldBufferSize, FormTitle);
FreePool (FormTitle);
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, " %a\n", Buffer));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, " %a\n", Buffer));
}
FormPrivate = (REDFISH_PLATFORM_CONFIG_FORM_PRIVATE *)PopRedfishStack (FormStack);
@ -1061,12 +1061,12 @@ DumpOrderedListValue (
return;
}
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "Value.Type= 0x%x\n", OrderedListStatement->Value.Type));
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "Value.BufferValueType= 0x%x\n", OrderedListStatement->Value.BufferValueType));
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "Value.BufferLen= 0x%x\n", OrderedListStatement->Value.BufferLen));
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "Value.Buffer= 0x%x\n", OrderedListStatement->Value.Buffer));
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "Value.MaxContainers= 0x%x\n", OrderedListStatement->ExtraData.OrderListData.MaxContainers));
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "StorageWidth= 0x%x\n", OrderedListStatement->StorageWidth));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "Value.Type= 0x%x\n", OrderedListStatement->Value.Type));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "Value.BufferValueType= 0x%x\n", OrderedListStatement->Value.BufferValueType));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "Value.BufferLen= 0x%x\n", OrderedListStatement->Value.BufferLen));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "Value.Buffer= 0x%x\n", OrderedListStatement->Value.Buffer));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "Value.MaxContainers= 0x%x\n", OrderedListStatement->ExtraData.OrderListData.MaxContainers));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "StorageWidth= 0x%x\n", OrderedListStatement->StorageWidth));
if (OrderedListStatement->Value.Buffer == NULL) {
return;
@ -1083,7 +1083,7 @@ DumpOrderedListValue (
Value8 = (UINT8 *)OrderedListStatement->Value.Buffer;
Count = OrderedListStatement->StorageWidth / sizeof (UINT8);
for (Index = 0; Index < Count; Index++) {
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "%d ", Value8[Index]));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%d ", Value8[Index]));
}
break;
@ -1091,7 +1091,7 @@ DumpOrderedListValue (
Value16 = (UINT16 *)OrderedListStatement->Value.Buffer;
Count = OrderedListStatement->StorageWidth / sizeof (UINT16);
for (Index = 0; Index < Count; Index++) {
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "%d ", Value16[Index]));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%d ", Value16[Index]));
}
break;
@ -1099,7 +1099,7 @@ DumpOrderedListValue (
Value32 = (UINT32 *)OrderedListStatement->Value.Buffer;
Count = OrderedListStatement->StorageWidth / sizeof (UINT32);
for (Index = 0; Index < Count; Index++) {
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "%d ", Value32[Index]));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%d ", Value32[Index]));
}
break;
@ -1107,7 +1107,7 @@ DumpOrderedListValue (
Value64 = (UINT64 *)OrderedListStatement->Value.Buffer;
Count = OrderedListStatement->StorageWidth / sizeof (UINT64);
for (Index = 0; Index < Count; Index++) {
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "%d ", Value64[Index]));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%d ", Value64[Index]));
}
break;
@ -1115,13 +1115,13 @@ DumpOrderedListValue (
Value8 = (UINT8 *)OrderedListStatement->Value.Buffer;
Count = OrderedListStatement->StorageWidth / sizeof (UINT8);
for (Index = 0; Index < Count; Index++) {
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "%d ", Value8[Index]));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%d ", Value8[Index]));
}
break;
}
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "\n"));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "\n"));
}
/**
@ -2013,6 +2013,8 @@ RedfishPlatformConfigProtocolGetConfigureLang (
UINTN Index;
CHAR8 *FullSchema;
DEBUG ((DEBUG_INFO, "%a: Harvest config language of %a_%a (Regex: %s).\n", __func__, Schema, Version, RegexPattern));
if ((This == NULL) || IS_EMPTY_STRING (Schema) || IS_EMPTY_STRING (Version) || (Count == NULL) || (ConfigureLangList == NULL) || IS_EMPTY_STRING (RegexPattern)) {
return EFI_INVALID_PARAMETER;
}
@ -2072,6 +2074,22 @@ RedfishPlatformConfigProtocolGetConfigureLang (
*Count = StatementList.Count;
*ConfigureLangList = TmpConfigureLangList;
DEBUG_REDFISH_THIS_MODULE (
REDFISH_PLATFORM_CONFIG_DEBUG_CONFIG_LANG_REGEX,
"%a: Number of configure language strings harvested: %d\n",
__func__,
StatementList.Count
);
DEBUG_REDFISH_THIS_MODULE_CODE (
REDFISH_PLATFORM_CONFIG_DEBUG_CONFIG_LANG_REGEX,
DEBUG_REDFISH (DEBUG_REDFISH_COMPONENT_PLATFORM_CONFIG_DXE, "%a: Number of configure language strings harvested: %d\n", __func__, StatementList.Count);
for (Index = 0; Index < *Count; Index++) {
DEBUG_REDFISH (DEBUG_REDFISH_COMPONENT_PLATFORM_CONFIG_DXE, " (%d) %s\n", Index, TmpConfigureLangList[Index]);
}
);
RELEASE_RESOURCE:
if (FullSchema != NULL) {
@ -2082,6 +2100,7 @@ RELEASE_RESOURCE:
ReleaseStatementList (&StatementList);
}
DEBUG ((DEBUG_INFO, "%a: exit.\n", __func__));
return Status;
}
@ -2296,6 +2315,7 @@ RedfishPlatformConfigProtocolGetAttribute (
CHAR8 *FullSchema;
CHAR8 *Buffer;
DEBUG ((DEBUG_INFO, "%a: Entry\n", __func__));
if ((This == NULL) || IS_EMPTY_STRING (Schema) || IS_EMPTY_STRING (Version) || IS_EMPTY_STRING (ConfigureLang) || (AttributeValue == NULL)) {
return EFI_INVALID_PARAMETER;
}
@ -2337,9 +2357,11 @@ RedfishPlatformConfigProtocolGetAttribute (
//
// Build up menu path
//
AttributeValue->MenuPath = BuildMenPath (TargetStatement);
if (AttributeValue->MenuPath == NULL) {
DEBUG ((DEBUG_ERROR, "%a: failed to build menu path for \"%a\"\n", __func__, AttributeValue->AttributeName));
if (RedfishPlatformConfigFeatureProp (REDFISH_PLATFORM_CONFIG_BUILD_MENU_PATH)) {
AttributeValue->MenuPath = BuildMenuPath (TargetStatement);
if (AttributeValue->MenuPath == NULL) {
DEBUG ((DEBUG_ERROR, "%a: failed to build menu path for \"%a\"\n", __func__, AttributeValue->AttributeName));
}
}
//
@ -2370,6 +2392,7 @@ RELEASE_RESOURCE:
FreePool (FullSchema);
}
DEBUG ((DEBUG_INFO, "%a: Exit\n", __func__));
return Status;
}

View File

@ -3,6 +3,7 @@
(C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
Copyright (c) 2022-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
@ -20,7 +21,9 @@
#include <Library/BaseMemoryLib.h>
#include <Library/DebugLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/PcdLib.h>
#include <Library/PrintLib.h>
#include <Library/RedfishDebugLib.h>
#include <Library/UefiLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiDriverEntryPoint.h>
@ -37,6 +40,41 @@
//
#include <Protocol/EdkIIRedfishPlatformConfig.h>
//
// Debug message in DEBUG_REDFISH_COMPONENT_PLATFORM_CONFIG_DXE scope.
// To enable the debug message for this module, below PCDs must be set.
//
// 1. DEBUG_MANAGEABILITY must be set PcdDebugPrintErrorLevel.
//
// 2 RedfishPlatformConfigDxe debug enablement must be set in
// PcdRedfishDebugCategory (defined in RedfishPkg.dec)
//
// 3. The suborinate debug enablement for RedfishPlatformConfigDxe
// must be set in PcdRedfishPlatformConfigDebugPropert (defined
// in RedfishPkg.dec).
//
#define DEBUG_REDFISH_THIS_MODULE(DebugSubordinate, ...) \
while (RedfishPlatformConfigDebugProp (DebugSubordinate)) { \
DEBUG_REDFISH(DEBUG_REDFISH_COMPONENT_PLATFORM_CONFIG_DXE, ##__VA_ARGS__); \
break; \
}
#define DEBUG_REDFISH_THIS_MODULE_CODE_BEGIN(DebugSubordinate) \
if (RedfishPlatformConfigDebugProp (DebugSubordinate)) {
#define DEBUG_REDFISH_THIS_MODULE_CODE_END() }
#define DEBUG_REDFISH_THIS_MODULE_CODE(DebugSubordinate, Expression) \
DEBUG_REDFISH_THIS_MODULE_CODE_BEGIN(DebugSubordinate) \
Expression \
DEBUG_REDFISH_THIS_MODULE_CODE_END()
// Subordinate debug property for DEBUG_REDFISH_PLATFORM_CONFIG_DXE
#define REDFISH_PLATFORM_CONFIG_DEBUG_STRING_DATABASE 0x00000001
#define REDFISH_PLATFORM_CONFIG_DEBUG_DUMP_FORMSET 0x00000002
#define REDFISH_PLATFORM_CONFIG_DEBUG_CONFIG_LANG_SEARCH 0x00000004
#define REDFISH_PLATFORM_CONFIG_DEBUG_CONFIG_LANG_REGEX 0x00000008
///
/// Definition of EDKII_REDFISH_PLATFORM_CONFIG_NOTIFY.
///
@ -75,8 +113,12 @@ typedef struct {
#define REGULAR_EXPRESSION_INCLUDE_ALL L".*"
#define CONFIGURE_LANGUAGE_PREFIX "x-uefi-redfish-"
#define REDFISH_PLATFORM_CONFIG_VERSION 0x00010000
#define REDFISH_PLATFORM_CONFIG_DEBUG DEBUG_MANAGEABILITY
#define REDFISH_MENU_PATH_SIZE 8
#define REDFISH_MENU_PATH_SIZE 8
// Definitions of Redfish platform config capbility
#define REDFISH_PLATFORM_CONFIG_BUILD_MENU_PATH 0x000000001
#define REDFISH_PLATFORM_CONFIG_ALLOW_SUPPRESSED 0x000000002
/**
Convert input unicode string to ascii string. It's caller's

View File

@ -3,6 +3,7 @@
#
# (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
# Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
@ -23,6 +24,7 @@
RedfishPkg/RedfishPkg.dec
[Sources]
RedfishPlatformConfigCapability.c
RedfishPlatformConfigDxe.h
RedfishPlatformConfigDxe.c
RedfishPlatformConfigImpl.h
@ -36,7 +38,9 @@
HiiLib
HiiUtilityLib
MemoryAllocationLib
PcdLib
PrintLib
RedfishDebugLib
UefiLib
UefiBootServicesTableLib
UefiRuntimeServicesTableLib
@ -51,5 +55,9 @@
[Guids]
gEfiRegexSyntaxTypePerlGuid ## CONSUMED
[FixedPcd]
gEfiRedfishPkgTokenSpaceGuid.PcdRedfishPlatformConfigFeatureProperty
gEfiRedfishPkgTokenSpaceGuid.PcdRedfishPlatformConfigDebugProperty
[Depex]
TRUE

View File

@ -32,7 +32,7 @@ DumpHiiString (
EFI_STRING String;
if ((HiiHandle == NULL) || (StringId == 0)) {
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "???"));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "???"));
return EFI_INVALID_PARAMETER;
}
@ -41,7 +41,7 @@ DumpHiiString (
return EFI_NOT_FOUND;
}
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "%s", String));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%s", String));
FreePool (String);
return EFI_SUCCESS;
@ -79,18 +79,18 @@ DumpFormset (
HiiFormPrivate = REDFISH_PLATFORM_CONFIG_FORM_FROM_LINK (HiiFormLink);
HiiNextFormLink = GetNextNode (&FormsetPrivate->HiiFormList, HiiFormLink);
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, " [%d] form: %d title: ", ++Index, HiiFormPrivate->Id));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, " [%d] form: %d title: ", ++Index, HiiFormPrivate->Id));
DumpHiiString (FormsetPrivate->HiiHandle, HiiFormPrivate->Title);
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "\n"));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "\n"));
HiiStatementLink = GetFirstNode (&HiiFormPrivate->StatementList);
while (!IsNull (&HiiFormPrivate->StatementList, HiiStatementLink)) {
HiiStatementPrivate = REDFISH_PLATFORM_CONFIG_STATEMENT_FROM_LINK (HiiStatementLink);
HiiNextStatementLink = GetNextNode (&HiiFormPrivate->StatementList, HiiStatementLink);
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, " QID: 0x%x Prompt: ", HiiStatementPrivate->QuestionId));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, " QID: 0x%x Prompt: ", HiiStatementPrivate->QuestionId));
DumpHiiString (FormsetPrivate->HiiHandle, HiiStatementPrivate->Description);
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "\n"));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "\n"));
HiiStatementLink = HiiNextStatementLink;
}
@ -125,7 +125,7 @@ DumpFormsetList (
}
if (IsListEmpty (FormsetList)) {
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "%a: Empty formset list\n", __func__));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%a: Empty formset list\n", __func__));
return EFI_SUCCESS;
}
@ -135,7 +135,7 @@ DumpFormsetList (
HiiFormsetNextLink = GetNextNode (FormsetList, HiiFormsetLink);
HiiFormsetPrivate = REDFISH_PLATFORM_CONFIG_FORMSET_FROM_LINK (HiiFormsetLink);
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "[%d] HII Handle: 0x%x formset: %g at %s\n", ++Index, HiiFormsetPrivate->HiiHandle, &HiiFormsetPrivate->Guid, HiiFormsetPrivate->DevicePathStr));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "[%d] HII Handle: 0x%x formset: %g at %s\n", ++Index, HiiFormsetPrivate->HiiHandle, &HiiFormsetPrivate->Guid, HiiFormsetPrivate->DevicePathStr));
DumpFormset (HiiFormsetPrivate);
HiiFormsetLink = HiiFormsetNextLink;
@ -622,7 +622,9 @@ GetStatementPrivateByConfigureLangRegex (
HiiNextStatementLink = GetNextNode (&HiiFormPrivate->StatementList, HiiStatementLink);
HiiStatementPrivate = REDFISH_PLATFORM_CONFIG_STATEMENT_FROM_LINK (HiiStatementLink);
if ((HiiStatementPrivate->Description != 0) && !HiiStatementPrivate->Suppressed) {
if ((HiiStatementPrivate->Description != 0) &&
(RedfishPlatformConfigFeatureProp (REDFISH_PLATFORM_CONFIG_ALLOW_SUPPRESSED) || !HiiStatementPrivate->Suppressed))
{
TmpString = HiiStatementPrivate->XuefiRedfishStr;
if (TmpString != NULL) {
Status = RegularExpressionProtocol->MatchString (
@ -698,6 +700,7 @@ GetStatementPrivateByConfigureLang (
LIST_ENTRY *HiiNextStatementLink;
REDFISH_PLATFORM_CONFIG_STATEMENT_PRIVATE *HiiStatementPrivate;
EFI_STRING TmpString;
UINTN Index;
if ((FormsetList == NULL) || IS_EMPTY_STRING (Schema) || IS_EMPTY_STRING (ConfigureLang)) {
return NULL;
@ -707,6 +710,7 @@ GetStatementPrivateByConfigureLang (
return NULL;
}
Index = 0;
HiiFormsetLink = GetFirstNode (FormsetList);
while (!IsNull (FormsetList, HiiFormsetLink)) {
HiiFormsetNextLink = GetNextNode (FormsetList, HiiFormsetLink);
@ -731,15 +735,22 @@ GetStatementPrivateByConfigureLang (
HiiNextStatementLink = GetNextNode (&HiiFormPrivate->StatementList, HiiStatementLink);
HiiStatementPrivate = REDFISH_PLATFORM_CONFIG_STATEMENT_FROM_LINK (HiiStatementLink);
DEBUG_CODE (
STATIC UINTN Index = 0;
Index++;
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "%a: [%d] search %s in QID: 0x%x form: 0x%x formset: %g\n", __func__, Index, ConfigureLang, HiiStatementPrivate->QuestionId, HiiFormPrivate->Id, &HiiFormsetPrivate->Guid));
);
if (HiiStatementPrivate->Description != 0) {
if ((HiiStatementPrivate->Description != 0) &&
(RedfishPlatformConfigFeatureProp (REDFISH_PLATFORM_CONFIG_ALLOW_SUPPRESSED) || !HiiStatementPrivate->Suppressed))
{
TmpString = HiiStatementPrivate->XuefiRedfishStr;
if (TmpString != NULL) {
Index++;
DEBUG_REDFISH_THIS_MODULE (
REDFISH_PLATFORM_CONFIG_DEBUG_CONFIG_LANG_SEARCH,
"%a: [%d] check %s in QID: 0x%x form: 0x%x formset: %g\n",
__func__,
Index,
ConfigureLang,
HiiStatementPrivate->QuestionId,
HiiFormPrivate->Id,
&HiiFormsetPrivate->Guid
);
if (HiiStrCmp (TmpString, ConfigureLang) == 0) {
return HiiStatementPrivate;
}
@ -1020,7 +1031,7 @@ NewRedfishXuefiStringArray (
**/
REDFISH_X_UEFI_STRING_DATABASE *
GetExitOrCreateXuefiStringDatabase (
GetExistOrCreateXuefiStringDatabase (
IN REDFISH_PLATFORM_CONFIG_FORM_SET_PRIVATE *FormsetPrivate,
IN EFI_HII_STRING_PACKAGE_HDR *HiiStringPackageHeader
)
@ -1029,8 +1040,6 @@ GetExitOrCreateXuefiStringDatabase (
BOOLEAN CreateNewOne;
REDFISH_X_UEFI_STRING_DATABASE *XuefiRedfishStringDatabase;
DEBUG ((DEBUG_INFO, "%a: Entry\n", __func__));
CreateNewOne = TRUE;
XuefiRedfishStringDatabase = NULL;
if (!IsListEmpty (&FormsetPrivate->XuefiRedfishStringDatabase)) {
@ -1052,7 +1061,7 @@ GetExitOrCreateXuefiStringDatabase (
}
if (CreateNewOne) {
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, " Creating x-uefi-redfish (%a) string database...\n", HiiStringPackageHeader->Language));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, " Creating x-uefi-redfish (%a) string database...\n", HiiStringPackageHeader->Language));
XuefiRedfishStringDatabase = (REDFISH_X_UEFI_STRING_DATABASE *)AllocateZeroPool (sizeof (REDFISH_X_UEFI_STRING_DATABASE));
if (XuefiRedfishStringDatabase == NULL) {
DEBUG ((DEBUG_ERROR, " Failed to allocate REDFISH_X_UEFI_STRING_DATABASE.\n"));
@ -1071,7 +1080,7 @@ GetExitOrCreateXuefiStringDatabase (
}
DEBUG ((
REDFISH_PLATFORM_CONFIG_DEBUG,
DEBUG_REDFISH_PLATFORM_CONFIG,
" x-uefi-redfish (%a):\n String array is added to XuefiRedfishStringDatabase, total %d arrays now.\n",
XuefiRedfishStringDatabase->XuefiRedfishLanguage,
XuefiRedfishStringDatabase->StringsArrayBlocks
@ -1143,7 +1152,7 @@ RedfishXuefiStringInsertDatabase (
REDFISH_X_UEFI_STRING_DATABASE *XuefiRedfishStringDatabase;
REDFISH_X_UEFI_STRINGS_ARRAY *ThisArray;
XuefiRedfishStringDatabase = GetExitOrCreateXuefiStringDatabase (FormsetPrivate, HiiStringPackageHeader);
XuefiRedfishStringDatabase = GetExistOrCreateXuefiStringDatabase (FormsetPrivate, HiiStringPackageHeader);
if (XuefiRedfishStringDatabase == NULL) {
DEBUG ((DEBUG_ERROR, "%a: Failed to get REDFISH_X_UEFI_STRING_DATABASE of x-uefi-redfish language %a.\n", __func__, HiiStringPackageHeader->Language));
ReleaseXuefiStringDatabase (FormsetPrivate);
@ -1169,21 +1178,22 @@ RedfishXuefiStringInsertDatabase (
(ThisArray->ArrayEntryAddress + StringIdOffset)->StringId = StringId;
(ThisArray->ArrayEntryAddress + StringIdOffset)->UcsString = StringTextPtr;
DEBUG ((
REDFISH_PLATFORM_CONFIG_DEBUG,
DEBUG_REDFISH_THIS_MODULE (
REDFISH_PLATFORM_CONFIG_DEBUG_STRING_DATABASE,
" Insert string ID: (%d) to database\n x-uefi-string: \"%s\"\n Language: %a.\n",
StringId,
StringTextPtr,
HiiStringPackageHeader->Language
));
);
return EFI_SUCCESS;
}
/**
Get x-uefi-redfish string and language by string ID.
@param[in] FormsetPrivate Pointer to HII form-set private instance.
@param[in] HiiStringPackageHeader HII string package header.
@param[in] FormsetPrivate Pointer to HII form-set private instance.
@param[in] HiiStringPackageHeader HII string package header.
@param[out] TotalStringAdded Return the total strings added to database.
@retval TRUE x-uefi-redfish string and ID map is inserted to database.
FALSE Something is wrong when insert x-uefi-redfish string and ID map.
@ -1191,8 +1201,9 @@ RedfishXuefiStringInsertDatabase (
**/
BOOLEAN
CreateXuefiLanguageStringIdMap (
IN REDFISH_PLATFORM_CONFIG_FORM_SET_PRIVATE *FormsetPrivate,
IN EFI_HII_STRING_PACKAGE_HDR *HiiStringPackageHeader
IN REDFISH_PLATFORM_CONFIG_FORM_SET_PRIVATE *FormsetPrivate,
IN EFI_HII_STRING_PACKAGE_HDR *HiiStringPackageHeader,
OUT UINTN *TotalStringAdded
)
{
EFI_STATUS Status;
@ -1208,6 +1219,9 @@ CreateXuefiLanguageStringIdMap (
EFI_HII_SIBT_EXT2_BLOCK Ext2;
UINT32 Length32;
UINT8 *StringBlockInfo;
UINTN StringsAdded;
StringsAdded = 0;
//
// Parse the string blocks to get the string text and font.
@ -1279,6 +1293,8 @@ CreateXuefiLanguageStringIdMap (
DEBUG ((DEBUG_ERROR, "%a: Failed to insert x-uefi-redfish string %s.\n", __func__, StringTextPtr));
return FALSE;
}
StringsAdded++;
}
BlockSize += (Offset + HiiStrSize ((CHAR16 *)StringTextPtr));
@ -1370,6 +1386,7 @@ CreateXuefiLanguageStringIdMap (
BlockHdr = (UINT8 *)(StringBlockInfo + BlockSize);
}
*TotalStringAdded = StringsAdded;
return TRUE;
}
@ -1483,6 +1500,8 @@ BuildXUefiRedfishStringDatabase (
UINTN SupportedSchemaLangCount;
CHAR8 **SupportedSchemaLang;
BOOLEAN StringIdMapIsBuilt;
UINTN TotalStringsAdded;
UINTN NumberPackageStrings;
DEBUG ((DEBUG_INFO, "%a: Building x-uefi-redfish string database, HII Formset GUID - %g.\n", __func__, FormsetPrivate->Guid));
@ -1514,6 +1533,7 @@ BuildXUefiRedfishStringDatabase (
return;
}
TotalStringsAdded = 0;
//
// Finding the string package.
//
@ -1538,14 +1558,18 @@ BuildXUefiRedfishStringDatabase (
AsciiStrLen (HiiStringPackageHeader->Language)
) == 0)
{
StringIdMapIsBuilt = CreateXuefiLanguageStringIdMap (FormsetPrivate, HiiStringPackageHeader);
StringIdMapIsBuilt = CreateXuefiLanguageStringIdMap (FormsetPrivate, HiiStringPackageHeader, &NumberPackageStrings);
if (StringIdMapIsBuilt) {
TotalStringsAdded += NumberPackageStrings;
}
break;
}
}
if (StringIdMapIsBuilt == FALSE) {
if (AsciiStrStr (HiiStringPackageHeader->Language, X_UEFI_SCHEMA_PREFIX) == NULL) {
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, " No need to build x-uefi-redfish string ID map for HII language %a\n", HiiStringPackageHeader->Language));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, " No need to build x-uefi-redfish string ID map for HII language %a\n", HiiStringPackageHeader->Language));
} else {
DEBUG ((DEBUG_ERROR, " Failed to build x-uefi-redfish string ID map of HII language %a\n", HiiStringPackageHeader->Language));
}
@ -1555,6 +1579,8 @@ BuildXUefiRedfishStringDatabase (
PackageHeader = (EFI_HII_PACKAGE_HEADER *)((UINTN)PackageHeader + PackageHeader->Length);
}
}
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, " Total %d x-uefi-redfish config language are added.\n", TotalStringsAdded));
}
/**
@ -1620,7 +1646,7 @@ LoadFormset (
FormsetPrivate->DevicePathStr = ConvertDevicePathToText (HiiFormSet->DevicePath, FALSE, FALSE);
Status = GetSupportedSchema (FormsetPrivate->HiiHandle, &FormsetPrivate->SupportedSchema);
if (EFI_ERROR (Status)) {
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "%a: No x-uefi-redfish configuration found on the formset - %g\n", __func__, FormsetPrivate->Guid));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%a: No x-uefi-redfish configuration found on the formset - %g\n", __func__, FormsetPrivate->Guid));
return EFI_UNSUPPORTED; // Can't build AttributeRegistry Meni path with returning EFI_UNSUPPORTED.
} else {
// Building x-uefi-redfish string database
@ -1788,7 +1814,10 @@ LoadFormsetList (
InsertTailList (FormsetList, &FormsetPrivate->Link);
DEBUG_CODE (
if (RedfishPlatformConfigDebugProp (REDFISH_PLATFORM_CONFIG_DEBUG_DUMP_FORMSET)) {
DumpFormsetList (FormsetList);
}
);
return EFI_SUCCESS;
@ -1908,7 +1937,7 @@ NotifyFormsetUpdate (
if (TargetPendingList != NULL) {
TargetPendingList->IsDeleted = FALSE;
DEBUG_CODE (
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "%a: HII handle: 0x%x is updated\n", __func__, HiiHandle));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%a: HII handle: 0x%x is updated\n", __func__, HiiHandle));
);
return EFI_SUCCESS;
}
@ -1924,7 +1953,7 @@ NotifyFormsetUpdate (
InsertTailList (PendingList, &TargetPendingList->Link);
DEBUG_CODE (
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "%a: HII handle: 0x%x is created\n", __func__, HiiHandle));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%a: HII handle: 0x%x is created\n", __func__, HiiHandle));
);
return EFI_SUCCESS;
@ -1961,7 +1990,7 @@ NotifyFormsetDeleted (
if (TargetPendingList != NULL) {
TargetPendingList->IsDeleted = TRUE;
DEBUG_CODE (
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "%a: HII handle: 0x%x is updated and deleted\n", __func__, HiiHandle));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%a: HII handle: 0x%x is updated and deleted\n", __func__, HiiHandle));
);
return EFI_SUCCESS;
}
@ -1977,7 +2006,7 @@ NotifyFormsetDeleted (
InsertTailList (PendingList, &TargetPendingList->Link);
DEBUG_CODE (
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "%a: HII handle: 0x%x is deleted\n", __func__, HiiHandle));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%a: HII handle: 0x%x is deleted\n", __func__, HiiHandle));
);
return EFI_SUCCESS;
@ -2026,12 +2055,12 @@ ProcessPendingList (
//
FormsetPrivate = GetFormsetPrivateByHiiHandle (Target->HiiHandle, FormsetList);
if (FormsetPrivate != NULL) {
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "%a: formset: %g is removed because driver release HII resource it already\n", __func__, FormsetPrivate->Guid));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%a: formset: %g is removed because driver release HII resource it already\n", __func__, FormsetPrivate->Guid));
RemoveEntryList (&FormsetPrivate->Link);
ReleaseFormset (FormsetPrivate);
FreePool (FormsetPrivate);
} else {
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "%a: formset on HII handle 0x%x was removed already\n", __func__, Target->HiiHandle));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%a: formset on HII handle 0x%x was removed already\n", __func__, Target->HiiHandle));
}
} else {
//
@ -2042,7 +2071,7 @@ ProcessPendingList (
//
// HII formset already exist, release it and query again.
//
DEBUG ((REDFISH_PLATFORM_CONFIG_DEBUG, "%a: formset: %g is updated. Release current formset\n", __func__, &FormsetPrivate->Guid));
DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%a: formset: %g is updated. Release current formset\n", __func__, &FormsetPrivate->Guid));
RemoveEntryList (&FormsetPrivate->Link);
ReleaseFormset (FormsetPrivate);
FreePool (FormsetPrivate);

View File

@ -418,4 +418,32 @@ HiiStrSize (
IN CONST CHAR16 *String
);
/**
Check if the debug property is enabled or not.
@param[in] DebugType Debug enablement type
@retval TRUE, the debug property is enabled.
FALSE, the debug property is not enabled.
**/
BOOLEAN
RedfishPlatformConfigDebugProp (
IN UINT64 DebugProp
);
/**
Check if the Platform Configure feature is enabled or not.
@param[in] FeatureType Redfish platform config feature enablement
@retval TRUE, the feature is enabled.
FALSE, the feature is not enabled.
**/
BOOLEAN
RedfishPlatformConfigFeatureProp (
IN UINT64 FeatureProp
);
#endif