Reviewed-by: Nickle Wang <nick...@nvidia.com>

Regards,
Nickle

> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Chang, Abner
> via groups.io
> Sent: Tuesday, March 26, 2024 11:15 PM
> To: devel@edk2.groups.io
> Cc: Abner Chang <abner.ch...@amd.com>; Igor Kulchytskyy <ig...@ami.com>
> Subject: [edk2-devel] [PATCH V2 6/6] RedfishPkg/RedfishPlatformConfigDxe:
> support menu path report
> 
> External email: Use caution opening links or attachments
> 
> 
> 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 (#117156): https://edk2.groups.io/g/devel/message/117156
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]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to