From: Nickle Wang <nick...@nvidia.com> "MenuPath" is the attribute in BIOS attribute registry. To support reporting this attribute, we need to include the formset without x-uefi-redfish support in database. So driver can find menu path to target attribute in BIOS menu.
Signed-off-by: Nickle Wang <nick...@nvidia.com> Cc: Abner Chang <abner.ch...@amd.com> Cc: Igor Kulchytskyy <ig...@ami.com> Signed-off-by: Abner Chang <abner.ch...@amd.com> --- .../RedfishPlatformConfigDxe.h | 8 +-- .../RedfishPlatformConfigDxe.c | 8 +-- .../RedfishPlatformConfigImpl.c | 51 +++++++++++++++---- 3 files changed, 49 insertions(+), 18 deletions(-) diff --git a/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigDxe.h b/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigDxe.h index 688f2067bff..8eb7b0dc2aa 100644 --- a/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigDxe.h +++ b/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigDxe.h @@ -2,7 +2,7 @@ This file defines the EDKII Redfish Platform Config Protocol interface. (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> - Copyright (c) 2022-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + Copyright (c) 2022-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR> SPDX-License-Identifier: BSD-2-Clause-Patent @@ -49,8 +49,8 @@ // 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 +// 3. The subordinate debug enablement for RedfishPlatformConfigDxe +// must be set in PcdRedfishPlatformConfigDebugProperty (defined // in RedfishPkg.dec). // #define DEBUG_REDFISH_THIS_MODULE(DebugSubordinate, ...) \ @@ -116,7 +116,7 @@ typedef struct { #define REDFISH_MENU_PATH_SIZE 8 -// Definitions of Redfish platform config capbility +// Definitions of Redfish platform config capability #define REDFISH_PLATFORM_CONFIG_BUILD_MENU_PATH 0x000000001 #define REDFISH_PLATFORM_CONFIG_ALLOW_SUPPRESSED 0x000000002 diff --git a/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigDxe.c b/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigDxe.c index d165799f9a1..7821146e901 100644 --- a/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigDxe.c +++ b/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigDxe.c @@ -2016,7 +2016,7 @@ RedfishPlatformConfigProtocolGetConfigureLang ( UINTN Index; CHAR8 *FullSchema; - DEBUG ((DEBUG_INFO, "%a: Harvest config language of %a_%a (Regex: %s).\n", __func__, Schema, Version, RegexPattern)); + DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%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; @@ -2103,7 +2103,7 @@ RELEASE_RESOURCE: ReleaseStatementList (&StatementList); } - DEBUG ((DEBUG_INFO, "%a: exit.\n", __func__)); + DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%a: exit.\n", __func__)); return Status; } @@ -2318,7 +2318,7 @@ RedfishPlatformConfigProtocolGetAttribute ( CHAR8 *FullSchema; CHAR8 *Buffer; - DEBUG ((DEBUG_INFO, "%a: Entry\n", __func__)); + DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%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; } @@ -2395,7 +2395,7 @@ RELEASE_RESOURCE: FreePool (FullSchema); } - DEBUG ((DEBUG_INFO, "%a: Exit\n", __func__)); + DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%a: Exit\n", __func__)); return Status; } diff --git a/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigImpl.c b/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigImpl.c index 537ce09a2d3..86f3aa529c5 100644 --- a/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigImpl.c +++ b/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigImpl.c @@ -2,7 +2,7 @@ The implementation of EDKII Redfish Platform Config Protocol. (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP<BR> - Copyright (c) 2022-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + Copyright (c) 2022-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR> SPDX-License-Identifier: BSD-2-Clause-Patent @@ -656,8 +656,10 @@ GetStatementPrivateByConfigureLangRegex ( ++StatementList->Count; } } else { - DEBUG ((DEBUG_ERROR, "%a: HiiStatementPrivate->DescriptionStr is NULL, x-uefi-string has something wrong.\n", __func__)); - ASSERT (FALSE); + if (!RedfishPlatformConfigFeatureProp (REDFISH_PLATFORM_CONFIG_BUILD_MENU_PATH)) { + DEBUG ((DEBUG_ERROR, "%a: HiiStatementPrivate->DescriptionStr is NULL, x-uefi-string has something wrong.\n", __func__)); + ASSERT (FALSE); + } } } @@ -754,6 +756,11 @@ GetStatementPrivateByConfigureLang ( if (HiiStrCmp (TmpString, ConfigureLang) == 0) { return HiiStatementPrivate; } + } else { + if (!RedfishPlatformConfigFeatureProp (REDFISH_PLATFORM_CONFIG_BUILD_MENU_PATH)) { + DEBUG ((DEBUG_ERROR, "%a: HiiStatementPrivate->DescriptionStr is NULL, x-uefi-string has something wrong.\n", __func__)); + ASSERT (FALSE); + } } } @@ -1440,7 +1447,7 @@ GetXuefiStringAndLangByStringId ( StringIndex = StringId; while (StringIndex >= X_UEFI_REDFISH_STRING_ARRAY_ENTRY_NUMBER) { if (IsNodeAtEnd (&XuefiRedfishStringDatabase->XuefiRedfishStringArrays, &StringArray->NextArray)) { - goto ErrorEixt; + goto ErrorExit; } StringArray = (REDFISH_X_UEFI_STRINGS_ARRAY *)GetNextNode (&XuefiRedfishStringDatabase->XuefiRedfishStringArrays, &StringArray->NextArray); @@ -1477,8 +1484,8 @@ GetXuefiStringAndLangByStringId ( ); } -ErrorEixt:; - DEBUG ((DEBUG_ERROR, "%a: String ID (%d) is not in any x-uef-redfish string databases.\n", __func__, StringId)); +ErrorExit:; + DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%a: String ID (%d) is not in any x-uef-redfish string databases.\n", __func__, StringId)); return EFI_NOT_FOUND; } @@ -1504,7 +1511,7 @@ BuildXUefiRedfishStringDatabase ( UINTN TotalStringsAdded; UINTN NumberPackageStrings; - DEBUG ((DEBUG_INFO, "%a: Building x-uefi-redfish string database, HII Formset GUID - %g.\n", __func__, FormsetPrivate->Guid)); + DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%a: Building x-uefi-redfish string database, HII Formset GUID - %g.\n", __func__, FormsetPrivate->Guid)); BufferSize = 0; Status = mRedfishPlatformConfigPrivate->HiiDatabase->ExportPackageLists ( @@ -1531,6 +1538,8 @@ BuildXUefiRedfishStringDatabase ( FormsetPrivate->HiiPackageListHeader ); if (EFI_ERROR (Status)) { + FreePool (FormsetPrivate->HiiPackageListHeader); + FormsetPrivate->HiiPackageListHeader = NULL; return; } @@ -1647,8 +1656,14 @@ LoadFormset ( FormsetPrivate->DevicePathStr = ConvertDevicePathToText (HiiFormSet->DevicePath, FALSE, FALSE); Status = GetSupportedSchema (FormsetPrivate->HiiHandle, &FormsetPrivate->SupportedSchema); if (EFI_ERROR (Status)) { - 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. + if (!RedfishPlatformConfigFeatureProp (REDFISH_PLATFORM_CONFIG_BUILD_MENU_PATH)) { + DEBUG ((DEBUG_REDFISH_PLATFORM_CONFIG, "%a: No x-uefi-redfish configuration found on the formset - %g\n", __func__, FormsetPrivate->Guid)); + // + // If there is no x-uefi-redfish language in this form-set, we don't add formset + // since we don't need to build menu path for attribute registry. + // + return EFI_UNSUPPORTED; + } } else { // Building x-uefi-redfish string database BuildXUefiRedfishStringDatabase (FormsetPrivate); @@ -1734,7 +1749,23 @@ LoadFormset ( // InsertTailList (&HiiFormPrivate->StatementList, &HiiStatementPrivate->Link); } else { - FreePool (HiiStatementPrivate); + if (!RedfishPlatformConfigFeatureProp (REDFISH_PLATFORM_CONFIG_BUILD_MENU_PATH)) { + // + // If there is no x-uefi-redfish language for this statement, we don't add this statement + // since we don't need to build menu path for attribute registry. + // + FreePool (HiiStatementPrivate); + } else { + // + // This is not x-uefi-redfish string and we don't cache its string for searching Redfish configure language. + // When caller wants the string, we will read English string by calling HiiGetString(). + // + HiiStatementPrivate->DescriptionStr = NULL; + // + // Attach to statement list. + // + InsertTailList (&HiiFormPrivate->StatementList, &HiiStatementPrivate->Link); + } } HiiStatementLink = GetNextNode (&HiiForm->StatementListHead, HiiStatementLink); -- 2.37.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#117128): https://edk2.groups.io/g/devel/message/117128 Mute This Topic: https://groups.io/mt/105159789/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-