* [edk2-redfish-client][PATCH 1/3] RedfishClientPkg: Add a sample memory configuration HII driver
@ 2023-06-06 13:38 Nickle Wang
2023-06-07 6:56 ` Chang, Abner
0 siblings, 1 reply; 2+ messages in thread
From: Nickle Wang @ 2023-06-06 13:38 UTC (permalink / raw)
To: devel; +Cc: Abner Chang, Igor Kulchytskyy
This is an HII sample driver of memory configuration. This demonstrates
the communication between platform configuration (EDK2/HII) and Redfish
service (Memory resource) base on RedfishClientPkg.
The language ("x-uef-redfish-*") defined in the Redfish-specific uni file
is the connection between HII configuration and the Redfish schema.
e.g.
The HII option strings those applied with "x-uef-redfish-* HII language
are connected to the corresponding Redfish properties.
e.g.
x-uefi-redfish-Memory.v1_7_1 "/Memory/{1}/BaseModuleType"
The changes made on BIOS setup page or remote (OOB to Redfish service)
will be sync-up each other through EDKII Redfish feature driver using
the transport (REST_EX) provided by RedfishPkg.
On EDK2, HTTP based REST EX protocol instance is used to consume and
update the Redfish properties.
Check this for the RedfishClientPkg design architecture,
https://github.com/tianocore/edk2-redfish-client/blob/main/RedfishClientPkg/Readme.md
Below for RedfishPkg design architecture,
https://github.com/tianocore/edk2/blob/master/RedfishPkg/Readme.md
Signed-off-by: Nickle Wang <nicklew@nvidia.com>
Cc: Abner Chang <abner.chang@amd.com>
Cc: Igor Kulchytskyy <igork@ami.com>
---
RedfishClientPkg/RedfishClientPkg.dec | 2 +
.../RedfishClientComponents.dsc.inc | 2 +
RedfishClientPkg/RedfishClientPkg.dsc | 2 +
.../Hii2RedfishMemoryDxe.inf | 56 ++++
.../Hii2RedfishMemoryData.h | 71 +++++
.../Hii2RedfishMemoryDxe.h | 44 +++
.../Hii2RedfishMemoryVfr.vfr | 219 +++++++++++++
.../Hii2RedfishMemoryDxe.c | 292 ++++++++++++++++++
.../Hii2RedfishMemoryDxeMap.uni | 38 +++
.../Hii2RedfishMemoryDxeStrings.uni | 68 ++++
RedfishClientPkg/RedfishClient.fdf.inc | 4 +-
11 files changed, 797 insertions(+), 1 deletion(-)
create mode 100644 RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.inf
create mode 100644 RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryData.h
create mode 100644 RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.h
create mode 100644 RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryVfr.vfr
create mode 100644 RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.c
create mode 100644 RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeMap.uni
create mode 100644 RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeStrings.uni
diff --git a/RedfishClientPkg/RedfishClientPkg.dec b/RedfishClientPkg/RedfishClientPkg.dec
index 84bceca3..af241cf6 100644
--- a/RedfishClientPkg/RedfishClientPkg.dec
+++ b/RedfishClientPkg/RedfishClientPkg.dec
@@ -57,6 +57,8 @@
## Include/RedfishBase.h
gEfiRedfishClientVariableGuid = { 0x91c46a3d, 0xed1a, 0x477b, { 0xa5, 0x33, 0x87, 0x2d, 0xcd, 0xb0, 0xfc, 0xc1 } }
+ gHii2RedfishMemoryFormsetGuid = { 0XC2BE579E, 0X3C57, 0X499C, { 0XA9, 0XDF, 0XE6, 0X23, 0X8A, 0X49, 0X64, 0XF8 }}
+
[PcdsFixedAtBuild]
gEfiRedfishClientPkgTokenSpaceGuid.PcdMaxRedfishSchemaStringSize|32|UINT32|0x10000001
gEfiRedfishClientPkgTokenSpaceGuid.PcdMaxRedfishSchemaVersionSize|8|UINT32|0x10000002
diff --git a/RedfishClientPkg/RedfishClientComponents.dsc.inc b/RedfishClientPkg/RedfishClientComponents.dsc.inc
index e83f4bc9..3451c185 100644
--- a/RedfishClientPkg/RedfishClientComponents.dsc.inc
+++ b/RedfishClientPkg/RedfishClientComponents.dsc.inc
@@ -7,6 +7,7 @@
# "RedfishClientDefines.dsc.inc".
#
# (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP<BR>
+# Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
@@ -16,6 +17,7 @@
RedfishClientPkg/RedfishFeatureCoreDxe/RedfishFeatureCoreDxe.inf
RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.inf
RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.inf
+ RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.inf
!endif
#
# Below two modules should be pulled in by build tool.
diff --git a/RedfishClientPkg/RedfishClientPkg.dsc b/RedfishClientPkg/RedfishClientPkg.dsc
index d3b645b6..ac9f8e9d 100644
--- a/RedfishClientPkg/RedfishClientPkg.dsc
+++ b/RedfishClientPkg/RedfishClientPkg.dsc
@@ -37,6 +37,8 @@
Ucs2Utf8Lib|RedfishPkg/Library/BaseUcs2Utf8Lib/BaseUcs2Utf8Lib.inf
RedfishCrtLib|RedfishPkg/PrivateLibrary/RedfishCrtLib/RedfishCrtLib.inf
BaseSortLib|MdeModulePkg/Library/BaseSortLib/BaseSortLib.inf
+ HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf
+ UefiHiiServicesLib|MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf
[LibraryClasses.ARM, LibraryClasses.AARCH64]
#
diff --git a/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.inf b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.inf
new file mode 100644
index 00000000..2dd6b0dd
--- /dev/null
+++ b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.inf
@@ -0,0 +1,56 @@
+## @file
+# HII-to-Redfish memory driver.
+#
+# (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
+# Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = Hii2RedfishMemoryDxe
+ FILE_GUID = 58134796-EB3A-4635-9664-6B7F68A8A9A1
+ MODULE_TYPE = UEFI_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = Hii2RedfishMemoryDxeDriverEntryPoint
+ UNLOAD_IMAGE = Hii2RedfishMemoryDxeDriverUnload
+
+[Sources]
+ Hii2RedfishMemoryDxe.c
+ Hii2RedfishMemoryDxe.h
+ Hii2RedfishMemoryData.h
+ Hii2RedfishMemoryVfr.vfr
+ Hii2RedfishMemoryDxeStrings.uni
+ Hii2RedfishMemoryDxeMap.uni
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ RedfishClientPkg/RedfishClientPkg.dec
+
+[LibraryClasses]
+ UefiDriverEntryPoint
+ BaseLib
+ BaseMemoryLib
+ DebugLib
+ PcdLib
+ MemoryAllocationLib
+ UefiBootServicesTableLib
+ UefiRuntimeServicesTableLib
+ UefiLib
+ PrintLib
+ HiiLib
+
+[Protocols]
+ gEfiDevicePathProtocolGuid
+ gEfiHiiConfigAccessProtocolGuid
+
+
+[Guids]
+ gHii2RedfishMemoryFormsetGuid
+
+[Depex]
+ gEfiHiiDatabaseProtocolGuid
+
diff --git a/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryData.h b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryData.h
new file mode 100644
index 00000000..df8449d7
--- /dev/null
+++ b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryData.h
@@ -0,0 +1,71 @@
+/** @file
+ The header file of HII-to-Redfish memory driver.
+
+ (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef HII_2_REDFISH_MEMORY_DATA_H_
+#define HII_2_REDFISH_MEMORY_DATA_H_
+
+#include <Uefi/UefiMultiPhase.h>
+#include <Guid/HiiPlatformSetupFormset.h>
+
+#define HII_2_REDFISH_MEMORY_FORMSET_GUID \
+ { \
+ 0xC2BE579E, 0x3C57, 0x499C, { 0xA9, 0xDF, 0xE6, 0x23, 0x8A, 0x49, 0x64, 0xF8 } \
+ }
+
+extern EFI_GUID gHii2RedfishMemoryFormsetGuid;
+
+#define FORM_ID 0x001
+#define FROM_ID_MEMORY_1 0x002
+#define FROM_ID_MEMORY_2 0x003
+#define FROM_ID_MEMORY_3 0x004
+#define FROM_ID_MEMORY_4 0x005
+
+#define QUESTION_ID_MEMORY_1_BASE_MODULE_TYPE 0x100
+#define QUESTION_ID_MEMORY_1_BUS_WIDTH_BITS 0x101
+#define QUESTION_ID_MEMORY_1_CONFIGURATION_LOCKED 0x102
+
+#define QUESTION_ID_MEMORY_2_BASE_MODULE_TYPE 0x200
+#define QUESTION_ID_MEMORY_2_BUS_WIDTH_BITS 0x201
+#define QUESTION_ID_MEMORY_2_CONFIGURATION_LOCKED 0x202
+
+#define QUESTION_ID_MEMORY_3_BASE_MODULE_TYPE 0x300
+#define QUESTION_ID_MEMORY_3_BUS_WIDTH_BITS 0x301
+#define QUESTION_ID_MEMORY_3_CONFIGURATION_LOCKED 0x302
+
+#define QUESTION_ID_MEMORY_4_BASE_MODULE_TYPE 0x400
+#define QUESTION_ID_MEMORY_4_BUS_WIDTH_BITS 0x401
+#define QUESTION_ID_MEMORY_4_CONFIGURATION_LOCKED 0x402
+
+#define MEMORY_MAX_NO 0x04
+#define ID_STRING_MIN 0
+#define ID_STRING_MAX 15
+#define ID_STRING_MAX_WITH_TERMINATOR 16
+
+#pragma pack(1)
+//
+// Definiton of HII_2_REDFISH_MEMORY_SET
+//
+typedef struct {
+ CHAR16 ModuleProductId[ID_STRING_MAX_WITH_TERMINATOR];
+ UINT8 BaseModuleType;
+ UINT8 BusWidthBits;
+ UINT8 ConfigurationLocked;
+ UINT8 Reserved; // for 16 bit boundary of ModuleProductId
+} HII_2_REDFISH_MEMORY_SET;
+
+//
+// Definiton of HII_2_REDFISH_MEMORY_EFI_VARSTORE_DATA
+//
+typedef struct {
+ HII_2_REDFISH_MEMORY_SET Memory[MEMORY_MAX_NO];
+} HII_2_REDFISH_MEMORY_EFI_VARSTORE_DATA;
+
+#pragma pack()
+
+#endif
diff --git a/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.h b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.h
new file mode 100644
index 00000000..c00972ad
--- /dev/null
+++ b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.h
@@ -0,0 +1,44 @@
+/** @file
+ HII-to-Redfish memory driver header file.
+
+ (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef HII_2_REDFISH_MEMORY_DXE_H_
+#define HII_2_REDFISH_MEMORY_DXE_H_
+
+#include <Uefi.h>
+#include <Library/BaseLib.h>
+#include <Library/UefiLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/DebugLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Library/PrintLib.h>
+#include <Library/HiiLib.h>
+#include <Library/DevicePathLib.h>
+
+#include <Protocol/HiiConfigAccess.h>
+#include <Guid/VariableFormat.h>
+
+#include "Hii2RedfishMemoryData.h"
+
+extern UINT8 Hii2RedfishMemoryVfrBin[];
+
+#pragma pack(1)
+
+///
+/// HII specific Vendor Device Path definition.
+///
+typedef struct {
+ VENDOR_DEVICE_PATH VendorDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL End;
+} HII_VENDOR_DEVICE_PATH;
+
+#pragma pack()
+
+#endif
diff --git a/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryVfr.vfr b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryVfr.vfr
new file mode 100644
index 00000000..99f5e9a4
--- /dev/null
+++ b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryVfr.vfr
@@ -0,0 +1,219 @@
+/** @file
+ HII-to-Redfish memory driver VFR file.
+
+ (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+
+#include "Hii2RedfishMemoryData.h"
+
+formset
+ guid = HII_2_REDFISH_MEMORY_FORMSET_GUID,
+ title = STRING_TOKEN(STR_FORM_SET_TITLE),
+ help = STRING_TOKEN(STR_FORM_SET_TITLE_HELP),
+ classguid = EFI_HII_PLATFORM_SETUP_FORMSET_GUID,
+
+ //
+ // Define a EFI variable Storage (EFI_IFR_VARSTORE_EFI)
+ //
+ efivarstore HII_2_REDFISH_MEMORY_EFI_VARSTORE_DATA,
+ attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE, // EFI variable attribures
+ name = Hii2RedfishMemoryEfiVar,
+ guid = HII_2_REDFISH_MEMORY_FORMSET_GUID;
+
+ //
+ // Define a Form (EFI_IFR_FORM)
+ //
+ form formid = FORM_ID, // Form ID
+ title = STRING_TOKEN(STR_FORM_TITLE); // Form title
+
+ goto FROM_ID_MEMORY_1, // Destination Form ID
+ prompt = STRING_TOKEN(STR_FORM_TITLE_MEMORY_1), // Prompt string
+ help = STRING_TOKEN(STR_FORM_HELP_MEMORY_1); // Help string
+
+ goto FROM_ID_MEMORY_2, // Destination Form ID
+ prompt = STRING_TOKEN(STR_FORM_TITLE_MEMORY_2), // Prompt string
+ help = STRING_TOKEN(STR_FORM_HELP_MEMORY_2); // Help string
+
+ goto FROM_ID_MEMORY_3, // Destination Form ID
+ prompt = STRING_TOKEN(STR_FORM_TITLE_MEMORY_3), // Prompt string
+ help = STRING_TOKEN(STR_FORM_HELP_MEMORY_3); // Help string
+
+ goto FROM_ID_MEMORY_4, // Destination Form ID
+ prompt = STRING_TOKEN(STR_FORM_TITLE_MEMORY_4), // Prompt string
+ help = STRING_TOKEN(STR_FORM_HELP_MEMORY_4); // Help string
+
+ endform;
+
+ form formid = FROM_ID_MEMORY_1, // Form ID
+ title = STRING_TOKEN(STR_FORM_TITLE_MEMORY_1); // Form title
+
+ oneof varid = Hii2RedfishMemoryEfiVar.Memory[0].BaseModuleType,
+ questionid = QUESTION_ID_MEMORY_1_BASE_MODULE_TYPE,
+ prompt = STRING_TOKEN(STR_MEMORY_1_BASE_MODULE_TYPE_PROMPT),
+ help = STRING_TOKEN(STR_MEMORY_1_BASE_MODULE_TYPE_HELP),
+ flags = INTERACTIVE | NUMERIC_SIZE_1,
+ option text = STRING_TOKEN(STR_MEMORY_RDIMM_PROMPT), value = STR_MEMORY_RDIMM_PROMPT, flags = DEFAULT;
+ option text = STRING_TOKEN(STR_MEMORY_UDIMM_PROMPT), value = STR_MEMORY_UDIMM_PROMPT, flags = 0;
+ option text = STRING_TOKEN(STR_MEMORY_SO_DIMM_PROMPT), value = STR_MEMORY_SO_DIMM_PROMPT, flags = 0;
+ option text = STRING_TOKEN(STR_MEMORY_LRDIMM_PROMPT), value = STR_MEMORY_LRDIMM_PROMPT, flags = 0;
+ option text = STRING_TOKEN(STR_MEMORY_MINI_RDIMM_PROMPT), value = STR_MEMORY_MINI_RDIMM_PROMPT, flags = 0;
+ option text = STRING_TOKEN(STR_MEMORY_MINI_UDIMM_PROMPT), value = STR_MEMORY_MINI_UDIMM_PROMPT, flags = 0;
+ endoneof;
+
+ string varid = Hii2RedfishMemoryEfiVar.Memory[0].ModuleProductId,
+ prompt = STRING_TOKEN(STR_MEMORY_1_MODULE_PRODUCT_ID_PROMPT),
+ help = STRING_TOKEN(STR_MEMORY_1_MODULE_PRODUCT_ID_HELP),
+ flags = READ_ONLY,
+ minsize = ID_STRING_MIN,
+ maxsize = ID_STRING_MAX,
+ endstring;
+
+ numeric varid = Hii2RedfishMemoryEfiVar.Memory[0].BusWidthBits,
+ prompt = STRING_TOKEN(STR_MEMORY_1_BUS_WIDTH_BITS_PROMPT),
+ help = STRING_TOKEN(STR_MEMORY_1_BUS_WIDTH_BITS_HELP),
+ minimum = 0,
+ maximum = 0xff,
+ step = 1,
+ default = 20,
+ endnumeric;
+
+ checkbox varid = Hii2RedfishMemoryEfiVar.Memory[0].ConfigurationLocked,
+ prompt = STRING_TOKEN(STR_MEMORY_1_CONFIGURATION_LOCKED_PROMPT),
+ help = STRING_TOKEN(STR_MEMORY_1_CONFIGURATION_LOCKED_HELP),
+ flags = CHECKBOX_DEFAULT,
+ default = TRUE,
+ endcheckbox;
+
+ endform;
+
+ form formid = FROM_ID_MEMORY_2, // Form ID
+ title = STRING_TOKEN(STR_FORM_TITLE_MEMORY_2); // Form title
+
+ oneof varid = Hii2RedfishMemoryEfiVar.Memory[1].BaseModuleType,
+ questionid = QUESTION_ID_MEMORY_2_BASE_MODULE_TYPE,
+ prompt = STRING_TOKEN(STR_MEMORY_2_BASE_MODULE_TYPE_PROMPT),
+ help = STRING_TOKEN(STR_MEMORY_2_BASE_MODULE_TYPE_HELP),
+ flags = INTERACTIVE | NUMERIC_SIZE_1,
+ option text = STRING_TOKEN(STR_MEMORY_RDIMM_PROMPT), value = STR_MEMORY_RDIMM_PROMPT, flags = DEFAULT;
+ option text = STRING_TOKEN(STR_MEMORY_UDIMM_PROMPT), value = STR_MEMORY_UDIMM_PROMPT, flags = 0;
+ option text = STRING_TOKEN(STR_MEMORY_SO_DIMM_PROMPT), value = STR_MEMORY_SO_DIMM_PROMPT, flags = 0;
+ option text = STRING_TOKEN(STR_MEMORY_LRDIMM_PROMPT), value = STR_MEMORY_LRDIMM_PROMPT, flags = 0;
+ option text = STRING_TOKEN(STR_MEMORY_MINI_RDIMM_PROMPT), value = STR_MEMORY_MINI_RDIMM_PROMPT, flags = 0;
+ option text = STRING_TOKEN(STR_MEMORY_MINI_UDIMM_PROMPT), value = STR_MEMORY_MINI_UDIMM_PROMPT, flags = 0;
+ endoneof;
+
+ string varid = Hii2RedfishMemoryEfiVar.Memory[1].ModuleProductId,
+ prompt = STRING_TOKEN(STR_MEMORY_2_MODULE_PRODUCT_ID_PROMPT),
+ help = STRING_TOKEN(STR_MEMORY_2_MODULE_PRODUCT_ID_HELP),
+ flags = READ_ONLY,
+ minsize = ID_STRING_MIN,
+ maxsize = ID_STRING_MAX,
+ endstring;
+
+ numeric varid = Hii2RedfishMemoryEfiVar.Memory[1].BusWidthBits,
+ prompt = STRING_TOKEN(STR_MEMORY_2_BUS_WIDTH_BITS_PROMPT),
+ help = STRING_TOKEN(STR_MEMORY_2_BUS_WIDTH_BITS_HELP),
+ minimum = 0,
+ maximum = 0xff,
+ step = 1,
+ default = 20,
+ endnumeric;
+
+ checkbox varid = Hii2RedfishMemoryEfiVar.Memory[1].ConfigurationLocked,
+ prompt = STRING_TOKEN(STR_MEMORY_2_CONFIGURATION_LOCKED_PROMPT),
+ help = STRING_TOKEN(STR_MEMORY_2_CONFIGURATION_LOCKED_HELP),
+ flags = CHECKBOX_DEFAULT,
+ default = TRUE,
+ endcheckbox;
+
+ endform;
+
+ form formid = FROM_ID_MEMORY_3, // Form ID
+ title = STRING_TOKEN(STR_FORM_TITLE_MEMORY_3); // Form title
+
+ oneof varid = Hii2RedfishMemoryEfiVar.Memory[2].BaseModuleType,
+ questionid = QUESTION_ID_MEMORY_3_BASE_MODULE_TYPE,
+ prompt = STRING_TOKEN(STR_MEMORY_3_BASE_MODULE_TYPE_PROMPT),
+ help = STRING_TOKEN(STR_MEMORY_3_BASE_MODULE_TYPE_HELP),
+ flags = INTERACTIVE | NUMERIC_SIZE_1,
+ option text = STRING_TOKEN(STR_MEMORY_RDIMM_PROMPT), value = STR_MEMORY_RDIMM_PROMPT, flags = DEFAULT;
+ option text = STRING_TOKEN(STR_MEMORY_UDIMM_PROMPT), value = STR_MEMORY_UDIMM_PROMPT, flags = 0;
+ option text = STRING_TOKEN(STR_MEMORY_SO_DIMM_PROMPT), value = STR_MEMORY_SO_DIMM_PROMPT, flags = 0;
+ option text = STRING_TOKEN(STR_MEMORY_LRDIMM_PROMPT), value = STR_MEMORY_LRDIMM_PROMPT, flags = 0;
+ option text = STRING_TOKEN(STR_MEMORY_MINI_RDIMM_PROMPT), value = STR_MEMORY_MINI_RDIMM_PROMPT, flags = 0;
+ option text = STRING_TOKEN(STR_MEMORY_MINI_UDIMM_PROMPT), value = STR_MEMORY_MINI_UDIMM_PROMPT, flags = 0;
+ endoneof;
+
+ string varid = Hii2RedfishMemoryEfiVar.Memory[2].ModuleProductId,
+ prompt = STRING_TOKEN(STR_MEMORY_3_MODULE_PRODUCT_ID_PROMPT),
+ help = STRING_TOKEN(STR_MEMORY_3_MODULE_PRODUCT_ID_HELP),
+ flags = READ_ONLY,
+ minsize = ID_STRING_MIN,
+ maxsize = ID_STRING_MAX,
+ endstring;
+
+ numeric varid = Hii2RedfishMemoryEfiVar.Memory[2].BusWidthBits,
+ prompt = STRING_TOKEN(STR_MEMORY_3_BUS_WIDTH_BITS_PROMPT),
+ help = STRING_TOKEN(STR_MEMORY_3_BUS_WIDTH_BITS_HELP),
+ minimum = 0,
+ maximum = 0xff,
+ step = 1,
+ default = 20,
+ endnumeric;
+
+ checkbox varid = Hii2RedfishMemoryEfiVar.Memory[2].ConfigurationLocked,
+ prompt = STRING_TOKEN(STR_MEMORY_3_CONFIGURATION_LOCKED_PROMPT),
+ help = STRING_TOKEN(STR_MEMORY_3_CONFIGURATION_LOCKED_HELP),
+ flags = CHECKBOX_DEFAULT,
+ default = TRUE,
+ endcheckbox;
+
+ endform;
+
+ form formid = FROM_ID_MEMORY_4, // Form ID
+ title = STRING_TOKEN(STR_FORM_TITLE_MEMORY_3); // Form title
+
+ oneof varid = Hii2RedfishMemoryEfiVar.Memory[3].BaseModuleType,
+ questionid = QUESTION_ID_MEMORY_4_BASE_MODULE_TYPE,
+ prompt = STRING_TOKEN(STR_MEMORY_4_BASE_MODULE_TYPE_PROMPT),
+ help = STRING_TOKEN(STR_MEMORY_4_BASE_MODULE_TYPE_HELP),
+ flags = INTERACTIVE | NUMERIC_SIZE_1,
+ option text = STRING_TOKEN(STR_MEMORY_RDIMM_PROMPT), value = STR_MEMORY_RDIMM_PROMPT, flags = DEFAULT;
+ option text = STRING_TOKEN(STR_MEMORY_UDIMM_PROMPT), value = STR_MEMORY_UDIMM_PROMPT, flags = 0;
+ option text = STRING_TOKEN(STR_MEMORY_SO_DIMM_PROMPT), value = STR_MEMORY_SO_DIMM_PROMPT, flags = 0;
+ option text = STRING_TOKEN(STR_MEMORY_LRDIMM_PROMPT), value = STR_MEMORY_LRDIMM_PROMPT, flags = 0;
+ option text = STRING_TOKEN(STR_MEMORY_MINI_RDIMM_PROMPT), value = STR_MEMORY_MINI_RDIMM_PROMPT, flags = 0;
+ option text = STRING_TOKEN(STR_MEMORY_MINI_UDIMM_PROMPT), value = STR_MEMORY_MINI_UDIMM_PROMPT, flags = 0;
+ endoneof;
+
+ string varid = Hii2RedfishMemoryEfiVar.Memory[3].ModuleProductId,
+ prompt = STRING_TOKEN(STR_MEMORY_4_MODULE_PRODUCT_ID_PROMPT),
+ help = STRING_TOKEN(STR_MEMORY_4_MODULE_PRODUCT_ID_HELP),
+ flags = READ_ONLY,
+ minsize = ID_STRING_MIN,
+ maxsize = ID_STRING_MAX,
+ endstring;
+
+ numeric varid = Hii2RedfishMemoryEfiVar.Memory[3].BusWidthBits,
+ prompt = STRING_TOKEN(STR_MEMORY_4_BUS_WIDTH_BITS_PROMPT),
+ help = STRING_TOKEN(STR_MEMORY_4_BUS_WIDTH_BITS_HELP),
+ minimum = 0,
+ maximum = 0xff,
+ step = 1,
+ default = 20,
+ endnumeric;
+
+ checkbox varid = Hii2RedfishMemoryEfiVar.Memory[3].ConfigurationLocked,
+ prompt = STRING_TOKEN(STR_MEMORY_4_CONFIGURATION_LOCKED_PROMPT),
+ help = STRING_TOKEN(STR_MEMORY_4_CONFIGURATION_LOCKED_HELP),
+ flags = CHECKBOX_DEFAULT,
+ default = TRUE,
+ endcheckbox;
+
+ endform;
+
+endformset;
diff --git a/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.c b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.c
new file mode 100644
index 00000000..83710240
--- /dev/null
+++ b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.c
@@ -0,0 +1,292 @@
+/** @file
+ HII-to-Redfish memory driver.
+
+ (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "Hii2RedfishMemoryDxe.h"
+
+EFI_GUID mHii2RedfishMemoryGuid = HII_2_REDFISH_MEMORY_FORMSET_GUID;
+EFI_HII_HANDLE mHiiHandle;
+EFI_HANDLE DriverHandle;
+CHAR16 Hii2RedfishEfiVar[] = L"Hii2RedfishMemoryEfiVar";
+
+///
+/// HII specific Vendor Device Path definition.
+///
+HII_VENDOR_DEVICE_PATH mHiiVendorDevicePath = {
+ {
+ {
+ HARDWARE_DEVICE_PATH,
+ HW_VENDOR_DP,
+ {
+ (UINT8)(sizeof (VENDOR_DEVICE_PATH)),
+ (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8)
+ }
+ },
+ HII_2_REDFISH_MEMORY_FORMSET_GUID
+ },
+ {
+ END_DEVICE_PATH_TYPE,
+ END_ENTIRE_DEVICE_PATH_SUBTYPE,
+ {
+ (UINT8)(END_DEVICE_PATH_LENGTH),
+ (UINT8)((END_DEVICE_PATH_LENGTH) >> 8)
+ }
+ }
+};
+
+/**
+ Initial HII variable if it does not exist.
+
+ @retval EFI_SUCESS HII variable is initialized.
+
+**/
+EFI_STATUS
+InitialHiiVairable (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ UINTN BufferSize;
+ HII_2_REDFISH_MEMORY_EFI_VARSTORE_DATA Hii2RedfishMemoryVar;
+ UINTN Index;
+
+ //
+ // Get Buffer Storage data from EFI variable.
+ // Try to get the current setting from variable.
+ //
+ BufferSize = sizeof (HII_2_REDFISH_MEMORY_EFI_VARSTORE_DATA);
+ Status = gRT->GetVariable (
+ Hii2RedfishEfiVar,
+ &gHii2RedfishMemoryFormsetGuid,
+ NULL,
+ &BufferSize,
+ &Hii2RedfishMemoryVar
+ );
+ if (!EFI_ERROR (Status)) {
+ return EFI_SUCCESS;
+ }
+
+ //
+ // Initialization
+ //
+ for (Index = 0; Index < MEMORY_MAX_NO; Index++) {
+ Hii2RedfishMemoryVar.Memory[Index].BaseModuleType = STR_MEMORY_RDIMM_PROMPT;
+ Hii2RedfishMemoryVar.Memory[Index].BusWidthBits = 20;
+ Hii2RedfishMemoryVar.Memory[Index].ConfigurationLocked = TRUE;
+ StrCpyS (Hii2RedfishMemoryVar.Memory[Index].ModuleProductId, ID_STRING_MAX_WITH_TERMINATOR, L"1234");
+ }
+
+ Status = gRT->SetVariable (
+ Hii2RedfishEfiVar,
+ &gHii2RedfishMemoryFormsetGuid,
+ VARIABLE_ATTRIBUTE_NV_BS,
+ BufferSize,
+ &Hii2RedfishMemoryVar
+ );
+
+ return Status;
+}
+
+/**
+ This function allows a caller to extract the current configuration for one
+ or more named elements from the target driver.
+
+ @param[in] This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
+ @param[in] Request A null-terminated Unicode string in
+ <ConfigRequest> format.
+ @param[out] Progress On return, points to a character in the Request
+ string. Points to the string's null terminator if
+ request was successful. Points to the most recent
+ '&' before the first failing name/value pair (or
+ the beginning of the string if the failure is in
+ the first name/value pair) if the request was not
+ successful.
+ @param[out] Results A null-terminated Unicode string in
+ <ConfigAltResp> format which has all values filled
+ in for the names in the Request string. String to
+ be allocated by the called function.
+
+ @retval EFI_SUCCESS The Results is filled with the requested values.
+ @retval EFI_OUT_OF_RESOURCES Not enough memory to store the results.
+ @retval EFI_INVALID_PARAMETER Request is illegal syntax, or unknown name.
+ @retval EFI_NOT_FOUND Routing data doesn't match any storage in this
+ driver.
+
+**/
+EFI_STATUS
+EFIAPI
+Hii2RedfishMemoryExtractConfig (
+ IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
+ IN CONST EFI_STRING Request,
+ OUT EFI_STRING *Progress,
+ OUT EFI_STRING *Results
+ )
+{
+ if ((Progress == NULL) || (Results == NULL)) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ if (Request == NULL) {
+ return EFI_UNSUPPORTED;
+ }
+
+ //
+ // Check whether request for EFI Varstore. EFI varstore get data
+ // through hii database, not support in this path.
+ //
+ if (HiiIsConfigHdrMatch (Request, &gHii2RedfishMemoryFormsetGuid, L"Hii2RedfishMemoryEfiVar")) {
+ return EFI_UNSUPPORTED;
+ }
+
+ return EFI_NOT_FOUND;
+}
+
+/**
+ This function processes the results of changes in configuration.
+
+ @param[in] This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
+ @param[in] Configuration A null-terminated Unicode string in <ConfigResp>
+ format.
+ @param[out] Progress A pointer to a string filled in with the offset of
+ the most recent '&' before the first failing
+ name/value pair (or the beginning of the string if
+ the failure is in the first name/value pair) or
+ the terminating NULL if all was successful.
+
+ @retval EFI_SUCCESS The Results is processed successfully.
+ @retval EFI_INVALID_PARAMETER Configuration is NULL.
+ @retval EFI_NOT_FOUND Routing data doesn't match any storage in this
+ driver.
+
+**/
+EFI_STATUS
+EFIAPI
+Hii2RedfishMemoryRouteConfig (
+ IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
+ IN CONST EFI_STRING Configuration,
+ OUT EFI_STRING *Progress
+ )
+{
+ DEBUG ((DEBUG_INFO, "%a, unsupported\n", __func__));
+
+ return EFI_UNSUPPORTED;
+}
+
+/**
+ This function processes the results of changes in configuration.
+
+ @param[in] This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
+ @param[in] Action Specifies the type of action taken by the browser.
+ @param[in] QuestionId A unique value which is sent to the original
+ exporting driver so that it can identify the type
+ of data to expect.
+ @param[in] Type The type of value for the question.
+ @param[in] Value A pointer to the data being sent to the original
+ exporting driver.
+ @param[out] ActionRequest On return, points to the action requested by the
+ callback function.
+
+ @retval EFI_SUCCESS The callback successfully handled the action.
+ @retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold the
+ variable and its data.
+ @retval EFI_DEVICE_ERROR The variable could not be saved.
+ @retval EFI_UNSUPPORTED The specified Action is not supported by the
+ callback.
+
+**/
+EFI_STATUS
+EFIAPI
+Hii2RedfishMemoryDriverCallback (
+ IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
+ IN EFI_BROWSER_ACTION Action,
+ IN EFI_QUESTION_ID QuestionId,
+ IN UINT8 Type,
+ IN EFI_IFR_TYPE_VALUE *Value,
+ OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
+ )
+{
+ DEBUG ((DEBUG_INFO, "%a, action: 0x%x QID: 0x%x\n", __func__, Action, QuestionId));
+
+ return EFI_UNSUPPORTED;
+}
+
+EFI_HII_CONFIG_ACCESS_PROTOCOL mHii2RedfishConfigAccess = {
+ Hii2RedfishMemoryExtractConfig,
+ Hii2RedfishMemoryRouteConfig,
+ Hii2RedfishMemoryDriverCallback
+};
+
+/**
+ Main entry for this driver.
+
+ @param[in] ImageHandle Image handle this driver.
+ @param[in] SystemTable Pointer to SystemTable.
+
+ @retval EFI_SUCESS This function always complete successfully.
+
+**/
+EFI_STATUS
+EFIAPI
+Hii2RedfishMemoryDxeDriverEntryPoint (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ EFI_STATUS Status;
+
+ DriverHandle = NULL;
+ Status = gBS->InstallMultipleProtocolInterfaces (
+ &DriverHandle,
+ &gEfiDevicePathProtocolGuid,
+ &mHiiVendorDevicePath,
+ &gEfiHiiConfigAccessProtocolGuid,
+ &mHii2RedfishConfigAccess,
+ NULL
+ );
+
+ //
+ // Publish our HII data
+ //
+ mHiiHandle = HiiAddPackages (
+ &mHii2RedfishMemoryGuid,
+ DriverHandle,
+ Hii2RedfishMemoryDxeStrings,
+ Hii2RedfishMemoryVfrBin,
+ NULL
+ );
+ if (mHiiHandle == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ Status = InitialHiiVairable ();
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "%a, failed to initial variable: %r\n", __func__, Status));
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Unloads the application and its installed protocol.
+
+ @param[in] ImageHandle Handle that identifies the image to be unloaded.
+
+ @retval EFI_SUCCESS The image has been unloaded.
+**/
+EFI_STATUS
+EFIAPI
+Hii2RedfishMemoryDxeDriverUnload (
+ IN EFI_HANDLE ImageHandle
+ )
+{
+ if (mHiiHandle != NULL) {
+ HiiRemovePackages (mHiiHandle);
+ }
+
+ return EFI_SUCCESS;
+}
diff --git a/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeMap.uni b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeMap.uni
new file mode 100644
index 00000000..de1a6ef3
--- /dev/null
+++ b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeMap.uni
@@ -0,0 +1,38 @@
+/** @file
+ HII-to-Redfish memory driver.
+
+ (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+/=#
+#langdef x-uefi-redfish-Memory.v1_7_1 "Memory.v1_7_1"
+
+#string STR_MEMORY_1_BASE_MODULE_TYPE_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "/Memory/{1}/BaseModuleType"
+#string STR_MEMORY_1_BUS_WIDTH_BITS_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "/Memory/{1}/BusWidthBits"
+#string STR_MEMORY_1_CONFIGURATION_LOCKED_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "/Memory/{1}/ConfigurationLocked"
+#string STR_MEMORY_1_MODULE_PRODUCT_ID_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "/Memory/{1}/ModuleProductID"
+
+#string STR_MEMORY_2_BASE_MODULE_TYPE_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "/Memory/{2}/BaseModuleType"
+#string STR_MEMORY_2_BUS_WIDTH_BITS_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "/Memory/{2}/BusWidthBits"
+#string STR_MEMORY_2_CONFIGURATION_LOCKED_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "/Memory/{2}/ConfigurationLocked"
+#string STR_MEMORY_2_MODULE_PRODUCT_ID_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "/Memory/{2}/ModuleProductID"
+
+#string STR_MEMORY_3_BASE_MODULE_TYPE_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "/Memory/{3}/BaseModuleType"
+#string STR_MEMORY_3_BUS_WIDTH_BITS_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "/Memory/{3}/BusWidthBits"
+#string STR_MEMORY_3_CONFIGURATION_LOCKED_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "/Memory/{3}/ConfigurationLocked"
+#string STR_MEMORY_3_MODULE_PRODUCT_ID_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "/Memory/{3}/ModuleProductID"
+
+#string STR_MEMORY_4_BASE_MODULE_TYPE_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "/Memory/{5}/BaseModuleType"
+#string STR_MEMORY_4_BUS_WIDTH_BITS_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "/Memory/{5}/BusWidthBits"
+#string STR_MEMORY_4_CONFIGURATION_LOCKED_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "/Memory/{5}/ConfigurationLocked"
+#string STR_MEMORY_4_MODULE_PRODUCT_ID_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "/Memory/{5}/ModuleProductID"
+
+#string STR_MEMORY_RDIMM_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "RDIMM"
+#string STR_MEMORY_UDIMM_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "UDIMM"
+#string STR_MEMORY_SO_DIMM_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "SO_DIMM"
+#string STR_MEMORY_LRDIMM_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "LRDIMM"
+#string STR_MEMORY_MINI_RDIMM_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "Mini_RDIMM"
+#string STR_MEMORY_MINI_UDIMM_PROMPT #language x-uefi-redfish-Memory.v1_7_1 "Mini_UDIMM"
diff --git a/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeStrings.uni b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeStrings.uni
new file mode 100644
index 00000000..bfa082fd
--- /dev/null
+++ b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeStrings.uni
@@ -0,0 +1,68 @@
+/** @file
+ HII-to-Redfish memory driver.
+
+ (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+/=#
+#langdef en-US "English"
+
+#string STR_FORM_SET_TITLE #language en-US "HII to Redfish (Memory)"
+#string STR_FORM_SET_TITLE_HELP #language en-US "HII to Redfish (Memory)"
+#string STR_FORM_TITLE #language en-US "HII to Redfish Memory properties"
+
+#string STR_FORM_TITLE_MEMORY_1 #language en-US "Memory 1"
+#string STR_FORM_HELP_MEMORY_1 #language en-US "Memory 1"
+#string STR_FORM_TITLE_MEMORY_2 #language en-US "Memory 2"
+#string STR_FORM_HELP_MEMORY_2 #language en-US "Memory 2"
+#string STR_FORM_TITLE_MEMORY_3 #language en-US "Memory 3"
+#string STR_FORM_HELP_MEMORY_3 #language en-US "Memory 3"
+#string STR_FORM_TITLE_MEMORY_4 #language en-US "Memory 5"
+#string STR_FORM_HELP_MEMORY_4 #language en-US "Memory 5"
+
+
+#string STR_MEMORY_1_BASE_MODULE_TYPE_PROMPT #language en-US "Base module type"
+#string STR_MEMORY_1_BASE_MODULE_TYPE_HELP #language en-US "The value of this property shall be the base module type of Memory"
+#string STR_MEMORY_1_BUS_WIDTH_BITS_PROMPT #language en-US "Bus Width in bits"
+#string STR_MEMORY_1_BUS_WIDTH_BITS_HELP #language en-US "The value of this property shall be the bus width in bits"
+#string STR_MEMORY_1_CONFIGURATION_LOCKED_PROMPT #language en-US "Configuration Locked"
+#string STR_MEMORY_1_CONFIGURATION_LOCKED_HELP #language en-US "The value of this property shall be the current configuration lock state of this memory. True shall indicate that the configuration is locked and cannot be altered. False shall indicate that the configuration is not locked and may be altered"
+#string STR_MEMORY_1_MODULE_PRODUCT_ID_PROMPT #language en-US "Module Product ID"
+#string STR_MEMORY_1_MODULE_PRODUCT_ID_HELP #language en-US "The product ID of this memory module."
+
+#string STR_MEMORY_2_BASE_MODULE_TYPE_PROMPT #language en-US "Base module type"
+#string STR_MEMORY_2_BASE_MODULE_TYPE_HELP #language en-US "The value of this property shall be the base module type of Memory"
+#string STR_MEMORY_2_BUS_WIDTH_BITS_PROMPT #language en-US "Bus Width in bits"
+#string STR_MEMORY_2_BUS_WIDTH_BITS_HELP #language en-US "The value of this property shall be the bus width in bits"
+#string STR_MEMORY_2_CONFIGURATION_LOCKED_PROMPT #language en-US "Configuration Locked"
+#string STR_MEMORY_2_CONFIGURATION_LOCKED_HELP #language en-US "The value of this property shall be the current configuration lock state of this memory. True shall indicate that the configuration is locked and cannot be altered. False shall indicate that the configuration is not locked and may be altered"
+#string STR_MEMORY_2_MODULE_PRODUCT_ID_PROMPT #language en-US "Module Product ID"
+#string STR_MEMORY_2_MODULE_PRODUCT_ID_HELP #language en-US "The product ID of this memory module."
+
+#string STR_MEMORY_3_BASE_MODULE_TYPE_PROMPT #language en-US "Base module type"
+#string STR_MEMORY_3_BASE_MODULE_TYPE_HELP #language en-US "The value of this property shall be the base module type of Memory"
+#string STR_MEMORY_3_BUS_WIDTH_BITS_PROMPT #language en-US "Bus Width in bits"
+#string STR_MEMORY_3_BUS_WIDTH_BITS_HELP #language en-US "The value of this property shall be the bus width in bits"
+#string STR_MEMORY_3_CONFIGURATION_LOCKED_PROMPT #language en-US "Configuration Locked"
+#string STR_MEMORY_3_CONFIGURATION_LOCKED_HELP #language en-US "The value of this property shall be the current configuration lock state of this memory. True shall indicate that the configuration is locked and cannot be altered. False shall indicate that the configuration is not locked and may be altered"
+#string STR_MEMORY_3_MODULE_PRODUCT_ID_PROMPT #language en-US "Module Product ID"
+#string STR_MEMORY_3_MODULE_PRODUCT_ID_HELP #language en-US "The product ID of this memory module."
+
+#string STR_MEMORY_4_BASE_MODULE_TYPE_PROMPT #language en-US "Base module type"
+#string STR_MEMORY_4_BASE_MODULE_TYPE_HELP #language en-US "The value of this property shall be the base module type of Memory"
+#string STR_MEMORY_4_BUS_WIDTH_BITS_PROMPT #language en-US "Bus Width in bits"
+#string STR_MEMORY_4_BUS_WIDTH_BITS_HELP #language en-US "The value of this property shall be the bus width in bits"
+#string STR_MEMORY_4_CONFIGURATION_LOCKED_PROMPT #language en-US "Configuration Locked"
+#string STR_MEMORY_4_CONFIGURATION_LOCKED_HELP #language en-US "The value of this property shall be the current configuration lock state of this memory. True shall indicate that the configuration is locked and cannot be altered. False shall indicate that the configuration is not locked and may be altered"
+#string STR_MEMORY_4_MODULE_PRODUCT_ID_PROMPT #language en-US "Module Product ID"
+#string STR_MEMORY_4_MODULE_PRODUCT_ID_HELP #language en-US "The product ID of this memory module."
+
+#string STR_MEMORY_RDIMM_PROMPT #language en-US "RDIMM"
+#string STR_MEMORY_UDIMM_PROMPT #language en-US "UDIMM"
+#string STR_MEMORY_SO_DIMM_PROMPT #language en-US "SO_DIMM"
+#string STR_MEMORY_LRDIMM_PROMPT #language en-US "LRDIMM"
+#string STR_MEMORY_MINI_RDIMM_PROMPT #language en-US "Mini_RDIMM"
+#string STR_MEMORY_MINI_UDIMM_PROMPT #language en-US "Mini_UDIMM"
diff --git a/RedfishClientPkg/RedfishClient.fdf.inc b/RedfishClientPkg/RedfishClient.fdf.inc
index fa4e5389..7421440b 100644
--- a/RedfishClientPkg/RedfishClient.fdf.inc
+++ b/RedfishClientPkg/RedfishClient.fdf.inc
@@ -2,10 +2,11 @@
# Redfish Client FDF include file for [FV*] section of all Architectures.
#
# This file can be included to the [FV*] section(s) of a platform FDF file
-# by using "!include RedfishClientPkg/RedfisClientLibs.fdf.inc" to specify the module instances
+# by using "!include RedfishClientPkg/RedfishClientLibs.fdf.inc" to specify the module instances
# to be built in the firmware volume.
#
# (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP<BR>
+# Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
@@ -19,6 +20,7 @@
INF RedfishClientPkg/Features/ComputerSystem/v1_5_0/Dxe/ComputerSystemDxe.inf
INF RedfishClientPkg/Features/ComputerSystemCollectionDxe/ComputerSystemCollectionDxe.inf
INF RedfishClientPkg/Features/Bios/v1_0_9/Dxe/BiosDxe.inf
+ INF RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.inf
!include RedfishClientPkg/RedfishJsonStructureDxe.fdf.inc
#
--
2.17.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [edk2-redfish-client][PATCH 1/3] RedfishClientPkg: Add a sample memory configuration HII driver
2023-06-06 13:38 [edk2-redfish-client][PATCH 1/3] RedfishClientPkg: Add a sample memory configuration HII driver Nickle Wang
@ 2023-06-07 6:56 ` Chang, Abner
0 siblings, 0 replies; 2+ messages in thread
From: Chang, Abner @ 2023-06-07 6:56 UTC (permalink / raw)
To: Nickle Wang, devel@edk2.groups.io; +Cc: Igor Kulchytskyy
[AMD Official Use Only - General]
Hi Nickle,
I have no problem with this patch except for the file naming and function that use "2" instead of "To".
Could you replace "2" with "To" in those naming?
Thanks
Abner
> -----Original Message-----
> From: Nickle Wang <nicklew@nvidia.com>
> Sent: Tuesday, June 6, 2023 9:38 PM
> To: devel@edk2.groups.io
> Cc: Chang, Abner <Abner.Chang@amd.com>; Igor Kulchytskyy
> <igork@ami.com>
> Subject: [edk2-redfish-client][PATCH 1/3] RedfishClientPkg: Add a sample
> memory configuration HII driver
>
> Caution: This message originated from an External Source. Use proper caution
> when opening attachments, clicking links, or responding.
>
>
> This is an HII sample driver of memory configuration. This demonstrates
> the communication between platform configuration (EDK2/HII) and Redfish
> service (Memory resource) base on RedfishClientPkg.
>
> The language ("x-uef-redfish-*") defined in the Redfish-specific uni file
> is the connection between HII configuration and the Redfish schema.
>
> e.g.
>
> The HII option strings those applied with "x-uef-redfish-* HII language
> are connected to the corresponding Redfish properties.
>
> e.g.
> x-uefi-redfish-Memory.v1_7_1 "/Memory/{1}/BaseModuleType"
>
> The changes made on BIOS setup page or remote (OOB to Redfish service)
> will be sync-up each other through EDKII Redfish feature driver using
> the transport (REST_EX) provided by RedfishPkg.
>
> On EDK2, HTTP based REST EX protocol instance is used to consume and
> update the Redfish properties.
>
> Check this for the RedfishClientPkg design architecture,
> https://github.com/tianocore/edk2-redfish-
> client/blob/main/RedfishClientPkg/Readme.md
>
> Below for RedfishPkg design architecture,
> https://github.com/tianocore/edk2/blob/master/RedfishPkg/Readme.md
>
> Signed-off-by: Nickle Wang <nicklew@nvidia.com>
> Cc: Abner Chang <abner.chang@amd.com>
> Cc: Igor Kulchytskyy <igork@ami.com>
> ---
> RedfishClientPkg/RedfishClientPkg.dec | 2 +
> .../RedfishClientComponents.dsc.inc | 2 +
> RedfishClientPkg/RedfishClientPkg.dsc | 2 +
> .../Hii2RedfishMemoryDxe.inf | 56 ++++
> .../Hii2RedfishMemoryData.h | 71 +++++
> .../Hii2RedfishMemoryDxe.h | 44 +++
> .../Hii2RedfishMemoryVfr.vfr | 219 +++++++++++++
> .../Hii2RedfishMemoryDxe.c | 292 ++++++++++++++++++
> .../Hii2RedfishMemoryDxeMap.uni | 38 +++
> .../Hii2RedfishMemoryDxeStrings.uni | 68 ++++
> RedfishClientPkg/RedfishClient.fdf.inc | 4 +-
> 11 files changed, 797 insertions(+), 1 deletion(-)
> create mode 100644
> RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.inf
> create mode 100644
> RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryData.h
> create mode 100644
> RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.h
> create mode 100644
> RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryVfr.vfr
> create mode 100644
> RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.c
> create mode 100644
> RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeMap.uni
> create mode 100644
> RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeStrings.uni
>
> diff --git a/RedfishClientPkg/RedfishClientPkg.dec
> b/RedfishClientPkg/RedfishClientPkg.dec
> index 84bceca3..af241cf6 100644
> --- a/RedfishClientPkg/RedfishClientPkg.dec
> +++ b/RedfishClientPkg/RedfishClientPkg.dec
> @@ -57,6 +57,8 @@
> ## Include/RedfishBase.h
> gEfiRedfishClientVariableGuid = { 0x91c46a3d, 0xed1a, 0x477b,
> { 0xa5, 0x33, 0x87, 0x2d, 0xcd, 0xb0, 0xfc, 0xc1 } }
>
> + gHii2RedfishMemoryFormsetGuid = { 0XC2BE579E, 0X3C57,
> 0X499C, { 0XA9, 0XDF, 0XE6, 0X23, 0X8A, 0X49, 0X64, 0XF8 }}
> +
> [PcdsFixedAtBuild]
>
> gEfiRedfishClientPkgTokenSpaceGuid.PcdMaxRedfishSchemaStringSize|32|UI
> NT32|0x10000001
>
> gEfiRedfishClientPkgTokenSpaceGuid.PcdMaxRedfishSchemaVersionSize|8|UI
> NT32|0x10000002
> diff --git a/RedfishClientPkg/RedfishClientComponents.dsc.inc
> b/RedfishClientPkg/RedfishClientComponents.dsc.inc
> index e83f4bc9..3451c185 100644
> --- a/RedfishClientPkg/RedfishClientComponents.dsc.inc
> +++ b/RedfishClientPkg/RedfishClientComponents.dsc.inc
> @@ -7,6 +7,7 @@
> # "RedfishClientDefines.dsc.inc".
> #
> # (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP<BR>
> +# Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights
> reserved.
> #
> # SPDX-License-Identifier: BSD-2-Clause-Patent
> #
> @@ -16,6 +17,7 @@
> RedfishClientPkg/RedfishFeatureCoreDxe/RedfishFeatureCoreDxe.inf
> RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.inf
> RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.inf
> + RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.inf
> !endif
> #
> # Below two modules should be pulled in by build tool.
> diff --git a/RedfishClientPkg/RedfishClientPkg.dsc
> b/RedfishClientPkg/RedfishClientPkg.dsc
> index d3b645b6..ac9f8e9d 100644
> --- a/RedfishClientPkg/RedfishClientPkg.dsc
> +++ b/RedfishClientPkg/RedfishClientPkg.dsc
> @@ -37,6 +37,8 @@
> Ucs2Utf8Lib|RedfishPkg/Library/BaseUcs2Utf8Lib/BaseUcs2Utf8Lib.inf
> RedfishCrtLib|RedfishPkg/PrivateLibrary/RedfishCrtLib/RedfishCrtLib.inf
> BaseSortLib|MdeModulePkg/Library/BaseSortLib/BaseSortLib.inf
> + HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf
> +
> UefiHiiServicesLib|MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesL
> ib.inf
>
> [LibraryClasses.ARM, LibraryClasses.AARCH64]
> #
> diff --git
> a/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.inf
> b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.inf
> new file mode 100644
> index 00000000..2dd6b0dd
> --- /dev/null
> +++ b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.inf
> @@ -0,0 +1,56 @@
> +## @file
> +# HII-to-Redfish memory driver.
> +#
> +# (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
> +# Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights
> reserved.
> +#
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> +#
> +##
> +
> +[Defines]
> + INF_VERSION = 0x00010005
> + BASE_NAME = Hii2RedfishMemoryDxe
> + FILE_GUID = 58134796-EB3A-4635-9664-6B7F68A8A9A1
> + MODULE_TYPE = UEFI_DRIVER
> + VERSION_STRING = 1.0
> + ENTRY_POINT = Hii2RedfishMemoryDxeDriverEntryPoint
> + UNLOAD_IMAGE = Hii2RedfishMemoryDxeDriverUnload
> +
> +[Sources]
> + Hii2RedfishMemoryDxe.c
> + Hii2RedfishMemoryDxe.h
> + Hii2RedfishMemoryData.h
> + Hii2RedfishMemoryVfr.vfr
> + Hii2RedfishMemoryDxeStrings.uni
> + Hii2RedfishMemoryDxeMap.uni
> +
> +[Packages]
> + MdePkg/MdePkg.dec
> + MdeModulePkg/MdeModulePkg.dec
> + RedfishClientPkg/RedfishClientPkg.dec
> +
> +[LibraryClasses]
> + UefiDriverEntryPoint
> + BaseLib
> + BaseMemoryLib
> + DebugLib
> + PcdLib
> + MemoryAllocationLib
> + UefiBootServicesTableLib
> + UefiRuntimeServicesTableLib
> + UefiLib
> + PrintLib
> + HiiLib
> +
> +[Protocols]
> + gEfiDevicePathProtocolGuid
> + gEfiHiiConfigAccessProtocolGuid
> +
> +
> +[Guids]
> + gHii2RedfishMemoryFormsetGuid
> +
> +[Depex]
> + gEfiHiiDatabaseProtocolGuid
> +
> diff --git
> a/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryData.h
> b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryData.h
> new file mode 100644
> index 00000000..df8449d7
> --- /dev/null
> +++ b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryData.h
> @@ -0,0 +1,71 @@
> +/** @file
> + The header file of HII-to-Redfish memory driver.
> +
> + (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#ifndef HII_2_REDFISH_MEMORY_DATA_H_
> +#define HII_2_REDFISH_MEMORY_DATA_H_
> +
> +#include <Uefi/UefiMultiPhase.h>
> +#include <Guid/HiiPlatformSetupFormset.h>
> +
> +#define HII_2_REDFISH_MEMORY_FORMSET_GUID \
> + { \
> + 0xC2BE579E, 0x3C57, 0x499C, { 0xA9, 0xDF, 0xE6, 0x23, 0x8A, 0x49,
> 0x64, 0xF8 } \
> + }
> +
> +extern EFI_GUID gHii2RedfishMemoryFormsetGuid;
> +
> +#define FORM_ID 0x001
> +#define FROM_ID_MEMORY_1 0x002
> +#define FROM_ID_MEMORY_2 0x003
> +#define FROM_ID_MEMORY_3 0x004
> +#define FROM_ID_MEMORY_4 0x005
> +
> +#define QUESTION_ID_MEMORY_1_BASE_MODULE_TYPE 0x100
> +#define QUESTION_ID_MEMORY_1_BUS_WIDTH_BITS 0x101
> +#define QUESTION_ID_MEMORY_1_CONFIGURATION_LOCKED 0x102
> +
> +#define QUESTION_ID_MEMORY_2_BASE_MODULE_TYPE 0x200
> +#define QUESTION_ID_MEMORY_2_BUS_WIDTH_BITS 0x201
> +#define QUESTION_ID_MEMORY_2_CONFIGURATION_LOCKED 0x202
> +
> +#define QUESTION_ID_MEMORY_3_BASE_MODULE_TYPE 0x300
> +#define QUESTION_ID_MEMORY_3_BUS_WIDTH_BITS 0x301
> +#define QUESTION_ID_MEMORY_3_CONFIGURATION_LOCKED 0x302
> +
> +#define QUESTION_ID_MEMORY_4_BASE_MODULE_TYPE 0x400
> +#define QUESTION_ID_MEMORY_4_BUS_WIDTH_BITS 0x401
> +#define QUESTION_ID_MEMORY_4_CONFIGURATION_LOCKED 0x402
> +
> +#define MEMORY_MAX_NO 0x04
> +#define ID_STRING_MIN 0
> +#define ID_STRING_MAX 15
> +#define ID_STRING_MAX_WITH_TERMINATOR 16
> +
> +#pragma pack(1)
> +//
> +// Definiton of HII_2_REDFISH_MEMORY_SET
> +//
> +typedef struct {
> + CHAR16 ModuleProductId[ID_STRING_MAX_WITH_TERMINATOR];
> + UINT8 BaseModuleType;
> + UINT8 BusWidthBits;
> + UINT8 ConfigurationLocked;
> + UINT8 Reserved; // for 16 bit boundary of ModuleProductId
> +} HII_2_REDFISH_MEMORY_SET;
> +
> +//
> +// Definiton of HII_2_REDFISH_MEMORY_EFI_VARSTORE_DATA
> +//
> +typedef struct {
> + HII_2_REDFISH_MEMORY_SET Memory[MEMORY_MAX_NO];
> +} HII_2_REDFISH_MEMORY_EFI_VARSTORE_DATA;
> +
> +#pragma pack()
> +
> +#endif
> diff --git
> a/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.h
> b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.h
> new file mode 100644
> index 00000000..c00972ad
> --- /dev/null
> +++ b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.h
> @@ -0,0 +1,44 @@
> +/** @file
> + HII-to-Redfish memory driver header file.
> +
> + (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#ifndef HII_2_REDFISH_MEMORY_DXE_H_
> +#define HII_2_REDFISH_MEMORY_DXE_H_
> +
> +#include <Uefi.h>
> +#include <Library/BaseLib.h>
> +#include <Library/UefiLib.h>
> +#include <Library/BaseMemoryLib.h>
> +#include <Library/DebugLib.h>
> +#include <Library/MemoryAllocationLib.h>
> +#include <Library/UefiBootServicesTableLib.h>
> +#include <Library/UefiRuntimeServicesTableLib.h>
> +#include <Library/PrintLib.h>
> +#include <Library/HiiLib.h>
> +#include <Library/DevicePathLib.h>
> +
> +#include <Protocol/HiiConfigAccess.h>
> +#include <Guid/VariableFormat.h>
> +
> +#include "Hii2RedfishMemoryData.h"
> +
> +extern UINT8 Hii2RedfishMemoryVfrBin[];
> +
> +#pragma pack(1)
> +
> +///
> +/// HII specific Vendor Device Path definition.
> +///
> +typedef struct {
> + VENDOR_DEVICE_PATH VendorDevicePath;
> + EFI_DEVICE_PATH_PROTOCOL End;
> +} HII_VENDOR_DEVICE_PATH;
> +
> +#pragma pack()
> +
> +#endif
> diff --git
> a/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryVfr.vfr
> b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryVfr.vfr
> new file mode 100644
> index 00000000..99f5e9a4
> --- /dev/null
> +++ b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryVfr.vfr
> @@ -0,0 +1,219 @@
> +/** @file
> + HII-to-Redfish memory driver VFR file.
> +
> + (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +
> +#include "Hii2RedfishMemoryData.h"
> +
> +formset
> + guid = HII_2_REDFISH_MEMORY_FORMSET_GUID,
> + title = STRING_TOKEN(STR_FORM_SET_TITLE),
> + help = STRING_TOKEN(STR_FORM_SET_TITLE_HELP),
> + classguid = EFI_HII_PLATFORM_SETUP_FORMSET_GUID,
> +
> + //
> + // Define a EFI variable Storage (EFI_IFR_VARSTORE_EFI)
> + //
> + efivarstore HII_2_REDFISH_MEMORY_EFI_VARSTORE_DATA,
> + attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS |
> EFI_VARIABLE_NON_VOLATILE, // EFI variable attribures
> + name = Hii2RedfishMemoryEfiVar,
> + guid = HII_2_REDFISH_MEMORY_FORMSET_GUID;
> +
> + //
> + // Define a Form (EFI_IFR_FORM)
> + //
> + form formid = FORM_ID, // Form ID
> + title = STRING_TOKEN(STR_FORM_TITLE); // Form title
> +
> + goto FROM_ID_MEMORY_1, // Destination Form ID
> + prompt = STRING_TOKEN(STR_FORM_TITLE_MEMORY_1), // Prompt
> string
> + help = STRING_TOKEN(STR_FORM_HELP_MEMORY_1); // Help string
> +
> + goto FROM_ID_MEMORY_2, // Destination Form ID
> + prompt = STRING_TOKEN(STR_FORM_TITLE_MEMORY_2), // Prompt
> string
> + help = STRING_TOKEN(STR_FORM_HELP_MEMORY_2); // Help string
> +
> + goto FROM_ID_MEMORY_3, // Destination Form ID
> + prompt = STRING_TOKEN(STR_FORM_TITLE_MEMORY_3), // Prompt
> string
> + help = STRING_TOKEN(STR_FORM_HELP_MEMORY_3); // Help string
> +
> + goto FROM_ID_MEMORY_4, // Destination Form ID
> + prompt = STRING_TOKEN(STR_FORM_TITLE_MEMORY_4), // Prompt
> string
> + help = STRING_TOKEN(STR_FORM_HELP_MEMORY_4); // Help string
> +
> + endform;
> +
> + form formid = FROM_ID_MEMORY_1, // Form ID
> + title = STRING_TOKEN(STR_FORM_TITLE_MEMORY_1); // Form title
> +
> + oneof varid = Hii2RedfishMemoryEfiVar.Memory[0].BaseModuleType,
> + questionid = QUESTION_ID_MEMORY_1_BASE_MODULE_TYPE,
> + prompt =
> STRING_TOKEN(STR_MEMORY_1_BASE_MODULE_TYPE_PROMPT),
> + help = STRING_TOKEN(STR_MEMORY_1_BASE_MODULE_TYPE_HELP),
> + flags = INTERACTIVE | NUMERIC_SIZE_1,
> + option text = STRING_TOKEN(STR_MEMORY_RDIMM_PROMPT),
> value = STR_MEMORY_RDIMM_PROMPT, flags = DEFAULT;
> + option text = STRING_TOKEN(STR_MEMORY_UDIMM_PROMPT),
> value = STR_MEMORY_UDIMM_PROMPT, flags = 0;
> + option text = STRING_TOKEN(STR_MEMORY_SO_DIMM_PROMPT),
> value = STR_MEMORY_SO_DIMM_PROMPT, flags = 0;
> + option text = STRING_TOKEN(STR_MEMORY_LRDIMM_PROMPT),
> value = STR_MEMORY_LRDIMM_PROMPT, flags = 0;
> + option text = STRING_TOKEN(STR_MEMORY_MINI_RDIMM_PROMPT),
> value = STR_MEMORY_MINI_RDIMM_PROMPT, flags = 0;
> + option text = STRING_TOKEN(STR_MEMORY_MINI_UDIMM_PROMPT),
> value = STR_MEMORY_MINI_UDIMM_PROMPT, flags = 0;
> + endoneof;
> +
> + string varid = Hii2RedfishMemoryEfiVar.Memory[0].ModuleProductId,
> + prompt =
> STRING_TOKEN(STR_MEMORY_1_MODULE_PRODUCT_ID_PROMPT),
> + help = STRING_TOKEN(STR_MEMORY_1_MODULE_PRODUCT_ID_HELP),
> + flags = READ_ONLY,
> + minsize = ID_STRING_MIN,
> + maxsize = ID_STRING_MAX,
> + endstring;
> +
> + numeric varid = Hii2RedfishMemoryEfiVar.Memory[0].BusWidthBits,
> + prompt =
> STRING_TOKEN(STR_MEMORY_1_BUS_WIDTH_BITS_PROMPT),
> + help = STRING_TOKEN(STR_MEMORY_1_BUS_WIDTH_BITS_HELP),
> + minimum = 0,
> + maximum = 0xff,
> + step = 1,
> + default = 20,
> + endnumeric;
> +
> + checkbox varid =
> Hii2RedfishMemoryEfiVar.Memory[0].ConfigurationLocked,
> + prompt =
> STRING_TOKEN(STR_MEMORY_1_CONFIGURATION_LOCKED_PROMPT),
> + help =
> STRING_TOKEN(STR_MEMORY_1_CONFIGURATION_LOCKED_HELP),
> + flags = CHECKBOX_DEFAULT,
> + default = TRUE,
> + endcheckbox;
> +
> + endform;
> +
> + form formid = FROM_ID_MEMORY_2, // Form ID
> + title = STRING_TOKEN(STR_FORM_TITLE_MEMORY_2); // Form title
> +
> + oneof varid = Hii2RedfishMemoryEfiVar.Memory[1].BaseModuleType,
> + questionid = QUESTION_ID_MEMORY_2_BASE_MODULE_TYPE,
> + prompt =
> STRING_TOKEN(STR_MEMORY_2_BASE_MODULE_TYPE_PROMPT),
> + help = STRING_TOKEN(STR_MEMORY_2_BASE_MODULE_TYPE_HELP),
> + flags = INTERACTIVE | NUMERIC_SIZE_1,
> + option text = STRING_TOKEN(STR_MEMORY_RDIMM_PROMPT),
> value = STR_MEMORY_RDIMM_PROMPT, flags = DEFAULT;
> + option text = STRING_TOKEN(STR_MEMORY_UDIMM_PROMPT),
> value = STR_MEMORY_UDIMM_PROMPT, flags = 0;
> + option text = STRING_TOKEN(STR_MEMORY_SO_DIMM_PROMPT),
> value = STR_MEMORY_SO_DIMM_PROMPT, flags = 0;
> + option text = STRING_TOKEN(STR_MEMORY_LRDIMM_PROMPT),
> value = STR_MEMORY_LRDIMM_PROMPT, flags = 0;
> + option text = STRING_TOKEN(STR_MEMORY_MINI_RDIMM_PROMPT),
> value = STR_MEMORY_MINI_RDIMM_PROMPT, flags = 0;
> + option text = STRING_TOKEN(STR_MEMORY_MINI_UDIMM_PROMPT),
> value = STR_MEMORY_MINI_UDIMM_PROMPT, flags = 0;
> + endoneof;
> +
> + string varid = Hii2RedfishMemoryEfiVar.Memory[1].ModuleProductId,
> + prompt =
> STRING_TOKEN(STR_MEMORY_2_MODULE_PRODUCT_ID_PROMPT),
> + help = STRING_TOKEN(STR_MEMORY_2_MODULE_PRODUCT_ID_HELP),
> + flags = READ_ONLY,
> + minsize = ID_STRING_MIN,
> + maxsize = ID_STRING_MAX,
> + endstring;
> +
> + numeric varid = Hii2RedfishMemoryEfiVar.Memory[1].BusWidthBits,
> + prompt =
> STRING_TOKEN(STR_MEMORY_2_BUS_WIDTH_BITS_PROMPT),
> + help = STRING_TOKEN(STR_MEMORY_2_BUS_WIDTH_BITS_HELP),
> + minimum = 0,
> + maximum = 0xff,
> + step = 1,
> + default = 20,
> + endnumeric;
> +
> + checkbox varid =
> Hii2RedfishMemoryEfiVar.Memory[1].ConfigurationLocked,
> + prompt =
> STRING_TOKEN(STR_MEMORY_2_CONFIGURATION_LOCKED_PROMPT),
> + help =
> STRING_TOKEN(STR_MEMORY_2_CONFIGURATION_LOCKED_HELP),
> + flags = CHECKBOX_DEFAULT,
> + default = TRUE,
> + endcheckbox;
> +
> + endform;
> +
> + form formid = FROM_ID_MEMORY_3, // Form ID
> + title = STRING_TOKEN(STR_FORM_TITLE_MEMORY_3); // Form title
> +
> + oneof varid = Hii2RedfishMemoryEfiVar.Memory[2].BaseModuleType,
> + questionid = QUESTION_ID_MEMORY_3_BASE_MODULE_TYPE,
> + prompt =
> STRING_TOKEN(STR_MEMORY_3_BASE_MODULE_TYPE_PROMPT),
> + help = STRING_TOKEN(STR_MEMORY_3_BASE_MODULE_TYPE_HELP),
> + flags = INTERACTIVE | NUMERIC_SIZE_1,
> + option text = STRING_TOKEN(STR_MEMORY_RDIMM_PROMPT),
> value = STR_MEMORY_RDIMM_PROMPT, flags = DEFAULT;
> + option text = STRING_TOKEN(STR_MEMORY_UDIMM_PROMPT),
> value = STR_MEMORY_UDIMM_PROMPT, flags = 0;
> + option text = STRING_TOKEN(STR_MEMORY_SO_DIMM_PROMPT),
> value = STR_MEMORY_SO_DIMM_PROMPT, flags = 0;
> + option text = STRING_TOKEN(STR_MEMORY_LRDIMM_PROMPT),
> value = STR_MEMORY_LRDIMM_PROMPT, flags = 0;
> + option text = STRING_TOKEN(STR_MEMORY_MINI_RDIMM_PROMPT),
> value = STR_MEMORY_MINI_RDIMM_PROMPT, flags = 0;
> + option text = STRING_TOKEN(STR_MEMORY_MINI_UDIMM_PROMPT),
> value = STR_MEMORY_MINI_UDIMM_PROMPT, flags = 0;
> + endoneof;
> +
> + string varid = Hii2RedfishMemoryEfiVar.Memory[2].ModuleProductId,
> + prompt =
> STRING_TOKEN(STR_MEMORY_3_MODULE_PRODUCT_ID_PROMPT),
> + help = STRING_TOKEN(STR_MEMORY_3_MODULE_PRODUCT_ID_HELP),
> + flags = READ_ONLY,
> + minsize = ID_STRING_MIN,
> + maxsize = ID_STRING_MAX,
> + endstring;
> +
> + numeric varid = Hii2RedfishMemoryEfiVar.Memory[2].BusWidthBits,
> + prompt =
> STRING_TOKEN(STR_MEMORY_3_BUS_WIDTH_BITS_PROMPT),
> + help = STRING_TOKEN(STR_MEMORY_3_BUS_WIDTH_BITS_HELP),
> + minimum = 0,
> + maximum = 0xff,
> + step = 1,
> + default = 20,
> + endnumeric;
> +
> + checkbox varid =
> Hii2RedfishMemoryEfiVar.Memory[2].ConfigurationLocked,
> + prompt =
> STRING_TOKEN(STR_MEMORY_3_CONFIGURATION_LOCKED_PROMPT),
> + help =
> STRING_TOKEN(STR_MEMORY_3_CONFIGURATION_LOCKED_HELP),
> + flags = CHECKBOX_DEFAULT,
> + default = TRUE,
> + endcheckbox;
> +
> + endform;
> +
> + form formid = FROM_ID_MEMORY_4, // Form ID
> + title = STRING_TOKEN(STR_FORM_TITLE_MEMORY_3); // Form title
> +
> + oneof varid = Hii2RedfishMemoryEfiVar.Memory[3].BaseModuleType,
> + questionid = QUESTION_ID_MEMORY_4_BASE_MODULE_TYPE,
> + prompt =
> STRING_TOKEN(STR_MEMORY_4_BASE_MODULE_TYPE_PROMPT),
> + help = STRING_TOKEN(STR_MEMORY_4_BASE_MODULE_TYPE_HELP),
> + flags = INTERACTIVE | NUMERIC_SIZE_1,
> + option text = STRING_TOKEN(STR_MEMORY_RDIMM_PROMPT),
> value = STR_MEMORY_RDIMM_PROMPT, flags = DEFAULT;
> + option text = STRING_TOKEN(STR_MEMORY_UDIMM_PROMPT),
> value = STR_MEMORY_UDIMM_PROMPT, flags = 0;
> + option text = STRING_TOKEN(STR_MEMORY_SO_DIMM_PROMPT),
> value = STR_MEMORY_SO_DIMM_PROMPT, flags = 0;
> + option text = STRING_TOKEN(STR_MEMORY_LRDIMM_PROMPT),
> value = STR_MEMORY_LRDIMM_PROMPT, flags = 0;
> + option text = STRING_TOKEN(STR_MEMORY_MINI_RDIMM_PROMPT),
> value = STR_MEMORY_MINI_RDIMM_PROMPT, flags = 0;
> + option text = STRING_TOKEN(STR_MEMORY_MINI_UDIMM_PROMPT),
> value = STR_MEMORY_MINI_UDIMM_PROMPT, flags = 0;
> + endoneof;
> +
> + string varid = Hii2RedfishMemoryEfiVar.Memory[3].ModuleProductId,
> + prompt =
> STRING_TOKEN(STR_MEMORY_4_MODULE_PRODUCT_ID_PROMPT),
> + help = STRING_TOKEN(STR_MEMORY_4_MODULE_PRODUCT_ID_HELP),
> + flags = READ_ONLY,
> + minsize = ID_STRING_MIN,
> + maxsize = ID_STRING_MAX,
> + endstring;
> +
> + numeric varid = Hii2RedfishMemoryEfiVar.Memory[3].BusWidthBits,
> + prompt =
> STRING_TOKEN(STR_MEMORY_4_BUS_WIDTH_BITS_PROMPT),
> + help = STRING_TOKEN(STR_MEMORY_4_BUS_WIDTH_BITS_HELP),
> + minimum = 0,
> + maximum = 0xff,
> + step = 1,
> + default = 20,
> + endnumeric;
> +
> + checkbox varid =
> Hii2RedfishMemoryEfiVar.Memory[3].ConfigurationLocked,
> + prompt =
> STRING_TOKEN(STR_MEMORY_4_CONFIGURATION_LOCKED_PROMPT),
> + help =
> STRING_TOKEN(STR_MEMORY_4_CONFIGURATION_LOCKED_HELP),
> + flags = CHECKBOX_DEFAULT,
> + default = TRUE,
> + endcheckbox;
> +
> + endform;
> +
> +endformset;
> diff --git
> a/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.c
> b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.c
> new file mode 100644
> index 00000000..83710240
> --- /dev/null
> +++ b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.c
> @@ -0,0 +1,292 @@
> +/** @file
> + HII-to-Redfish memory driver.
> +
> + (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#include "Hii2RedfishMemoryDxe.h"
> +
> +EFI_GUID mHii2RedfishMemoryGuid =
> HII_2_REDFISH_MEMORY_FORMSET_GUID;
> +EFI_HII_HANDLE mHiiHandle;
> +EFI_HANDLE DriverHandle;
> +CHAR16 Hii2RedfishEfiVar[] = L"Hii2RedfishMemoryEfiVar";
> +
> +///
> +/// HII specific Vendor Device Path definition.
> +///
> +HII_VENDOR_DEVICE_PATH mHiiVendorDevicePath = {
> + {
> + {
> + HARDWARE_DEVICE_PATH,
> + HW_VENDOR_DP,
> + {
> + (UINT8)(sizeof (VENDOR_DEVICE_PATH)),
> + (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8)
> + }
> + },
> + HII_2_REDFISH_MEMORY_FORMSET_GUID
> + },
> + {
> + END_DEVICE_PATH_TYPE,
> + END_ENTIRE_DEVICE_PATH_SUBTYPE,
> + {
> + (UINT8)(END_DEVICE_PATH_LENGTH),
> + (UINT8)((END_DEVICE_PATH_LENGTH) >> 8)
> + }
> + }
> +};
> +
> +/**
> + Initial HII variable if it does not exist.
> +
> + @retval EFI_SUCESS HII variable is initialized.
> +
> +**/
> +EFI_STATUS
> +InitialHiiVairable (
> + VOID
> + )
> +{
> + EFI_STATUS Status;
> + UINTN BufferSize;
> + HII_2_REDFISH_MEMORY_EFI_VARSTORE_DATA Hii2RedfishMemoryVar;
> + UINTN Index;
> +
> + //
> + // Get Buffer Storage data from EFI variable.
> + // Try to get the current setting from variable.
> + //
> + BufferSize = sizeof (HII_2_REDFISH_MEMORY_EFI_VARSTORE_DATA);
> + Status = gRT->GetVariable (
> + Hii2RedfishEfiVar,
> + &gHii2RedfishMemoryFormsetGuid,
> + NULL,
> + &BufferSize,
> + &Hii2RedfishMemoryVar
> + );
> + if (!EFI_ERROR (Status)) {
> + return EFI_SUCCESS;
> + }
> +
> + //
> + // Initialization
> + //
> + for (Index = 0; Index < MEMORY_MAX_NO; Index++) {
> + Hii2RedfishMemoryVar.Memory[Index].BaseModuleType =
> STR_MEMORY_RDIMM_PROMPT;
> + Hii2RedfishMemoryVar.Memory[Index].BusWidthBits = 20;
> + Hii2RedfishMemoryVar.Memory[Index].ConfigurationLocked = TRUE;
> + StrCpyS (Hii2RedfishMemoryVar.Memory[Index].ModuleProductId,
> ID_STRING_MAX_WITH_TERMINATOR, L"1234");
> + }
> +
> + Status = gRT->SetVariable (
> + Hii2RedfishEfiVar,
> + &gHii2RedfishMemoryFormsetGuid,
> + VARIABLE_ATTRIBUTE_NV_BS,
> + BufferSize,
> + &Hii2RedfishMemoryVar
> + );
> +
> + return Status;
> +}
> +
> +/**
> + This function allows a caller to extract the current configuration for one
> + or more named elements from the target driver.
> +
> + @param[in] This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
> + @param[in] Request A null-terminated Unicode string in
> + <ConfigRequest> format.
> + @param[out] Progress On return, points to a character in the Request
> + string. Points to the string's null terminator if
> + request was successful. Points to the most recent
> + '&' before the first failing name/value pair (or
> + the beginning of the string if the failure is in
> + the first name/value pair) if the request was not
> + successful.
> + @param[out] Results A null-terminated Unicode string in
> + <ConfigAltResp> format which has all values filled
> + in for the names in the Request string. String to
> + be allocated by the called function.
> +
> + @retval EFI_SUCCESS The Results is filled with the requested values.
> + @retval EFI_OUT_OF_RESOURCES Not enough memory to store the
> results.
> + @retval EFI_INVALID_PARAMETER Request is illegal syntax, or unknown
> name.
> + @retval EFI_NOT_FOUND Routing data doesn't match any storage in
> this
> + driver.
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +Hii2RedfishMemoryExtractConfig (
> + IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
> + IN CONST EFI_STRING Request,
> + OUT EFI_STRING *Progress,
> + OUT EFI_STRING *Results
> + )
> +{
> + if ((Progress == NULL) || (Results == NULL)) {
> + return EFI_INVALID_PARAMETER;
> + }
> +
> + if (Request == NULL) {
> + return EFI_UNSUPPORTED;
> + }
> +
> + //
> + // Check whether request for EFI Varstore. EFI varstore get data
> + // through hii database, not support in this path.
> + //
> + if (HiiIsConfigHdrMatch (Request, &gHii2RedfishMemoryFormsetGuid,
> L"Hii2RedfishMemoryEfiVar")) {
> + return EFI_UNSUPPORTED;
> + }
> +
> + return EFI_NOT_FOUND;
> +}
> +
> +/**
> + This function processes the results of changes in configuration.
> +
> + @param[in] This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
> + @param[in] Configuration A null-terminated Unicode string in
> <ConfigResp>
> + format.
> + @param[out] Progress A pointer to a string filled in with the offset of
> + the most recent '&' before the first failing
> + name/value pair (or the beginning of the string if
> + the failure is in the first name/value pair) or
> + the terminating NULL if all was successful.
> +
> + @retval EFI_SUCCESS The Results is processed successfully.
> + @retval EFI_INVALID_PARAMETER Configuration is NULL.
> + @retval EFI_NOT_FOUND Routing data doesn't match any storage in
> this
> + driver.
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +Hii2RedfishMemoryRouteConfig (
> + IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
> + IN CONST EFI_STRING Configuration,
> + OUT EFI_STRING *Progress
> + )
> +{
> + DEBUG ((DEBUG_INFO, "%a, unsupported\n", __func__));
> +
> + return EFI_UNSUPPORTED;
> +}
> +
> +/**
> + This function processes the results of changes in configuration.
> +
> + @param[in] This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
> + @param[in] Action Specifies the type of action taken by the browser.
> + @param[in] QuestionId A unique value which is sent to the original
> + exporting driver so that it can identify the type
> + of data to expect.
> + @param[in] Type The type of value for the question.
> + @param[in] Value A pointer to the data being sent to the original
> + exporting driver.
> + @param[out] ActionRequest On return, points to the action requested by
> the
> + callback function.
> +
> + @retval EFI_SUCCESS The callback successfully handled the action.
> + @retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold
> the
> + variable and its data.
> + @retval EFI_DEVICE_ERROR The variable could not be saved.
> + @retval EFI_UNSUPPORTED The specified Action is not supported by the
> + callback.
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +Hii2RedfishMemoryDriverCallback (
> + IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
> + IN EFI_BROWSER_ACTION Action,
> + IN EFI_QUESTION_ID QuestionId,
> + IN UINT8 Type,
> + IN EFI_IFR_TYPE_VALUE *Value,
> + OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
> + )
> +{
> + DEBUG ((DEBUG_INFO, "%a, action: 0x%x QID: 0x%x\n", __func__, Action,
> QuestionId));
> +
> + return EFI_UNSUPPORTED;
> +}
> +
> +EFI_HII_CONFIG_ACCESS_PROTOCOL mHii2RedfishConfigAccess = {
> + Hii2RedfishMemoryExtractConfig,
> + Hii2RedfishMemoryRouteConfig,
> + Hii2RedfishMemoryDriverCallback
> +};
> +
> +/**
> + Main entry for this driver.
> +
> + @param[in] ImageHandle Image handle this driver.
> + @param[in] SystemTable Pointer to SystemTable.
> +
> + @retval EFI_SUCESS This function always complete successfully.
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +Hii2RedfishMemoryDxeDriverEntryPoint (
> + IN EFI_HANDLE ImageHandle,
> + IN EFI_SYSTEM_TABLE *SystemTable
> + )
> +{
> + EFI_STATUS Status;
> +
> + DriverHandle = NULL;
> + Status = gBS->InstallMultipleProtocolInterfaces (
> + &DriverHandle,
> + &gEfiDevicePathProtocolGuid,
> + &mHiiVendorDevicePath,
> + &gEfiHiiConfigAccessProtocolGuid,
> + &mHii2RedfishConfigAccess,
> + NULL
> + );
> +
> + //
> + // Publish our HII data
> + //
> + mHiiHandle = HiiAddPackages (
> + &mHii2RedfishMemoryGuid,
> + DriverHandle,
> + Hii2RedfishMemoryDxeStrings,
> + Hii2RedfishMemoryVfrBin,
> + NULL
> + );
> + if (mHiiHandle == NULL) {
> + return EFI_OUT_OF_RESOURCES;
> + }
> +
> + Status = InitialHiiVairable ();
> + if (EFI_ERROR (Status)) {
> + DEBUG ((DEBUG_ERROR, "%a, failed to initial variable: %r\n", __func__,
> Status));
> + }
> +
> + return EFI_SUCCESS;
> +}
> +
> +/**
> + Unloads the application and its installed protocol.
> +
> + @param[in] ImageHandle Handle that identifies the image to be
> unloaded.
> +
> + @retval EFI_SUCCESS The image has been unloaded.
> +**/
> +EFI_STATUS
> +EFIAPI
> +Hii2RedfishMemoryDxeDriverUnload (
> + IN EFI_HANDLE ImageHandle
> + )
> +{
> + if (mHiiHandle != NULL) {
> + HiiRemovePackages (mHiiHandle);
> + }
> +
> + return EFI_SUCCESS;
> +}
> diff --git
> a/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeMap.uni
> b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeMap.uni
> new file mode 100644
> index 00000000..de1a6ef3
> --- /dev/null
> +++
> b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeMap.uni
> @@ -0,0 +1,38 @@
> +/** @file
> + HII-to-Redfish memory driver.
> +
> + (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +/=#
> +#langdef x-uefi-redfish-Memory.v1_7_1 "Memory.v1_7_1"
> +
> +#string STR_MEMORY_1_BASE_MODULE_TYPE_PROMPT #language x-
> uefi-redfish-Memory.v1_7_1 "/Memory/{1}/BaseModuleType"
> +#string STR_MEMORY_1_BUS_WIDTH_BITS_PROMPT #language x-uefi-
> redfish-Memory.v1_7_1 "/Memory/{1}/BusWidthBits"
> +#string STR_MEMORY_1_CONFIGURATION_LOCKED_PROMPT #language
> x-uefi-redfish-Memory.v1_7_1 "/Memory/{1}/ConfigurationLocked"
> +#string STR_MEMORY_1_MODULE_PRODUCT_ID_PROMPT #language x-
> uefi-redfish-Memory.v1_7_1 "/Memory/{1}/ModuleProductID"
> +
> +#string STR_MEMORY_2_BASE_MODULE_TYPE_PROMPT #language x-
> uefi-redfish-Memory.v1_7_1 "/Memory/{2}/BaseModuleType"
> +#string STR_MEMORY_2_BUS_WIDTH_BITS_PROMPT #language x-uefi-
> redfish-Memory.v1_7_1 "/Memory/{2}/BusWidthBits"
> +#string STR_MEMORY_2_CONFIGURATION_LOCKED_PROMPT #language
> x-uefi-redfish-Memory.v1_7_1 "/Memory/{2}/ConfigurationLocked"
> +#string STR_MEMORY_2_MODULE_PRODUCT_ID_PROMPT #language x-
> uefi-redfish-Memory.v1_7_1 "/Memory/{2}/ModuleProductID"
> +
> +#string STR_MEMORY_3_BASE_MODULE_TYPE_PROMPT #language x-
> uefi-redfish-Memory.v1_7_1 "/Memory/{3}/BaseModuleType"
> +#string STR_MEMORY_3_BUS_WIDTH_BITS_PROMPT #language x-uefi-
> redfish-Memory.v1_7_1 "/Memory/{3}/BusWidthBits"
> +#string STR_MEMORY_3_CONFIGURATION_LOCKED_PROMPT #language
> x-uefi-redfish-Memory.v1_7_1 "/Memory/{3}/ConfigurationLocked"
> +#string STR_MEMORY_3_MODULE_PRODUCT_ID_PROMPT #language x-
> uefi-redfish-Memory.v1_7_1 "/Memory/{3}/ModuleProductID"
> +
> +#string STR_MEMORY_4_BASE_MODULE_TYPE_PROMPT #language x-
> uefi-redfish-Memory.v1_7_1 "/Memory/{5}/BaseModuleType"
> +#string STR_MEMORY_4_BUS_WIDTH_BITS_PROMPT #language x-uefi-
> redfish-Memory.v1_7_1 "/Memory/{5}/BusWidthBits"
> +#string STR_MEMORY_4_CONFIGURATION_LOCKED_PROMPT #language
> x-uefi-redfish-Memory.v1_7_1 "/Memory/{5}/ConfigurationLocked"
> +#string STR_MEMORY_4_MODULE_PRODUCT_ID_PROMPT #language x-
> uefi-redfish-Memory.v1_7_1 "/Memory/{5}/ModuleProductID"
> +
> +#string STR_MEMORY_RDIMM_PROMPT #language x-uefi-redfish-
> Memory.v1_7_1 "RDIMM"
> +#string STR_MEMORY_UDIMM_PROMPT #language x-uefi-redfish-
> Memory.v1_7_1 "UDIMM"
> +#string STR_MEMORY_SO_DIMM_PROMPT #language x-uefi-
> redfish-Memory.v1_7_1 "SO_DIMM"
> +#string STR_MEMORY_LRDIMM_PROMPT #language x-uefi-redfish-
> Memory.v1_7_1 "LRDIMM"
> +#string STR_MEMORY_MINI_RDIMM_PROMPT #language x-uefi-
> redfish-Memory.v1_7_1 "Mini_RDIMM"
> +#string STR_MEMORY_MINI_UDIMM_PROMPT #language x-uefi-
> redfish-Memory.v1_7_1 "Mini_UDIMM"
> diff --git
> a/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeStrings.u
> ni
> b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeStrings.u
> ni
> new file mode 100644
> index 00000000..bfa082fd
> --- /dev/null
> +++
> b/RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeStrings.u
> ni
> @@ -0,0 +1,68 @@
> +/** @file
> + HII-to-Redfish memory driver.
> +
> + (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +/=#
> +#langdef en-US "English"
> +
> +#string STR_FORM_SET_TITLE #language en-US "HII to Redfish
> (Memory)"
> +#string STR_FORM_SET_TITLE_HELP #language en-US "HII to Redfish
> (Memory)"
> +#string STR_FORM_TITLE #language en-US "HII to Redfish
> Memory properties"
> +
> +#string STR_FORM_TITLE_MEMORY_1 #language en-US "Memory
> 1"
> +#string STR_FORM_HELP_MEMORY_1 #language en-US "Memory
> 1"
> +#string STR_FORM_TITLE_MEMORY_2 #language en-US "Memory
> 2"
> +#string STR_FORM_HELP_MEMORY_2 #language en-US "Memory
> 2"
> +#string STR_FORM_TITLE_MEMORY_3 #language en-US "Memory
> 3"
> +#string STR_FORM_HELP_MEMORY_3 #language en-US "Memory
> 3"
> +#string STR_FORM_TITLE_MEMORY_4 #language en-US "Memory
> 5"
> +#string STR_FORM_HELP_MEMORY_4 #language en-US "Memory
> 5"
> +
> +
> +#string STR_MEMORY_1_BASE_MODULE_TYPE_PROMPT #language en-US
> "Base module type"
> +#string STR_MEMORY_1_BASE_MODULE_TYPE_HELP #language en-US
> "The value of this property shall be the base module type of Memory"
> +#string STR_MEMORY_1_BUS_WIDTH_BITS_PROMPT #language en-US
> "Bus Width in bits"
> +#string STR_MEMORY_1_BUS_WIDTH_BITS_HELP #language en-US "The
> value of this property shall be the bus width in bits"
> +#string STR_MEMORY_1_CONFIGURATION_LOCKED_PROMPT #language en-
> US "Configuration Locked"
> +#string STR_MEMORY_1_CONFIGURATION_LOCKED_HELP #language en-US
> "The value of this property shall be the current configuration lock state of this
> memory. True shall indicate that the configuration is locked and cannot be
> altered. False shall indicate that the configuration is not locked and may be
> altered"
> +#string STR_MEMORY_1_MODULE_PRODUCT_ID_PROMPT #language en-
> US "Module Product ID"
> +#string STR_MEMORY_1_MODULE_PRODUCT_ID_HELP #language en-US
> "The product ID of this memory module."
> +
> +#string STR_MEMORY_2_BASE_MODULE_TYPE_PROMPT #language en-US
> "Base module type"
> +#string STR_MEMORY_2_BASE_MODULE_TYPE_HELP #language en-US
> "The value of this property shall be the base module type of Memory"
> +#string STR_MEMORY_2_BUS_WIDTH_BITS_PROMPT #language en-US
> "Bus Width in bits"
> +#string STR_MEMORY_2_BUS_WIDTH_BITS_HELP #language en-US "The
> value of this property shall be the bus width in bits"
> +#string STR_MEMORY_2_CONFIGURATION_LOCKED_PROMPT #language en-
> US "Configuration Locked"
> +#string STR_MEMORY_2_CONFIGURATION_LOCKED_HELP #language en-US
> "The value of this property shall be the current configuration lock state of this
> memory. True shall indicate that the configuration is locked and cannot be
> altered. False shall indicate that the configuration is not locked and may be
> altered"
> +#string STR_MEMORY_2_MODULE_PRODUCT_ID_PROMPT #language en-
> US "Module Product ID"
> +#string STR_MEMORY_2_MODULE_PRODUCT_ID_HELP #language en-US
> "The product ID of this memory module."
> +
> +#string STR_MEMORY_3_BASE_MODULE_TYPE_PROMPT #language en-US
> "Base module type"
> +#string STR_MEMORY_3_BASE_MODULE_TYPE_HELP #language en-US
> "The value of this property shall be the base module type of Memory"
> +#string STR_MEMORY_3_BUS_WIDTH_BITS_PROMPT #language en-US
> "Bus Width in bits"
> +#string STR_MEMORY_3_BUS_WIDTH_BITS_HELP #language en-US "The
> value of this property shall be the bus width in bits"
> +#string STR_MEMORY_3_CONFIGURATION_LOCKED_PROMPT #language en-
> US "Configuration Locked"
> +#string STR_MEMORY_3_CONFIGURATION_LOCKED_HELP #language en-US
> "The value of this property shall be the current configuration lock state of this
> memory. True shall indicate that the configuration is locked and cannot be
> altered. False shall indicate that the configuration is not locked and may be
> altered"
> +#string STR_MEMORY_3_MODULE_PRODUCT_ID_PROMPT #language en-
> US "Module Product ID"
> +#string STR_MEMORY_3_MODULE_PRODUCT_ID_HELP #language en-US
> "The product ID of this memory module."
> +
> +#string STR_MEMORY_4_BASE_MODULE_TYPE_PROMPT #language en-US
> "Base module type"
> +#string STR_MEMORY_4_BASE_MODULE_TYPE_HELP #language en-US
> "The value of this property shall be the base module type of Memory"
> +#string STR_MEMORY_4_BUS_WIDTH_BITS_PROMPT #language en-US
> "Bus Width in bits"
> +#string STR_MEMORY_4_BUS_WIDTH_BITS_HELP #language en-US "The
> value of this property shall be the bus width in bits"
> +#string STR_MEMORY_4_CONFIGURATION_LOCKED_PROMPT #language en-
> US "Configuration Locked"
> +#string STR_MEMORY_4_CONFIGURATION_LOCKED_HELP #language en-US
> "The value of this property shall be the current configuration lock state of this
> memory. True shall indicate that the configuration is locked and cannot be
> altered. False shall indicate that the configuration is not locked and may be
> altered"
> +#string STR_MEMORY_4_MODULE_PRODUCT_ID_PROMPT #language en-
> US "Module Product ID"
> +#string STR_MEMORY_4_MODULE_PRODUCT_ID_HELP #language en-US
> "The product ID of this memory module."
> +
> +#string STR_MEMORY_RDIMM_PROMPT #language en-US
> "RDIMM"
> +#string STR_MEMORY_UDIMM_PROMPT #language en-US
> "UDIMM"
> +#string STR_MEMORY_SO_DIMM_PROMPT #language en-US
> "SO_DIMM"
> +#string STR_MEMORY_LRDIMM_PROMPT #language en-US
> "LRDIMM"
> +#string STR_MEMORY_MINI_RDIMM_PROMPT #language en-US
> "Mini_RDIMM"
> +#string STR_MEMORY_MINI_UDIMM_PROMPT #language en-US
> "Mini_UDIMM"
> diff --git a/RedfishClientPkg/RedfishClient.fdf.inc
> b/RedfishClientPkg/RedfishClient.fdf.inc
> index fa4e5389..7421440b 100644
> --- a/RedfishClientPkg/RedfishClient.fdf.inc
> +++ b/RedfishClientPkg/RedfishClient.fdf.inc
> @@ -2,10 +2,11 @@
> # Redfish Client FDF include file for [FV*] section of all Architectures.
> #
> # This file can be included to the [FV*] section(s) of a platform FDF file
> -# by using "!include RedfishClientPkg/RedfisClientLibs.fdf.inc" to specify the
> module instances
> +# by using "!include RedfishClientPkg/RedfishClientLibs.fdf.inc" to specify the
> module instances
> # to be built in the firmware volume.
> #
> # (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP<BR>
> +# Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights
> reserved.
> #
> # SPDX-License-Identifier: BSD-2-Clause-Patent
> #
> @@ -19,6 +20,7 @@
> INF
> RedfishClientPkg/Features/ComputerSystem/v1_5_0/Dxe/ComputerSystemD
> xe.inf
> INF
> RedfishClientPkg/Features/ComputerSystemCollectionDxe/ComputerSystem
> CollectionDxe.inf
> INF RedfishClientPkg/Features/Bios/v1_0_9/Dxe/BiosDxe.inf
> + INF RedfishClientPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.inf
>
> !include RedfishClientPkg/RedfishJsonStructureDxe.fdf.inc
> #
> --
> 2.17.1
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-06-07 6:56 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-06 13:38 [edk2-redfish-client][PATCH 1/3] RedfishClientPkg: Add a sample memory configuration HII driver Nickle Wang
2023-06-07 6:56 ` Chang, Abner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox