From 6fb3cc05dc8742ddbe7ea1038dd0111aed55e799 Mon Sep 17 00:00:00 2001 From: Nickle Wang Date: Mon, 25 Mar 2024 21:28:41 +0800 Subject: RedfishPkg/RedfishPlatformConfigDxe: support menu path report "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 Cc: Abner Chang Cc: Igor Kulchytskyy Reviewed-by: Nickle Wang Reviewed-by: Igor Kulchytskyy --- .../RedfishPlatformConfigDxe.c | 8 ++-- .../RedfishPlatformConfigDxe.h | 8 ++-- .../RedfishPlatformConfigImpl.c | 51 +++++++++++++++++----- 3 files changed, 49 insertions(+), 18 deletions(-) (limited to 'RedfishPkg') diff --git a/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigDxe.c b/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigDxe.c index 86f5d3c447..8bcee5a16a 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/RedfishPlatformConfigDxe.h b/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigDxe.h index 688f2067bf..8eb7b0dc2a 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
- 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.
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/RedfishPlatformConfigImpl.c b/RedfishPkg/RedfishPlatformConfigDxe/RedfishPlatformConfigImpl.c index 03dcc8dbcd..5fcaf42610 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
- 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.
SPDX-License-Identifier: BSD-2-Clause-Patent @@ -656,8 +656,10 @@ GetStatementPrivateByConfigureLangRegex ( ++StatementList->Count; } } else { - DEBUG ((DEBUG_ERROR, "%a: HiiStatementPrivate->XuefiRedfishStr 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->XuefiRedfishStr 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->XuefiRedfishStr is NULL, x-uefi-string has something wrong.\n", __func__)); + ASSERT (FALSE); + } } } @@ -1439,7 +1446,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); @@ -1476,8 +1483,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; } @@ -1503,7 +1510,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 ( @@ -1530,6 +1537,8 @@ BuildXUefiRedfishStringDatabase ( FormsetPrivate->HiiPackageListHeader ); if (EFI_ERROR (Status)) { + FreePool (FormsetPrivate->HiiPackageListHeader); + FormsetPrivate->HiiPackageListHeader = NULL; return; } @@ -1646,8 +1655,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); @@ -1733,7 +1748,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->XuefiRedfishStr = NULL; + // + // Attach to statement list. + // + InsertTailList (&HiiFormPrivate->StatementList, &HiiStatementPrivate->Link); + } } HiiStatementLink = GetNextNode (&HiiForm->StatementListHead, HiiStatementLink); -- cgit v1.2.3