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]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to